我在实现子空间迭代方法来查找随机对称矩阵的特征值和向量时遇到了麻烦,A
即 mxm 和 m = 10。我为执行此任务而编写的函数是
def subspaceiterate(A,V,v,j):
if j == 0:
return v
else:
v_jm1 = V[:,j-1]
v_jm1 = np.reshape(v_jm1,(np.size(V,axis=0),1))
v = v - np.matmul(v_jm1.T,np.matmul(A,v_jm1))
j = j - 1
return subspaceiterate(A,V,v,j)
其中A
是我的对称数据矩阵,V
是一个 mxm 矩阵,其列代表特征向量的当前计算状态,v
是一个特定的 mx1 列,V
它代表一个特定的特征向量,并且j
是v
in的位置V
。
据我了解,子空间迭代的基本思想是同时在不同v
的 上执行幂迭代,同时减去v
与特征值相关联的特征向量方向的分量,该特征值大于与所讨论的特定相关联的特征v
值. 我曾尝试设计此功能以在这样的容量下运行,但我得到的结果不支持上述想法。所有特征值都快速收敛(正如它们应该的那样),但收敛到一个非常接近最大值的值,而不是不同的、不同的特征值(我知道它们的值是因为我事先用 计算了它们的值np.linalg.eigs()
)。
v
在调用函数之前和之后,在程序中对 's 进行归一化,并使用 Rayleigh-Taylor 商计算特征值(v_j.T*A*v_j
用 实现np.matmul()
)。在这一点上,我迷路了,希望有才华的人能照亮我并帮助我。 `