【问题标题】:Value does not change for any obvious reason - Matlab [duplicate]值不会因为任何明显的原因而改变 - Matlab [重复]
【发布时间】:2015-09-22 03:53:12
【问题描述】:

我写了以下代码。问题是在0.288的具体值下, T 无明显原因变为零。有什么解释吗?奇怪的是,当我将其更改为 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,它将起作用。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    答案很简单

    >> 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.002 从 0 到 0.56 创建它!!!
    • 非常感谢您完美地解释了这个问题。 “-3”表示0 0后的精度。“000”
    • 它给了我“roundn”的错误
    • 你上次的更新让我更清楚了:
    • 这是我的圆形解决方案:time_f=round(time_f*1000)/1000;
    【解决方案2】:

    您正在使用浮点运算,它有一定的精度误差。您的矩阵不完全包含值 0.288。

    【讨论】:

    • 它肯定包含它,我可以自己看到它的价值。这是合乎逻辑的,因为我每 0.002 创建一个从 0 到 0.56 的矩阵!!!
    • 不,它没有。有一个小的精度误差,你的值稍微偏离了预期值。从矩阵中获取值并计算差异,它不为零
    • 非常感谢丹尼尔。我明白了,我把它修好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多