0

M*x=0Eigen線形代数ライブラリを使用して自明でない解を得るにはどうすればよいですか。私はこれを試しましたが、解決策はすべてゼロです。

Matrix<float,2,3> m ;
Matrix<float,2,1> y ;
m << 2 , 3 ,5 , -4 , 2, 3;
y(0,0) = 0;
y(1,0) = 0;
cout << "Here is matrix m:" << endl << m << endl;
cout << "Here is matrix y:" << endl << y << endl;
cout<<"solution: \n"<<m.fullPivLu().solve(y);
4

2 に答える 2

3

を解こうとしているのですM * x = 0から、 を返すのは理にかなっていx=0ます。この簡単な解決策を避けたい場合は、制約を追加する必要があります。たとえば、(ラグランジュ乗数による) 固有値問題が発生する場合、|M * x|^2対象を最小化したいと言うかもしれません。|x|=1あなたの解は、最小固有値に対応する固有ベクトルです。固有値の使用:

Matrix3f A = m.adjoint() * m;
Vector3f x = SelfAdjointEigenSolver<Matrix3f>(A).eigenvectors().col(0);

ここで私は得る:

x = 0.032739  0.851202 -0.523816

m * xの順です1e-16

于 2013-11-13T10:10:59.730 に答える