lagrange插值Python

时间:2014-11-22 06:25:12

标签: python scipy interpolation numerical-methods

我正在尝试使用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])对中没有任何一对位于' poly'我来自scipy.interpolate.lagrange电话。

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

2 个答案:

答案 0 :(得分:1)

您的值缩放得很差,并且正如lagrange文档字符串所示,"警告:此实现在数值上不稳定。"尝试将lagrange应用于" whitened"数据(即,将数据移位和缩放以具有平均值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 on" raw" (即未缩放的)数据,在调用x时对poly输入使用相同的转换,并撤消y返回的值的poly转换。例如。如果xx是一个数组,其值在区间[1900,1980]中:

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

在你花费太多时间之前,我不得不问: 你为什么使用拉格朗日插值?它是一个重要的理论工具,但对于实际数据分析来说并不是那么好(见http://en.wikipedia.org/wiki/Lagrange_polynomial#Notes;特别注意Runge现象的发生)。你为什么需要插值?你打算用内插器做什么?如果您对这些问题有答案,则应将其作为问题的一部分包括在内。

答案 1 :(得分:-1)

Here创建自己的函数lagrange插值。也许你正在使用她