数值不会因为任何明显的原因而改变——Matlab



我编写了以下代码。问题是在CCD_ 1的特定值处,CCD_ 2在没有明显原因的情况下变为零。有什么解释吗?奇怪的是,当我把它改为0.28时,它工作得很好。

   time=(0:0.002:0.560);
   time_f=reshape(time,281,1);
   time1=0;
   time2=0;
   for i=1:1
       for j=1:281
           T=time_f(j,i);
           if (i==1) && (T==0.288);
              time1=T;
           end
        end
    end

如果您测试代码,您会发现time1值将为零,如果您将T更改为0.28,它将起作用。

答案是简单的

>> time_f(time_f == 0.288)
ans =
   Empty matrix: 0-by-1

您的矩阵不包含0.288 值

这是由于浮点精度,因此您的值不是0.288,而是0.287999999。

只需使用roundn,四舍五入到指定数量的有效数字

>> time_f = roundn(time_f,-3);
>> find(time_f == 0.288)
ans =
   145

如果你没有映射工具箱,你可以做

>> time_f = round(time_f * 1000) / 1000

您使用的是浮点运算,它有一定的精度误差。您的矩阵中并不包含精确的值0.288。

最新更新