scipy.interpolate.CubicSpline 的外推在数学上是如何工作的?

How does scipy.interpolate.CubicSpline's extrapolate work mathematically?

我正在尝试了解 scipy.interpolate.CubicSpline(..., extrapolate=True) 内部工作:Scipy 究竟如何在数学上实现点 x 超出 [a, b] 的外推?

我正在寻找一个公式,例如: score(x) = exp(-x + b) if x > b(这似乎不是他们实现它的方式!)。

试图查看源代码,无法找到它是如何实现的。文档也没有提供任何细节。

样条是分段多项式,即数据区间[a, b]有多个子区间,每个子区间只是一个多项式。对于 extrapolate=True,最左边区间的多项式用于 x < a,最右边区间的多项式用于 x > b。这就是文档描述的

extrapolate to out-of-bounds points based on first and last intervals,

很简单也很没用。这是一个插图。

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import CubicSpline
f = CubicSpline([-2, -1, 0, 1, 2], [1, 1, 0, 2, 2], extrapolate=True)
t = np.linspace(-4, 4)
plt.plot(t, f(t))
plt.show()

所有给定的 y 值都在 0 和 2 之间,但三次多项式的外推很糟糕。