在循环期间在MatLab中读取零值

时间:2014-03-25 15:03:54

标签: matlab loops zero

我在MatLab中遇到了一个问题,因为我试图运行一个循环。对于循环中的每次迭代,计算3×3矩阵的特征值和特征向量(矩阵随每次迭代而不同)。此外,每次迭代应始终产生一个形式为[0 a 0]的特征向量,其中只有中间值a为非零。

我需要获得特征向量矩阵的列的索引。为此,我在main-loop(生成矩阵)中设置了以下循环:

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

在这种情况下,即使我希望index_sh在这种情况下等于1,MatLab也不会为index_sh分配任何值。

如果有人知道如何解决这个问题,那么当零写为0.0000时,MatLab也会分配一个值,我将非常感激!

1 个答案:

答案 0 :(得分:2)

问题很可能是那些" 0.0000"并不完全是0。要解决这个问题,请选择公差并在与0比较时使用它:

tol = 1e-6;
index_sh = find(abs(eigenvectors(1,:))<tol & abs(eigenvectors(3,:))<tol);

在您的代码中:

for ii = 1:3
    if abs(eigenvectors(1,ii))<tol && abs(eigenvectors(3,ii))<tol
        index_sh = i
    end
end

或者,您可以选择第一行和第三行条目更接近0的列,而不是容差:

[~, index_sh] = min(abs(eigenvectors(1,:)) + abs(eigenvectors(3,:)));