2014年6月10日火曜日

同次線形方程式の解

\(AX=0\)かつ\(X\neq0\)の時の解は行列\(A\)を特異値分解し、最小特異値に対応する右特異ベクトルとして得ることが出来る。
OpenCVにはこれを行ってくれる関数SVD::solveZが用意されている。 使い方は簡単で、以下のように入力の行列と結果を格納するための行列を引数として渡すことで計算結果を得ることが出来る。
このプログラムでは、以下の同次線形方程式を解いている。
\[\left\{ \begin{array}{@{}1} 2x-y+4z=0\\ -6x+3y-12z=0\\ 4x-2y+8z=0 \end{array} \right. \]

#include <iostream>
#include <opencv2/opencv.hpp>

int main(int argc, char** argv)
{
 cv::Mat A = (cv::Mat_<double>(3, 3) << 2, -1, 4, -6, 3, -12, 4, -2, 8);
 cv::Mat X;

 cv::SVD::solveZ(A, X);

 std::cout << X << std::endl;

 return 0;
}
結果
[-0.2445084883048524;  -0.9623980449408547;  -0.1183452670827875]

0 件のコメント:

コメントを投稿