С++具有非常有效的算法,可以使用函数dgeev计算MKL库中的特征值和特征向量。但是它会计算所有特征值,以及所有左和rirhgt特征向量。
特征值(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%存在,并且仅包含实数。
您无法用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
例程可以轻松地完成此操作,该例程为矩阵大小和引导尺寸指定适当的值。