Numpy中子空间迭代方法的递归实现问题

计算科学 数字 迭代法 麻木的
2021-11-29 15:27:32

我在实现子空间迭代方法来查找随机对称矩阵的特征值和向量时遇到了麻烦,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它代表一个特定的特征向量,并且jvin的位置V

据我了解,子空间迭代的基本思想是同时在不同v的 上执行幂迭代,同时减去v与特征值相关联的特征向量方向的分量,该特征值大于与所讨论的特定相关联的特征v值. 我曾尝试设计此功能以在这样的容量下运行,但我得到的结果不支持上述想法。所有特征值都快速收敛(正如它们应该的那样),但收敛到一个非常接近最大值的值,而不是不同的、不同的特征值(我知道它们的值是因为我事先用 计算了它们的值np.linalg.eigs())。

v在调用函数之前和之后,在程序中对 's 进行归一化,并使用 Rayleigh-Taylor 商计算特征值v_j.T*A*v_j用 实现np.matmul())。在这一点上,我迷路了,希望有才华的人能照亮我并帮助我。 `

0个回答
没有发现任何回复~