2013-05-22 74 views
4

在Matlab中檢查矩陣是否對稱正定的最快方法(運行時間)是什麼?我已經對大小(維度)從10000到100000變化的大量稀疏矩陣運行此測試?檢查矩陣是否爲SPD

編輯:

喬萊斯基是我的目的,如願昂貴。我需要一個骯髒的檢查,如果它表明矩陣可能是spd,那麼我可能只使用CHOL更可靠地檢查那些矩陣

回答

3

如上所述here,您可以使用chol函數來檢查矩陣是否爲PD。

CHOL函數提供了一個可選的第二個輸出參數「p」 ,如果發現矩陣是正定的,則​​該參數爲零。如果CHOL 函數僅提供一個 輸出參數,並且還給定了非確定的正數 矩陣,則會返回錯誤。注意:CHOL期望其輸入矩陣是對稱的,只有 看矩陣的上三角部分。

至於對稱性,你可以使用下面的功能:

issym = @(m) isequal(tril(x), triu(x)'); 
+0

cholesky對我的目的來說過於昂貴。我首先需要一個髒檢查,如果它表明矩陣可能是spd,那麼我可以更可靠地使用CHOL來檢查那些矩陣 – zimbra314

+1

如果你想要一個初步的髒檢測,直接使用正定性判據:檢查v'* A * v表示使得計算速度非常快的幾個向量v。對於某些向量,這相當於檢查矩陣中的單個元素。 –

1

我想你可以看看你的矩陣的特徵值,並檢查他們是否是完全不同的和真正的價值。

您可能,因此,想調用eig功能如下:

[V,D] = eig(A) 

我希望這有助於

2

我認爲這是一個不平凡的問題,有效地做到這一點。如果矩陣不是正定的,Cholesky算法將會失敗,所以最好實現自己,這也有一個好處,那就是當算法失敗時可以控制該做什麼,因爲輸入不是肯定的。我使用C#而不是Matlab來進行數學編程,而我的Cholesky實現只是少數幾行,所以並不困難。如果您使用別人的算法,那麼取決於它是如何實現的,如果您輸入非對稱矩陣,則可能會導致誤導結果,因爲某些實現假定矩陣是對稱的。我能想到的唯一的快速預測試就是檢查the matrix trace,如果矩陣是SPD,這將是正面的。