[英]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.