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.