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)

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C51浮点数显示、浮点数表示方法

    C51浮点数显示、浮点数表示方法C51中的浮点数存储方式–n年前曾在c51bbs论坛中发布过Float浮点形,它是符合IEEE-754标准的单精度浮点形数据,在十进制中具有7位有效数字。FLOAT型据占用四个字节(32位二进制数),在内存中的存放格式如下:字节地址(由低到高)0123浮点数内容MMMMMMMMMMMMMMMMEMMMMMMMSEEEEEEE其中,S为符号位,存放在最高字节

    2022年6月24日
    54
  • 有什么办法可以实时监控微信_微信被监控有什么特征

    有什么办法可以实时监控微信_微信被监控有什么特征如何同步员工微信聊天记录,员工微信监控管理?这就教你如何操作!企业员工微信怎么更好管理?如何微信监控聊天记录?工作手机管理系统实现员工企业微信聊天全程记录,敏感行为词全程监控,敏感行为监督,私单,飞

    2022年8月6日
    3
  • java学习——java中的反射学习笔记「建议收藏」

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

    2022年2月26日
    38
  • Git Flow印象

    Git Flow印象

    2021年8月21日
    67
  • fastDB_最近使用

    fastDB_最近使用fastdb的官网fastdb怎么在Linux上面安装?$su-$cd/usr/local/src$wgethttp://www.garret.ru/fastdb-3.76.tar

    2022年8月2日
    6
  • Java对象拷贝_对象的拷贝有几种方法

    Java对象拷贝_对象的拷贝有几种方法大多时候时候使用的是Apache或Spring“BeanUtils,今天,我们来看一下一个更高效的属性拷贝方式:BeanCopier。https://github.com/cglib/cglibhttps://github.com/cglib/cglib/blob/master/cglib/src/main/java/net/sf/cglib/beans/BeanCopier.java首先梳理出来现在有哪些对象拷贝的方式:Apache的BeanUtils:BeanUtils是Apach.

    2022年9月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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