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 之间,但三次多项式的外推很糟糕。
我正在尝试了解 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 之间,但三次多项式的外推很糟糕。