【问题标题】:lagrange interpolation Python拉格朗日插值 Python
【发布时间】:2015-01-20 09:17:14
【问题描述】:

我正在尝试使用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 调用获得的“多边形”上。

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

【问题讨论】:

  • 看来你在找函数zip

标签: python scipy interpolation numerical-methods


【解决方案1】:

您的值的缩放比例很差,并且正如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,在调用poly 时对x 输入使用相同的转换,并对@987654332 返回的值撤消y 转换@。例如。如果xx 是一个数组,其值在 [1900, 1980] 区间内:

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

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

【讨论】:

    【解决方案2】:

    Here 创建自己的函数拉格朗日插值。也许你在利用她

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多