C++使用eigen库做本征分解(eigendecomposition)

发布时间:2025-12-09 13:40:46 浏览次数:4

Eigendecomposition的概念可见https://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix

这里贴一段厄米矩阵的代码,见https://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html

注意,不同本征值的本征向量是正交的,这是我们可以直接用矩阵共轭来取代矩阵求逆的原因。

 1 #include <iostream> 2 #include <eigen3/Eigen/Dense> 3 using namespace std; 4 using namespace Eigen; 5  6 int main () 7 { 8   Matrix2cd A; 9   A<<complex<double>(1,0), complex<double>(0,1),10     complex<double>(0,-1), complex<double>(1,0);11 12   SelfAdjointEigenSolver<Matrix2cd> solver(A);13   if (solver.info() != Success)14     {15       cerr<<"Eigen solver failed."<<endl;16       abort ();17     }18   Matrix2cd lambda = Matrix2cd::Zero();19   for (int i = 0; i < lambda.cols(); ++i)20     lambda(i,i) = solver.eigenvalues()(i);21   Matrix2cd Q = solver.eigenvectors();22   cout<<"Matrix A:\n"<<A<<endl<<endl;23   cout<<"Matrix lambda:\n"<<lambda<<endl<<endl;24   cout<<"Matrix Q:\n"<<Q<<endl<<endl;25   cout<<"Q*Q^dagger:\n"<<Q*Q.adjoint()<<endl<<endl;26   cout<<"Q*lambda*Q^dagger:\n"<<Q*lambda*Q.adjoint()<<endl<<endl;27 28   return 0;29 }

输出结果为

 1 Matrix A: 2  (1,0)  (0,1) 3 (0,-1)  (1,0) 4  5 Matrix lambda: 6 (0,0) (0,0) 7 (0,0) (2,0) 8  9 Matrix Q:10  (0.707107,0)  (0.707107,0)11  (0,0.707107) (0,-0.707107)12 13 Q*Q^dagger:14 (1,0) (0,0)15 (0,0) (1,0)16 17 Q*lambda*Q^dagger:18  (1,0)  (0,1)19 (0,-1)  (1,0)
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477