【问题标题】:scipy interpolate barycentric lagrangescipy interpolate 重心拉格朗日
【发布时间】:2021-01-27 23:36:58
【问题描述】:

我一直在阅读有关插值的不同方法,例如-this article。它建议使用 barycentric_lagrange 而不是 lagrange,因为它更稳定,在 O(n) 而不是 O(n^2) 中运行。这一切都很好,但我想知道它与拉格朗日本身有何不同。 我正在寻找的是对重心和传统拉格朗日之间差异的定性解释。 我试过查看mathematical papers 的相关信息,但数学并不容易理解。

“权重”是否只是一种加权点的方式,靠近您正在插值的点?要是这么简单就好了。

【问题讨论】:

    标签: python scipy interpolation


    【解决方案1】:

    我通过一些实验发现重心拉格朗日不会像我希望的那样“加权”点。如果您的输入数组很大,它仍然非常不稳定(即它仍然试图构造 n 次多项式)。 当很大时,重心具有稳定性改进。 如果您的 x 和 y 接近 0,则拉格朗日很好。因此 x = [20000, 20001, 20002] 的稳定性将远低于 [0, 1, 2]。因此,重心的权重只是将值缩放到 0 的一种方式。 所以拉格朗日插值如下:

    x_scaled = x - x[0]
    y_scaled = y - y[0]
    polynomial = scipy.lagrange(x_scaled, y_scaled)
    interp_y = polynomial(interp_x - x[0]) + y[0]
    

    等同于:

    interp_y = scipy.barycentric_interpolate(x, y, interp_x)
    

    显然第二个更容易在代码中实现,并且它们给出相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 2020-07-31
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多