2014-02-08 90 views
3

我想找到矩陣的最小(絕對值)非零特徵值。我可以使用numpy使用浮點運算來做到這一點,但準確找到最小特徵值

  • 有沒有辦法得到確切的答案?
  • 你必須爲此使用sympy還是有其他方法?

矩陣將會很小(比如小於20乘以20)整數值。當我說出確切的答案時,我的意思是與the answer of John Habert中的那些例子類似。

+0

你能確定你的意思嗎?我們在談論什麼類型的矩陣?什麼尺寸? –

+0

我不認爲你可以在所有情況下得到確切的答案,即使對於具有整數元素的矩陣。 – user2357112

回答

7

特徵值是algebraic numbers,即一些多項式的根。該多項式的程度將是矩陣維數。對於多項式達到4級,原則上能夠將這些數字寫成嵌套根,但除此之外,通常無法準確表示特徵值。即使在情況下,這將是可能的,你當然不希望看到的精確值,這裏是一個傻傻的看着小矩陣的例子:

1

從您的文章,目前尚不清楚是否矩陣將是Hermitian。我不知道一般情況下的方法。

但是!如果矩陣是Hermitian(對稱正定),則可以避免計算所有的特徵值,如果你只需要最小的那個(這將是正的)。您可以使用反向迭代。 http://en.wikipedia.org/wiki/Inverse_iteration

你可以用mu = 0開始算法;然後使用瑞利商 http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration這通常會給你非常快的收斂。該方法涉及方程的線性系統的解(或者,稍微等價地計算逆矩陣),但是如果矩陣又是厄米特矩陣,則可以爲其生成Cholesky分解,然後使用得到的三角矩陣解決系統問題。

在某些情況下,該方法會收斂到不正確的特徵值(比如,最小的旁邊)。另外,有趣的觀察結果是矩陣A的最大特徵值等於該矩陣的範數(其元素的平方和的平方根)。 A的SMALLEST特徵值等於1除以A的INVERSE的範數。因此,如果你的矩陣不是很大並且它的逆矩陣存在,那麼你可以負反轉它,然後執行它,然後計算1 /範數(INV(A))。這個值將是A的最小特徵值。

+0

我不是數值分析師,但它看起來像逆迭代給出了特徵值的數值近似值,而不是OP正在尋找的確切特徵值。我不認爲最後一段是真的:[[1 0] [0 2]]的規範是√5。也許規範限制了特徵值? – Teepeemm

+0

是的,你是對的,它會給出一個近似值,也許不是OP可能想要的。 Matlab爲我的矩陣提供了一個標準= 2。也許是因爲它計算了L2規範。你可以參考sqrt(5)的Frobenius規範。當我說最大的特徵值等於「矩陣元素平方和的平方根」時,我是不正確的。 其實有不同的規範: http://mathworld.wolfram.com/MatrixNorm.html http://mathworld.wolfram.com/FrobeniusNorm.html 感謝您指出這種模糊性。 – Lelik