scipy.interpolate.BSpline.

from_power_basis#

метод класса BSpline.from_power_basis(pp, bc_type='not-a-knot')[источник]#

Построить полином в базисе B-сплайна из кусочно-полиномиальной функции в степенном базисе.

Пока принимает CubicSpline только экземпляры.

Параметры:
ppCubicSpline

Кусочно-полиномиальная функция в степенном базисе, созданная с помощью CubicSpline

bc_typestring, optional

Тип граничного условия, как в CubicSpline: один из not-a-knot, natural, clamped, или periodic. Необходимо для создания экземпляра BSpline класс. По умолчанию not-a-knot.

Возвращает:
bBSpline object

Новый экземпляр, представляющий начальный полином в базисе B-сплайна.

Примечания

Добавлено в версии 1.8.0.

Принимает только CubicSpline экземпляры на данный момент.

Алгоритм следует из дифференцирования тождества Марсдена [1]: каждый из коэффициентов функции интерполяции сплайнами в базисе B-сплайнов вычисляется следующим образом:

\[c_j = \sum_{m=0}^{k} \frac{(k-m)!}{k!} c_{m,i} (-1)^{k-m} D^m p_{j,k}(x_i)\]

\(c_{m, i}\) - коэффициент CubicSpline, \(D^m p_{j, k}(x_i)\) - m-я производная двойного полинома в \(x_i\).

k всегда равно 3 на данный момент.

First n - 2 коэффициенты вычисляются в \(x_i = x_j\), например,

\[c_1 = \sum_{m=0}^{k} \frac{(k-1)!}{k!} c_{m,1} D^m p_{j,3}(x_1)\]

Последний nod + 2 коэффициенты вычисляются в x[-2], nod - количество производных на концах.

Например, рассмотрим \(x = [0, 1, 2, 3, 4]\), \(y = [1, 1, 1, 1, 1]\) и bc_type = natural

Коэффициенты CubicSpline в степенном базисе:

\([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]\)

Вектор узлов: \(t = [0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4]\)

В этом случае

\[c_j = \frac{0!}{k!} c_{3, i} k! = c_{3, i} = 1,~j = 0, ..., 6\]

Ссылки

[1]

Том Лихе и Кнут Моркен, Методы сплайнов, 2005, Раздел 3.1.2