前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++使用eigen库做本征分解(eigendecomposition)

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

作者头像
全栈程序员站长
发布2022-09-20 10:16:59
5260
发布2022-09-20 10:16:59
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

代码语言:javascript
复制
 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 }

输出结果为

代码语言:javascript
复制
 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)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167684.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档