微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中广义特征值问题的高效求解

如何解决python中广义特征值问题的高效求解

给定一个特征值问题 Ax = λBx 在这里显示的两个问题中更有效的解决方法是什么:

import scipy as sp
import numpy as np

def geneivprob(A,B):
    # Use scipy
    lamda,eigvec = sp.linalg.eig(A,B)
    return lamda,eigvec

def geneivprob2(A,B):
    # Reduce the problem to a standard symmetric eigenvalue problem
    Linv = np.linalg.inv(np.linalg.cholesky(B))
    C = Linv @ A @ Linv.transpose()
    #C = np.asmatrix((C + C.transpose())*0.5,np.float32)
    lamda,V = np.linalg.eig(C)
    return lamda,Linv.transpose() @ V   

我在代码库中看到了第二个版本,想知道它是否比简单地使用 scipy 更好。

解决方法

嗯,使用第二种方法没有明显的优势,也许对于某些类的矩阵会更好,我建议你测试你想要解决的问题。由于您正在变换特征向量,这也将变换误差对解的影响方式,也许这就是使用第二种方法的原因,不是效率,而是数值精度或收敛性。

另一件事是第二种方法仅适用于对称 B。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。