基於eigen計算矩陣的特徵值和特徵向量
阿新 • • 發佈:2018-12-24
有點小瑕疵,就是讀取檔案和生成檔案的位置!備註下本文是在Ubuntu系統下構建的,一些地方可能存在著差異。
1 首先是在如下的檔案下建立data.txt
這個檔案與源程式的檔案在同一個目錄下,其中data.txt的資料及其格式如下:
2 程式
#include <iostream> #include <fstream> #include <Eigen/Dense> #include <Eigen/Eigenvalues> using namespace std; using namespace Eigen; int LEN=4; int main() { //MatrixXd m(LEN,LEN); MatrixXd mm(LEN,LEN); //資料型別必須是整型 //讀取txt資料。 // m << 1, 2, 3, 4, // 5, 6, 7, 8, // 9,10,11,12, // 13,14,15,16; ifstream in("data.txt"); //讀取存有資料的txt檔案 if(!in.is_open ()) cout << "開啟失敗!" << endl; //如果讀取失敗,則列印“開啟失敗!” while (!in.eof()) //若未到檔案結束一直迴圈,讀取文字資料到mm { for(int a=0;a<LEN;a++) for(int b=0;b<LEN;b++) { in >> mm(a,b); } } cout << "讀取的資料是:" << endl; cout << mm.block(0,0,LEN,LEN) << endl << endl; //打印出讀取的資料 EigenSolver<Matrix4d> es(m);//計算資料,注意修改維度(下面的4) cout << "特徵值:" << endl << es.eigenvalues() << endl << endl; cout << "特徵向量:" << endl << es.eigenvectors() << endl << endl; ofstream outfile1; ofstream outfile2; string valuesFileName("values.txt"); //特徵值所在的txt檔案 string vectorsFileName("vectors.txt"); //特徵向量所在的txt檔案 outfile1.open(valuesFileName, ostream::app); //以新增模式開啟檔案 outfile2.open(vectorsFileName, ostream::app); //以新增模式開啟檔案 outfile1 << es.eigenvalues(); outfile2 << es.eigenvectors(); outfile1.close(); //關閉檔案 outfile2.close(); //關閉檔案 return 0; }
3 解釋
註釋這麼清楚,不解釋!
4 結果
特徵值和特徵向量最後會輸出到values.txt和vecors.txt檔案中。