C++使用eigen库做本征分解(eigendecomposition)
C++ 使用 分解 Eigen
2023-06-13 09:12:57 时间
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)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167684.html原文链接:https://javaforall.cn
相关文章
- C++多态纯虚函数和抽象类与多态案例(二)-制作饮品
- C++最佳实践 | 2. 代码风格
- C++中的stringstream及其应用
- c++复合类型(使用new来分配内存/创建动态数组、delete释放内存)
- C/C++ 实现远程线程DLL注入
- C/C++ MinHook 库的使用技巧
- C/C++ 使用SEH让崩溃进程转存
- C/C++ Qt 使用JSON解析库 [修改篇]
- 【C++】二叉搜索树
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ③ ( 创建工程目录 | 添加 C++ 源代码 | 代码自动提示 )
- 【C++】通过priority_queue、reverse_iterator加深对于适配器和仿函数的理解
- C++STL——map与set介绍及使用
- C++著名程序库的比较和学习经验详解编程语言
- C++ map插入数据(STL map插入数据)详解
- 什么是常量,C++常量及用法(无师自通)
- 深入分析C++中deque的使用
- 深入C++中inline关键字的使用
- c++dynamic_cast与static_cast使用方法示例
- Mac下使用Eclipse编译C/C++文件出现launchfailed,binarynotfound解决方案