我有一个矩阵span.close
;
我知道要计算零元素的总数,我可以简单地使用函数event.stopImmediatePropagation();
。也就是说,A = [0 3 4; 5 0 6; 0 6 0]
这将给我4个。
问题:
现在以矩阵B为例生成如下:
find
上面的代码将给出:Total_number_of_zero_elements = 0。 矩阵B包含许多0值,但写为0.0000。
因此,matlab不能使用函数find?
来区分0到0.0000非常感谢任何帮助!
答案 0 :(得分:5)
浮点数具有未完全表示的属性。如果您将矩阵与其逆数字相乘,则非对角线元素将不会为0,而是在eps(1)
附近。
要检查浮点数的零点,请使用阈值:find(abs(B)<1e-10)
。 (请注意abs
:没有-10
也可以作为0。)
显然应该仔细选择阈值:大到足以捕获数字零,但小到足以让实际非零值保持非零。
在你的例子中
B = toeplitz(0.1.^(0:30-1));
最小的数字是1e-29
,它可以很容易地表示为双精度数字,并且显然不等于0.如果你进一步这样做,你会遇到问题从{{1}开始},大致为eps(0)
。任何大于它的数字都不会完全为零。 (但是如果你执行计算并且期望结果为0,那么它可能会像我上面写的那样在5e-324
的顺序。)