我正在尝试使用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
电话。
有人可以提供任何提示或建议吗? 非常感谢。
答案 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插值。也许你正在使用她