【问题标题】:Curvature when extrapolated using Natural Cubic Spline使用自然三次样条外推时的曲率
【发布时间】:2020-11-12 17:37:28
【问题描述】:

Natural Cubic Spline 背后的假设之一是在插值区间的端点处,样条多项式的二阶导数设置为等于 0。我试图通过 @ 证明使用自然三次样条示例中为 987654324@(代码如下)。

from scipy.interpolate import CubicSpline
from numpy import linspace

import matplotlib.pyplot as plt

runge_f = lambda x: 1 / (1 + 25*x**2)

x = linspace(-2, 2, 11)
y = runge_f(x)
cs = CubicSpline(x, y, bc_type = "natural")
t = linspace(-5, 5, 1000)

plt.plot(x, y, "p", color="red")
plt.plot(t, runge_f(t), color="black")
plt.plot(t, cs(t), color="lightblue")

plt.show()

在给出的示例中,外插点的曲率不等于零 - 在自然三次样条中,区间外的外插不应该是线性的吗?

【问题讨论】:

    标签: python scipy spline


    【解决方案1】:

    样条曲线在端点的曲率(二阶导数)确实为 0,您可以通过运行它来检查

    print(cs(x[0],2), cs(x[-1], 2))
    

    计算x 插值区间两端的二阶导数。然而,这并不意味着样条曲线是平坦的超出限制 - 它继续作为三次多项式。如果你想在范围外线性推断,你必须自己做。推断平面很容易:将您的 cs=.. 行替换为

    from scipy.interpolate import interp1d
    cs = interp1d(x,y,fill_value = (y[0],y[-1]), bounds_error = False)
    

    得到这样的东西:

    但线性推断需要做更多的工作。我不确定是否有一个 Python 函数(或者我确定有一个我只是不知道它是什么)

    【讨论】:

      猜你喜欢
      • 2010-10-27
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多