【问题标题】:MatLab - How to accept a tolerance when comparing two float numbersMatLab - 比较两个浮点数时如何接受容差
【发布时间】:2014-08-21 08:48:33
【问题描述】:

我正在尝试使用数值方法中的复合梯形规则创建一个函数来计算积分。但问题是,当我要检查输入数据点是否等距时,出现了错误。因为浮点数。 这是我的代码

    function answer = composite_trapezoidal (X, Y)
lx = length(X);
ly = length(Y);
h = X(2) - X(1);
validity = 1;
series_sum = 0;
answer = 0;

if (lx ~= ly)
    fprintf('Error ! Dimensions Of Data Point Vectors Doesn''t Match\n');
else
    for i = 1:lx - 1
        hTmp = X(i + 1) - X(i);
        if (hTmp ~= h)
            validity = 0;
            fprintf('Invalid Data Points. Data Must Be Equally Spaced !\n');
            break;
        end
    end
end

if (validity == 1)
    for i = 2:lx - 1
        series_sum = series_sum + Y(i);
    end
    answer = (h / 2) * (2 * series_sum + Y(1) + Y(ly));
end

考虑输入x = linspace(0, 2, 7); 然后函数以“数据点不等间距”终止。但问题是它们是使用 linspace 计算的。 我能理解这个问题。点数为 0、0.3333333、0.6666667 等。因此在四舍五入时它们的间距不相等。但问题是我们能解决这个问题吗?

【问题讨论】:

    标签: matlab floating-point comparison numerical-methods numerical-integration


    【解决方案1】:

    用四舍五入的数字检查相等性通常是不稳定的。 您可以尝试使用可接受的容差,例如 abs(hTmp-h) 的相对容差

    【讨论】:

      【解决方案2】:

      考虑在比较中使用容差,因为浮点运算在一定精度范围内是精确的(请参阅this page)。通常为此使用eps,通常使用此值的多个作为容差。

      【讨论】:

      • 感谢@emiliojorge!这样就可以了:)
      猜你喜欢
      • 2011-08-24
      • 2021-12-13
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      相关资源
      最近更新 更多