繁体   English   中英

拉格朗日插值Python

[英]lagrange interpolation Python

我正在尝试使用scipy.interpolate.lagrange插值以下数据,其程度为8:

x_data = [1900., 1910., 1920., 1930., 1940., 1950., 1960., 1970., 1980.]

y_data = [76212168., 92228496., 106021537., 123202624., 132164569., 151325798., 179323175., 203302031., 226542199.]

使用python代码: poly = scipy.interpolate.lagrange(x_data, y_data)

但是输出看起来不正确,因为(x_data[i], y_data[i])对甚至都不位于我从scipy.interpolate.lagrange调用中获得的“ poly”上。

有人可以提供任何提示或建议吗? 非常感谢。

您的值缩放比例很差,并且,正如lagrange文档字符串所说,“警告:此实现在数值上是不稳定的。” 尝试将lagrange应用于“变白”的数据(即,对数据进行移位和缩放以使其平均值为0,标准差为1)。 例如,

xm = np.mean(x_data)
xscale = np.std(x_data)
ym = np.mean(y_data)
yscale = np.std(y_data)
x = (x_data - xm) / xscale
y = (y_data - ym) / yscale
poly = scipy.interpolate.lagrange(x, y)

np来自import numpy as np 。)

然后用poly对“生”(即未缩放)数据,使用在相同的转换x输入,当你调用poly ,并撤消y对返回的值转换poly 例如,如果xx是一个值在[1900,1980]之间的数组:

yy = poly((xx - xm)/xscale)*yscale + ym

但是,在花太多时间之前,我必须问:为什么要使用Lagrange插值? 它是一种重要的理论工具,但对实际数据分析却不太好(请参阅http://en.wikipedia.org/wiki/Lagrange_polynomial#Notes ;尤其要注意Runge现象的发生)。 为什么根本需要插值? 您要如何使用插补器? 如果您对这些问题有答案,则应将其作为问题的一部分。

在这里创建一个自己的函数lagrange插值。 也许你在用她

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM