2013-03-19 81 views
2

我目前正在實施一組協方差矩陣的在線估計算法,並且由於數值誤差,我的協方差矩陣在任何時候碰巧都不是對稱的。確保矩陣是對稱的(和正半定)

我目前由上三角矩陣鏡像到下一個解決此問題:

for i=1:T 
     tempSigma(:, :, i) = eye(D)/sigmaT(:,:,i); 
     temp = triu(tempSigma(:,:,i), 1); 
     tempSigma(:, :, i) = triu(tempSigma(:, :, i)); 
     tempSigma(:, :, i) = tempSigma(:, :, i) + temp'; 
    end 

在循環的每一個矩陣成爲大* T * S非常緩慢。有什麼辦法可以在Matlab中加快速度嗎?

+0

尺寸有多大?有多慢? – Memming 2013-03-19 19:38:44

+0

強制對稱性保證正半定性嗎? – Shai 2013-03-19 20:58:12

+0

不,http://en.wikipedia.org/wiki/Positive-definite_matrix – davhab 2013-03-19 21:04:52

回答

5

所以你有一個NxNxT數組,其中矩陣的每個平面要被認爲是一個協方差矩陣?

學習使用MATLAB,因爲它被設計爲使用。儘量避免顯式循環。例如,這將簡單地平均該上部和下部三角形:

tempSigma = (tempSigma + permute(tempSigma,[2 1 3]))/2; 

這是要解決的問題,可以說是比完全扔掉下三角更好的邏輯方式。它運行在一行代碼中,沒有顯式循環。

+0

優秀的解決方案。 – Memming 2013-03-19 19:39:48