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)


相关推荐

  • 虚拟机centos7没有ip地址怎么弄_虚拟机查ipconfig命令不存在

    虚拟机centos7没有ip地址怎么弄_虚拟机查ipconfig命令不存在进入ect/sysconfig/network-scripts目录在文件路径下找到ifcfg-ens33文件然后进行修改将ONBOOT的值改为yes,ONBOOT的意思是,开机时是否启动。重启网络服务,servicenetwordrestart,再重新查看ip地址,ip地址就可以看到了…

  • 树莓派视觉小车 — 人脸追踪(人脸识别、PID控制舵机运动)[通俗易懂]

    树莓派视觉小车 — 人脸追踪(人脸识别、PID控制舵机运动)[通俗易懂]效果展示基础理论(人脸识别)人脸检测算法按照方法可以被分为两大类,基于特征的算法、基于图像的算法。1、基于特征的算法基于特征的算法就是通过提取图像中的特征和人脸特征进行匹配,如果匹配上了就说明是人脸,反之则不是。提取的特征是人为设计的特征,例如Haar,FHOG,特征提取完之后,再利用分类器去进行判断。通俗的说就是采用模板匹配,就是用人脸的模板图像与待检测的图像中的各个位置进行匹配,匹配的内容就是提取的特征,然后再利用分类器进行判断是否有人脸。…

  • DELPHI XE5安装

    DELPHI XE5安装1.安装XE52.HNFJ-DPADCW-BDWCFU-FPNNQDF4-CTSDHV-RDFCFE-FEANHNFK-BCN8NN-78N53D-H4RS激活成功教程补丁使用方法:(1).复制压缩包内的“R

  • mysql左连接多个表_mysql可以创建多少张表

    mysql左连接多个表_mysql可以创建多少张表A表:姓名,学号,班级编号B表:学号,成绩C表:班级编号,班级名称最后想显示为姓名,学号,成绩,班级名称A、B表用wherea.学号=b.学号查出之后再和C表左连接sql语句如下:selecta.姓名,a.学号,b.成绩,c.班级名称fromA表aleftjoinB表bona.学号=b.学号leftjoinC表cona.班级编号=c.班级编号…

  • python sendfile_sendfile详解(转)[通俗易懂]

    python sendfile_sendfile详解(转)[通俗易懂]在apache,nginx,lighttpd等web服务器当中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile到底是什么呢?它的原理又是如何呢?在传统的文件传输里面(read/write方式),在实现上其实是比较复杂的,需要经过多次上下文的切换,我们看一下如下两行代码:read(file,tmp_buf,len);write(…

  • 【Spring基础】CGLIB动态代理实现原理[通俗易懂]

    【Spring基础】CGLIB动态代理实现原理[通俗易懂]前言Github:https://github.com/yihonglei/thinking-in-spring一CGLIB介绍CGLIB(CodeGenerationLibrary)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(PersistentObject持久化对象)…

发表回复

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

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