微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scipy 插值重心拉格朗日

如何解决scipy 插值重心拉格朗日

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

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

解决方法

我通过一些实验发现重心拉格朗日并没有像我希望的那样“加权”点。如果您的输入数组很大(即它仍然试图构造 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)

很明显,第二个在代码中实现要容易得多,而且它们给出了相同的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。