C 運用Eigen3特徵值求解最小二乘法

2021-09-02 22:45:27 字數 1264 閱讀 2292

對於直線擬合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...