對於直線擬合y=kx+b,構造方程組kx+b-y=0-》ax=0,求解a^t*a的最小特徵值對應的特徵向量,即使問題的答案k,b,1,下面用c++ eigen3來實現
#include #include #include #include using namespace eigen;
using namespace std;
int main()
double x = 0;
double y = 0;
vectorxs;
vectorys;
while (!fread.eof())
int len = xs.size();
//cout << len << endl;
eigen::matrixxd a(len, 3);
for (int i = 0; i < len; i++)
cout << "matrix a" << endl;
cout << a << endl;
eigen::selfadjointeigensolver < eigen::matrix> eigen_sovler(a.transpose()*a); // 特徵值求解器
cout << "eigen values : " << endl;
cout << eigen_sovler.eigenvalues().transpose() << endl; // 輸出特徵值
cout << "eigen vector :" << endl;
cout << eigen_sovler.eigenvectors() << endl; // 輸出特徵向量
double v[3];
v[0] = eigen_sovler.eigenvectors()(0, 0); // 提取第一列特徵向量
v[1] = eigen_sovler.eigenvectors()(1, 0);
v[2] = eigen_sovler.eigenvectors()(2, 0);
v[0] /= v[2];
v[1] /= v[2];
v[2] /= v[2];
cout <<"k:"<< v[0] << " " <<"b:"
<< v[1] << " " << v[2] << " " << endl;
return 0;
}
eigen求特徵值和特徵向量
eigen matrix2d matrix 22 matrix 22 2,3,2,1 cout matrix n matrix 22 eigen eigensolvereigen solver matrix 22 cout matrix values n eigen solver.eigenvalu...
Eigen庫求取最大特徵值和特徵向量
eigen庫中有求取矩陣特徵值和特徵向量的函式eigensolver,用起來很方便。但是官網說明文件裡,求取特徵向量後僅僅是輸出來表示,如何使用求得的這些引數,我花了一點時間琢磨出來。舉例如下 matrixk matrixxd random 4,4 eigensolverdouble,4,4 es ...
matlab與numpy求解特徵值與特徵向量
對比一下numpy與matlab求解的特徵值與特徵向量 特徵值 1 2 1 3 2 特徵值 1 1 2 3 2 如何求解特徵向量 1.這裡列舉第乙個中 1時對應的特徵向量。a e x 0 得 a e x 0 對a e進行 行變換 得 2,1,0 1,0,1 0,0,0 2 x1 x2 0 x1 x3...