如何尽可能高效地为C ++上的一个特征值lambda = 1计算一个特征向量

问题描述 投票:0回答:1

С++具有非常有效的算法,可以使用函数dgeev计算MKL库中的特征值和特征向量。但是它会计算所有特征值,以及所有左和rirhgt特征向量。

DGEEV Example Program Results

特征值(2.86,10.76)(2.86,-10.76)(-0.69,4.70)(-0.69,-4.70)-10.46

左特征向量(0.04,0.29)(0.04,-0.29)(-0.13,-0.33)(-0.13,0.33)0.04(0.62,0.00)(0.62,0.00)(0.69,0.00)(0.69,0.00)0.56(-0.04,-0.58)(-0.04,0.58)(-0.39,-0.07)(-0.39,0.07)-0.13(0.28,0.01)(0.28,-0.01)(-0.02,-0.19)(-0.02,0.19)-0.80(-0.04,0.34)(-0.04,-0.34) (-0.40,0.22)(-0.40,-0.22)0.18

右特征向量(0.11,0.17)(0.11,-0.17)(0.73,0.00)(0.73,0.00)0.46(0.41,-0.26)(0.41,0.26)(-0.03,-0.02)(-0.03,0.02)0.34(0.10,-0.51)(0.10,0.51)(0.19,-0.29)(0.19, 0.29)0.31(0.40,-0.09)(0.40,0.09)(-0.08,-0.08)(-0.08,0.08)-0.74(0.54,0.00)(0.54,0.00)(-0.29,-0.49)(-0.29,0.49)0.16

对于大型矩阵,这需要很多时间。尤其是如果您需要为大量矩阵计算特征向量。

所以主要问题是,如何仅对于一个特征值λ= 1才能为实数矩阵仅计算一个特征向量?或者我如何求解线性方程组A-E = 0,其中A是一个实矩阵,E-恒等矩阵。特征向量100%存在,并且仅包含实数。

lapack intel-mkl eigenvalue eigenvector
1个回答
0
投票

您无法用B x = 0真正解决B = A - I。如果A具有单位特征值,则该方程具有无限多个解。

对于最简单的解决方案,将x(n) = 1替换为任意n,例如n = N。然后使用第一个N-1方程式找到x(1:N-1)。有效地,您必须将B' x' = r求解为x' = x(1:N-1),其中B' = B(1:N-1, 1:N-1)r = -B(1:N-1,N)。使用MKL / LAPACK ?gesv例程可以轻松地完成此操作,该例程为矩阵大小和引导尺寸指定适当的值。

© www.soinside.com 2019 - 2024. All rights reserved.