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

C++使用eigen库做本征分解(eigendecomposition)Eigendecomposition的概念可见https://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix这里贴一段厄米矩阵的代码,见ht

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • javawebservice_java web 框架

    javawebservice_java web 框架下面分别介绍一个这几种WebService框架的基本概念1、JWS是Java语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用WebService服务的一种途径。2、Axis2是Apache下的一个重量级WebService框架,准确说它是一个WebServices/SOAP/…

  • 0.九九乘法表[递归]

    0.九九乘法表[递归]

  • 安卓学习之-ActivityManager

    安卓学习之-ActivityManagerActivityManager.MemoryInfo:系统可用内存信息ActivityManager.RecentTaskInfo:最近的任务信息ActivityManager.RunningAppProcessInfo:正在运行的进程信息ActivityManager.RunningServiceInfo:正在运行的服务信息

  • VS2010安装离线MSDN「建议收藏」

    VS2010正式版不再有单独的MSDNLibrary安装选项,以至于很多同学找不到本地的MSDNLibrary来用,其实VS2010的ISO安装光盘里已经包含有MSDNLibrary,只不过要手动安装,方法如下:1、安装完VS2010后,在开始菜单中打开MicrosoftVisualStudio2010-VisualStudioTools–ManageHelpSet

  • navicat15激活码大全(JetBrains全家桶)2022.03.02[通俗易懂]

    (navicat15激活码大全)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html40ZKSWCX8G-eyJsaWNlbnNlSWQi…

  • BigDecimal.setScale用法总结(固定精度)

    BigDecimal.setScale用法总结(固定精度)BigDecimal.setScale(intnewScale,introundingMode)newScale:保留newScale位小数roundingMode:舍去规则(0<=roundingMode<=7)一、BigDecimal.ROUND_DOWNBigDecimalnum=newBigDecimal(“3.16159”);//…

    2022年10月20日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号