scipy.interpolate.

KroghInterpolator#

класс scipy.interpolate.KroghInterpolator(xi, yi, ось=0)[источник]#

Интерполятор Крога (C∞ гладкий).

Полином проходит через все пары (xi, yi). Дополнительно можно указать количество производных в каждой точке xi; это делается путем повторения значения xi и указав производные как последовательные yi значения.

Позволяет вычислять полином и все его производные. По соображениям численной устойчивости эта функция не вычисляет коэффициенты полинома, хотя их можно получить путем вычисления всех производных.

Параметры:
xiarray_like, shape (npoints, )

Известные x-координаты. Должны быть отсортированы в порядке возрастания.

yiarray_like, shape (…, npoints, …)

Известные y-координаты. Когда xi встречается два или более раз подряд, соответствующие yi представляют значения производных. Длина yi вдоль оси интерполяции должна быть равна длине xi. Используйте ось параметр для выбора правильной оси.

осьint, необязательный

Ось в yi массив, соответствующий значениям x-координаты. По умолчанию: axis=0.

Атрибуты:
dtype

Методы

__call__(x)

Вычислить интерполянт

derivative(x[, der])

Вычислить одну производную полинома в точке x.

derivatives(x[, der])

Вычислить несколько производных полинома в точке x

Примечания

Следует учитывать, что реализованные здесь алгоритмы не обязательно являются наиболее численно устойчивыми. Более того, даже в мире точных вычислений, если координаты x не выбраны очень тщательно - нули Чебышёва (например, cos(i*pi/n)) являются хорошим выбором - сама полиномиальная интерполяция является очень плохо обусловленным процессом из-за явления Рунге. В общем случае, даже при хорошо выбранных значениях x, степени выше примерно тридцати вызывают проблемы с численной неустойчивостью в этом коде.

На основе [1].

Ссылки

[1]

Крог, «Эффективные алгоритмы для полиномиальной интерполяции и численного дифференцирования», 1970.

Примеры

Чтобы получить полином, равный нулю в 0 и 1 и имеющий производную 2 в 0, вызовите

>>> from scipy.interpolate import KroghInterpolator
>>> KroghInterpolator([0,0,1],[0,2,0])

Это строит квадратичную \(2x^2-2x\). Условие производной обозначается повторяющимся нулём в xi массив; соответствующие значения yi равны 0, значение функции, и 2, значение производной.

Для другого примера, учитывая xi, yi, и производная ypi для каждой точки могут быть построены соответствующие массивы как:

>>> import numpy as np
>>> rng = np.random.default_rng()
>>> xi = np.linspace(0, 1, 5)
>>> yi, ypi = rng.random((2, 5))
>>> xi_k, yi_k = np.repeat(xi, 2), np.ravel(np.dstack((yi,ypi)))
>>> KroghInterpolator(xi_k, yi_k)

Для получения векторного полинома укажите многомерный массив для yi:

>>> KroghInterpolator([0,1],[[2,3],[4,5]])

Это строит линейный полином, дающий (2,3) в 0 и (4,5) в 1.