当前,我正在从事实现三次样条插值的项目。到目前为止,我已经设法为方程式计算系数。 现在,我试图返回一个插值函数,该函数对于任何x都会返回y。
我们假设我们有
x = [1, 3, 5]
y = [6, -2, 4]
我们得到的系数如下:
[ 6, -5.75, 0, 0.4375, -2, -0.5, 2.625, -0.4375]
等于
[ a<sub>0</sub>, b<sub>0</sub>, c<sub>0</sub>, d<sub>0</sub>, a<sub>1</sub>, b<sub>1</sub>, c<sub>1</sub>, d<sub>1</sub>]
插值多项式为
S<sub>0</sub>(x) = a<sub>0</sub> + b<sub>0</sub>*x + c<sub>0</sub>*x<sup>2</sup> + d<sub>0</sub>*x<sup>3</sup> x ∈ [1, 3]
S<sub>1</sub>(x) = a<sub>1</sub> + b<sub>1</sub>*x + c<sub>1</sub>*x<sup>2</sup> + d<sub>1</sub>*x<sup>3</sup> x ∈ (3, 5]
以此类推-只能计算3点以上
现在,我实现了一种方法,该方法仅在给定一个x作为输入的情况下有效。
def interpolate_spline(x, x_array, coefficients):
i = 1
while x_array[i] < x:
i += 1
i = i - 1
a = coefficients[4 * i]
b = coefficients[4 * i + 1]
c = coefficients[4 * i + 2]
d = coefficients[4 * i + 3]
return a + b * x + c * (x ** 2) + d * (x ** 3)
回到我的问题:是否有可能将其向量化或至少将整个数组作为输入?
我不知道这是否重要,但假设x_array已排序