2012-04-07 60 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