Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在循环过程中读取MatLab中的零值_Matlab_Loops_Zero - Fatal编程技术网

在循环过程中读取MatLab中的零值

在循环过程中读取MatLab中的零值,matlab,loops,zero,Matlab,Loops,Zero,当我尝试运行循环时,在MatLab中遇到了一个问题。对于循环中的每个迭代,计算3x3矩阵的特征值和特征向量(每个迭代的矩阵不同)。此外,每次迭代应始终产生一个形式为[0 a 0]的特征向量,其中只有中间值a为非零 我需要得到出现这种情况的特征向量矩阵列的索引。为此,我在主循环(生成矩阵的地方)中设置了以下循环: 问题在于,所讨论的特征向量矩阵有时会有以下形式的输出: eigenvectors = -0.7310 -0.6824 0 0

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

我需要得到出现这种情况的特征向量矩阵列的索引。为此,我在主循环(生成矩阵的地方)中设置了以下循环:

问题在于,所讨论的特征向量矩阵有时会有以下形式的输出:

eigenvectors =

   -0.7310   -0.6824         0
         0         0    1.0000
    0.6824   -0.7310         0
eigenvectors =

    0.0000    0.6663    0.7457
   -1.0000    0.0000    0.0000
   -0.0000   -0.7457    0.6663
在这种情况下,我的代码运行良好,我得到
索引\u sh=3。
但是,有时矩阵的形式是:

eigenvectors =

   -0.7310   -0.6824         0
         0         0    1.0000
    0.6824   -0.7310         0
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被写成
0.0000
时,MatLab也会赋值,我将非常感激

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

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

看起来像是常见的浮点精度问题。使用公差。再见,谢谢。你知道我该怎么解决这个问题吗?试着用特征向量(1,I)==0.0。告诉我它是否有效。另一种选择是使用任何(特征向量(1,i))作为条件。我还怀疑在你的例子中元素是非零的,所以我最好使用像abs(特征向量(1,I))这样的条件。非常感谢,弗洛伊德。@Kristian Welcome:-)参见编辑,它避免了使用公差是的,我注意到了:)。再次感谢!
[~, index_sh] = min(abs(eigenvectors(1,:)) + abs(eigenvectors(3,:)));