本文主要阐述用Eigen库计算矩阵特征值和特征向量,并与Matlab计算结果进行比较。
C Eigen库代码
#包含
#包含
#包含
using namespace Eigen;
用户命名空间STD;
void Eig () )
{
矩阵3d a;
a1、2、3、4、5、6、7、8、9;
cout ' here is a 3x 3矩阵,A:' endl A endl endl;
EigenSolveres(a;
matrix 3d=es.pseudoeigenvaluematrix (;
矩阵3d v=es.pseudo eigenvectors (;
cout ' the pseudo-eigenvaluematrixdis : ' endldendl;
cout ' the仿真- eigenvectormatrixvis : ' endlvendl;
cout 'Finally,v*d*v^(-1 )=' endl V * D * V.inverse ) ) endl;
}
int main () )
{
Eig (;
}
计算结果:
最大最小特征值及其索引位置
//maxCoeff
//minCoeff
int col_index,row_index;
coutd.maxcoeff(row_index,col_index ) endl;
cout row_index ' ' col_index endl;
匹配代码
清除全部
clc
A=[1 2 3; 4 ) 6; 7(9) )。
[V,d]=EIG(a ) ) ) )
Matlab的计算结果
sort ) )函数对特征值进行排序
主成分分析和很多应用时,需要排列特征值的大小。
a=幻方图(6;
[V,d]=EIG(a ) ) ) )
[D_S,index ]=sort (诊断(d ),' descend ' )
v_s=v(:索引) )。
结果
V=
0.4082-0.28870.40820.15070.4714-0.4769
0.40820.57740.40820.41100.4714-0.4937
0.4082-0.28870.4082-0.2602-0.23570.0864
0.40820.2887-0.40820.4279-0.47140.1435
0.4082-0.5774-0.4082-0.7465-0.4714.0338
0.40820.2887-0.40820.01710.23570.7068
D=
111.0000 0 0 0 0 0
0 27.0000 0 0 0 0
0 0 -27.0000 0 0 0
0 0 0 9.7980 0 0
0 0 0 0 -0.0000 0
0 0 0 0 0 -9.7980
D_S=
111.0000
27.0000
9.7980
-0.0000
-9.7980
-27.0000
V_S=
0.4082-0.28870.15070.4714-0.47690.4082
0.40820.57740.4110.4714-0.49370.4082
0.4082-0.2887-0.2602-0.23570.08640.4082
0.40820.28870.4279-0.47140.1435-0.4082
0.4082-0.5774-0.7465-0.47140.0338-0.4082
0.40820.28870.01710.23570.7068-0.4082
结语
我在实验中利用Eigen库求出最小特征值对应的特征向量进行PCA分析时使用。 我曾经在不知道有Eigen库的情况下自己写了矩阵相关运算的模板类,现在我来接触一下Eigen库,把自己遇到的困难总结一下。
希望以上是正文的全部内容,对大家的学习有帮助。 另外,我希望你支持很多编剧。