在Matlab中檢查矩陣是否對稱正定的最快方法(運行時間)是什麼?我已經對大小(維度)從10000到100000變化的大量稀疏矩陣運行此測試?檢查矩陣是否爲SPD
編輯:
喬萊斯基是我的目的,如願昂貴。我需要一個骯髒的檢查,如果它表明矩陣可能是spd,那麼我可能只使用CHOL更可靠地檢查那些矩陣
在Matlab中檢查矩陣是否對稱正定的最快方法(運行時間)是什麼?我已經對大小(維度)從10000到100000變化的大量稀疏矩陣運行此測試?檢查矩陣是否爲SPD
編輯:
喬萊斯基是我的目的,如願昂貴。我需要一個骯髒的檢查,如果它表明矩陣可能是spd,那麼我可能只使用CHOL更可靠地檢查那些矩陣
如上所述here,您可以使用chol
函數來檢查矩陣是否爲PD。
CHOL函數提供了一個可選的第二個輸出參數「p」 ,如果發現矩陣是正定的,則該參數爲零。如果CHOL 函數僅提供一個 輸出參數,並且還給定了非確定的正數 矩陣,則會返回錯誤。注意:CHOL期望其輸入矩陣是對稱的,只有 看矩陣的上三角部分。
至於對稱性,你可以使用下面的功能:
issym = @(m) isequal(tril(x), triu(x)');
我想你可以看看你的矩陣的特徵值,並檢查他們是否是完全不同的和真正的價值。
您可能,因此,想調用eig
功能如下:
[V,D] = eig(A)
我希望這有助於
我認爲這是一個不平凡的問題,有效地做到這一點。如果矩陣不是正定的,Cholesky算法將會失敗,所以最好實現自己,這也有一個好處,那就是當算法失敗時可以控制該做什麼,因爲輸入不是肯定的。我使用C#而不是Matlab來進行數學編程,而我的Cholesky實現只是少數幾行,所以並不困難。如果您使用別人的算法,那麼取決於它是如何實現的,如果您輸入非對稱矩陣,則可能會導致誤導結果,因爲某些實現假定矩陣是對稱的。我能想到的唯一的快速預測試就是檢查the matrix trace,如果矩陣是SPD,這將是正面的。
cholesky對我的目的來說過於昂貴。我首先需要一個髒檢查,如果它表明矩陣可能是spd,那麼我可以更可靠地使用CHOL來檢查那些矩陣 – zimbra314
如果你想要一個初步的髒檢測,直接使用正定性判據:檢查v'* A * v表示使得計算速度非常快的幾個向量v。對於某些向量,這相當於檢查矩陣中的單個元素。 –