2012-04-07 61 views
2

我想解决广义特征值问题A.c =(lam).B.c其中A和B是nxn矩阵,c是nx1向量。 (lam)是特征值。Python中的广义特征值

我正在使用python。我从numpy.linalg尝试了类似eig(dot(inv(B),A))的东西,但事实证明,由于涉及到反转,所以在我的问题中非常不稳定。所以我一直在阅读,它可以在MATLAB中完成,但我找不到任何函数或方法在python中执行它。任何想法将不胜感激。谢谢...

+0

我对线性代数了解不够,无法理解一般算法/方法来解决这个问题。你能描述一下你打算使用的算法吗?如果是这样,那么我可能会给你这样做的Python代码。或者你正在寻找一个已经为你做这个的图书馆? – 2012-04-07 21:29:37

+0

这可能是值得你的问题再次寻找 - 你很少_need_反转矩阵,它似乎只是有时。 http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/反转,正如你提到的,往往是非常数值不稳定,应该避免(如果可能的话!)。 – Hooked 2012-05-08 17:05:25

回答

6

你为什么不尝试使用scipy?它在线性代数模块scipy.linalg.eig中有一个方法,可用于“解决普通或广义特征值问题”。

scipy.linalg.eig(a, b=None, left=False, right=True, overwrite_a=False, overwrite_b=False)[source] 

    Solve an ordinary or generalized eigenvalue problem of a square matrix. 

    Find eigenvalues w and right or left eigenvectors of a general matrix: 

    a vr[:,i] = w[i]  b vr[:,i] 
    a.H vl[:,i] = w[i].conj() b.H vl[:,i] 

    where .H is the Hermitean conjugation. 
+0

谢谢我明显错过了那一个。 – 2012-04-08 06:40:37