【发布时间】:2023-03-24 02:56:01
【问题描述】:
我在尝试运行循环时在 MatLab 中遇到了问题。对于循环中的每次迭代,计算 3x3 矩阵的特征值和特征向量(每次迭代的矩阵不同)。此外,每次迭代都应始终产生一个 [0 a 0] 形式的特征向量,其中只有中间值 a 不为零。
我需要获取发生这种情况的特征向量矩阵的列的索引。为此,我在主循环(生成矩阵的位置)中设置了以下循环:
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。
如果有人知道我可以如何解决这个问题,那么当零写成 0.0000 时,MatLab 也会分配一个值,我将非常感激!
【问题讨论】:
-
看起来像通常的浮点精度问题。使用公差。见stackoverflow.com/questions/686439/…
-
谢谢。你知道我该如何解决这个问题吗?
-
尝试使用特征向量(1,i)==0.0。告诉我它是否有效。另一种选择是使用 any(eigenvectors(1,i)) 作为条件。我还怀疑在你的情况下元素是非零的,所以我最好使用 abs(eigenvectors(1,i)) 这样的条件
-
非常感谢,兄弟。