快速有效地计算已知特征值的特征向量

2024-06-19

我的问题的简短版本:

计算矩阵特征向量的最佳方法是什么A,如果我们已经知道属于特征向量的特征值呢?

更长的解释:

我有一个很大的随机矩阵A由于它是随机的,因此具有非负左特征向量x(这样A^Tx=x).

我正在寻找快速有效的方法来数值计算这个向量。 (最好在 MATLAB 或 numpy/scipy 中 - 因为这两者都围绕 ARPACK/LAPACK,所以任何一个都可以)。

我知道1是最大特征值A,所以我知道调用类似这样的Python代码:

from scipy.sparse.linalg import eigs
vals, vecs = eigs(A, k=1)

将导致vals = 1 and vecs等于我需要的向量。

然而,这里让我困扰的是,计算特征值通常比求解线性系统更困难,并且通常,如果矩阵M有特征值l,那么找到合适的特征向量就是求解方程的问题(M - 1 * I) * x = 0,至少在理论上,这是一种比计算特征值更简单的运算,因为我们只是求解线性系统,更具体地说,是找到矩阵的零空间。

然而,我发现所有的零空间计算方法MATLAB依靠svd计算,这是一个我无法在我这么大的矩阵上执行的过程。我也无法调用线性方程的求解器,因为它们都只能找到一个解,而该解是0(是的,这是一种解决方案,但不是我需要的)。

有什么办法可以避免调用eigs- 类似的函数比计算最大特征值和伴随的特征向量更快地解决我的问题?


这是使用 Matlab 的一种方法:

  1. Let x denote the (row) left eigenvector associated to eigenvalue 1. It satisfies the system of linear equations (or matrix equation) xA = x, or x(AI)=0.
  2. 为了避免该方程组的全零解,请删除第一个方程并任意设置x其余方程中为 1。
  3. Solve those remaining equations (with x1 = 1) to obtain the other entries of x.

使用 Matlab 的示例:

>> A = [.6 .1 .3
        .2 .7 .1
        .5 .1 .4]; %// example stochastic matrix
>> x = [1, -A(1, 2:end)/(A(2:end, 2:end)-eye(size(A,1)-1))]
x =
   1.000000000000000   0.529411764705882   0.588235294117647
>> x*A %// check
ans =
   1.000000000000000   0.529411764705882   0.588235294117647

注意代码-A(1, 2:end)/(A(2:end, 2:end)-eye(size(A,1)-1))是步骤3。

In your formulation you define x to be a (column) right eigenvector of AT (such that ATx = x). This is just x.' from the above code:

>> x = x.'
x =
   1.000000000000000
   0.529411764705882
   0.588235294117647
>> A.'*x %// check
ans =
   1.000000000000000
   0.529411764705882
   0.588235294117647

你当然可以正常化特征向量为和 1:

>> x = x/sum(x)
x =
   0.472222222222222
   0.250000000000000
   0.277777777777778
>> A.'*x %'// check
ans =
   0.472222222222222
   0.250000000000000
   0.277777777777778

Following the usual convention http://en.wikipedia.org/wiki/Stochastic_matrix. Equivalently, this corresponds to a right eigenvector of the transposed matrix.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速有效地计算已知特征值的特征向量 的相关文章

随机推荐