OpenGL de プログラミング - OpenCV::特異値分解
現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::特異値分解

問題


次の連立方程式を「特異値分解」を用いて解け

 4x + y + 3z = 8
 5x + y - z = 2
 2x + 2y = 0
 -3x +y + 5z = 5


※特異値分解
http://ja.wikipedia.org/wiki/%E7%89%B9%E7%95%B0%E5...

答え


#include <cv.h>
#include <highgui.h>
#include <cstdio>

using namespace std;

double data_A[] =
{
4,1,3,
5,1,-1,
2,2,0, -3,1,5
};

double data_Y[]=
{
8,
2,
0,
5
};

int main( int argc, char **argv)
{

CvMat Matrix_A = cvMat (4,3, CV_64F, data_A);
CvMat Matrix_Y = cvMat (4,1, CV_64F, data_Y);// 縦4、横1

CvMat *Matrix_X;
Matrix_X = cvCreateMat(3, 1, CV_64F);


cvSolve( &Matrix_A, &Matrix_Y, Matrix_X, CV_SVD );


for(int i = 0;i<3;i++)
{
printf("answer[%d] = %f\n",i+1,Matrix_X->data.db[i]);
}


cvReleaseMat(&Matrix_X);

return 0;
}

メモ


答えは

x = 0.928934
y = -0.924220
z = 1.740029

となる。



行列でいうと
Y = AX
のX部分を求めることになる。


cvSolve()関数
http://opencv.jp/opencv/document/opencvref_cxcore_...
※直接関数の参照にいけないっぽい?