【问题标题】: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)
显然第二个更容易在代码中实现,并且它们给出相同的结果。