我在嘗試運行循環時遇到了MatLab中的問題。對於循環中的每次迭代,計算3×3矩陣的特徵值和特徵向量(矩陣隨着每次迭代而不同)。此外,每次迭代應始終產生一個形式爲[0 a 0]的特徵向量,其中只有中間值a非零。在循環中讀取MatLab中的零值
我需要獲取特徵向量矩陣的列的索引,在這裏發生這種情況。要做到這一點,我建立了我的主環內的以下環(其中生成矩陣):
for i = 1:3
if (eigenvectors(1,i)==0) && (eigenvectors(3,i)==0)
index_sh = i
end
end
的問題是,有問題的特徵向量矩陣有時會具有以下形式的輸出:
eigenvectors =
-0.7310 -0.6824 0
0 0 1.0000
0.6824 -0.7310 0
在這種情況下我的代碼工作得很好,我也得到index_sh = 3.
但是,有時矩陣的形式爲:
eigenvectors =
0.0000 0.6663 0.7457
-1.0000 0.0000 0.0000
-0.0000 -0.7457 0.6663
在這種情況下,MATLAB不指定任何值爲index_sh
,即使我想在這種情況下index_sh
等於1。
如果有人知道我該如何解決這個問題,那麼MatLab也會在零寫入時賦值爲0.0000
我將不勝感激!
看起來像通常的浮動精度問題。使用容差。見http://stackoverflow.com/questions/686439/why-is-24-0000-not-equal-to-24-0000-in-matlab –
謝謝。你知道我可以怎樣解決這個問題嗎? – Kristian
嘗試使用特徵向量(1,i)== 0.0。告訴我它是否有效。另一種選擇是使用任何(特徵向量(1,i))作爲條件。我也懷疑你的情況下的元素非零,所以我最好使用像abs(eigenvectors(1,i))<0.0000001(很小的數)的條件。 – freude