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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mapminmax 用法

    mapminmax 用法mapminmax是MATLAB实现归一化的工具包,默认:(1)将矩阵的每行分别进行归一化;(2)每行的最大值最小值作为每行归一化的xmin和xmax;(3)将数据归一化到[-1,1].若要将数据归一化到0到1之间,即y∈[0,1],使用b=mapminmax(a,0,1);若给与确定的最大值和最小值作为每行的xmin和xmax,使用:b= mapminmax(a,0,1);PS.xmin…

    2022年6月30日
    21
  • 深度学习优化策略—权重、权重初始化与权重衰减「建议收藏」

    深度学习优化策略—权重、权重初始化与权重衰减「建议收藏」Nobiasdecay:一般来说,权重衰减会用到网络中所有需要学习的参数上面。然而仅仅将权重衰减用到卷积层和全连接层,不对biases,BN层的\gamma,\beta做权重衰减,效果会更好。BagofTricksforImageClassificationwithConvolutionalNeuralNetworks…

    2022年10月5日
    0
  • 归一化方法总结_实例归一化

    归一化方法总结_实例归一化参考自:http://blog.csdn.net/zbc1090549839/article/details/44103801http://blog.csdn.net/junmuzi/article/details/48917361归一化方法(NormalizationMethod)1。把数变为(0,1)之间的小数主要是为了数据处理方便提出来的,把数据映

    2022年10月11日
    0
  • 算法-DFA算法-敏感词过滤算法(OC、Swift、Python)「建议收藏」

    前言前段时间,公司的IMSDK想做敏感词过滤,但是后端的小伙伴《比较忙》,在开产品需求会的时候想把敏感词过滤放到前端,让iOS、安卓自己搞,但是前端小伙伴写了一个方法来检测一段文本,耗时一两秒钟而且比较耗CPU,这样肯定不行的,最后后端小伙伴妥协了,把敏感词过滤放到后端了。一般的思路可能是遍历敏感词库,然后把一段文字的敏感词过滤掉,但是针对比较大的词库时(比如我们的敏感词库10万),这样非…

    2022年4月10日
    198
  • layui弹出层的icon

    layui弹出层的icon1.layer.msg(‘弹出层’,{icon:1});2.layer.msg(‘弹出层’,{icon:2});3.layer.msg(‘弹出层’,{icon:3});4.layer.msg(‘弹出层’,{icon:4});5.layer.msg(‘弹出层’,{icon:5});6.layer.msg(‘弹出层’,{ico…

    2022年5月7日
    37
  • c++ char数组初始化_二维字符串数组初始化

    c++ char数组初始化_二维字符串数组初始化chars[10]=”Hello”;//剩余全用0填充chars[10]={‘H’,’e’,’l’,’l’,’o’,’\0′};//和上面效果一样chars[10]={‘H’,’e’,’l’,’l’,’o’};//和前面效果一样chars[10]={0}//全部初始化为0chars[10]=”Hello,world.\n”;//超出部分丢…

    2022年10月8日
    0

发表回复

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

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