В настоящее время я работаю над проектом, который реализует интерполяцию кубического сплайна.До сих пор мне удалось вычислить коэффициенты для моих уравнений.Теперь я пытаюсь вернуть интерполяционную функцию, которая для любого 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 отсортирован