拉格朗日插值法Python

2024-10-06 15:25:01 发布

您现在位置: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”上。

有人能给点提示或建议吗? 非常感谢。


Tags: 数据代码datascipy建议插值polyinterpolate
2条回答

您的值的缩放效果很差,正如^{}docstring所说,“警告:这个实现在数值上是不稳定的。”尝试将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,请在调用poly时对x输入使用相同的转换,并对poly返回的值撤消y转换。E、 g.如果xx是一个值在区间[1900,1980]内的数组:

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

不过,在你花太多时间做这件事之前,我不得不问: 为什么要用拉格朗日插值法?它是一个重要的理论工具,但对于实际的数据分析却不是很好(请参见http://en.wikipedia.org/wiki/Lagrange_polynomial#Notes;特别注意Runge现象的出现)。你为什么要插入呢?你打算用内插器做什么?如果你有这些问题的答案,你应该把它们作为问题的一部分。

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

相关问题 更多 >