【问题标题】:Why does matlab use the following interpolation function?为什么matlab使用下面的插值函数?
【发布时间】:2015-10-23 11:57:24
【问题描述】:

如果您尝试在 matlab 中执行线性插值,它显然会使用“网格”插值。

通常,我希望线性插值函数看起来像这样:

方法一:

我们希望知道 y(u) 在 u 处的值。

然而,matlab 似乎使用以下公式:

方法 B:

  1. 等式1

  2. 等式2

因此,如果您使用方法 A 并将答案与 方法 B 进行比较,结果实际上会有所不同。 在某些输入的双精度浮点运算中,我发现结果的差异约为 2^-18。

我的问题:

为什么 MATLAB 选择使用方法 B?看来方法 A 将涉及较少的计算。另外,任一公式“更多”是否正确?

执行方法A应涉及以下内容:

温度 = (y(k+1)-y(k))/(x(k+1)-x(k))

y(u) = y1 + temp*(u-x(k))

【问题讨论】:

  • 一个原因是在方法中您可以轻松地迭代并使用上一步中的数据。该公式称为时间计算。
  • 2^{-18} in difference 真的没什么好担心的......这基本上是 0。你可以通过做一些非常基本的代数运算从方法 A 推导出方法 B。我也同意 NKN 关于时间计算的观点。
  • @rayryeng,我知道它很小,但出于我的目的,我想知道结果中所有可能的差异发生在哪里。特别是因为我正在实现一个 ASIC,微小的差异使我无法“区分”结果以执行功能验证。
  • @starbox - 这很可能是由于操作顺序的不同。例如,执行(5.0 / 3.0) 和执行5 * (1.0/3.0) 实际上会给您带来两者之间的小浮点错误。如果您尝试这样做,您将获得几乎eps = 2.22e-16 的差异。
  • 虽然这些公式在数学上是等价的,但它们在数值上并不等价。 MATLAB 使用的 Eq2 广受青睐,因为它保证在存在浮点舍入误差的情况下可以可靠地命中两个端点。稍加改动后,Eq2 也适用于非常高效和准确的双 FMA 计算:fma (fma (-t_u, y_k, y_k), t_u, y_k1)

标签: matlab math floating-point linear-interpolation


【解决方案1】:

这两个公式实际上是相同的。你可以自己检查。要点是它们不是两种不同的方法(A和B)。唯一的区别是顺序或计算。看看我的手写:)

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多