Есть ли способ генерировать сплайн-функции B в Python без известных коэффициентов? - PullRequest
0 голосов
/ 17 мая 2019

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

Моя текущая реализация использует метод johntfoster / bspline.Это не позволяет мне определять количество базовых функций, и результаты не похожи на результаты MATLAB.https://github.com/johntfoster/bspline

Функция scipy.interpolate.BSpline.basis_element не позволяет мне определять порядок сплайна, количество базовых функций, узлы

Реализация Matlab:

nbreaks = 20;
nbasis = nbreaks + norder - 2;
breaks = linspace(0,taufmax,nbreaks)';

%Create a smooth function that passes through the break point / knots
wtaubasis = create_bspline_basis([0,max(breaks)], nbasis, norder, breaks);

% Create a matrix of basis functions at each break points for the entire Tau
basisValueMat_f = full(eval_basis(wtaubasis, tauf));

Реализация Python (метод johntfoster / bspline)

import numpy as np
import bspline
import bspline.splinelab as splinelab

norder = 4
nbreaks = 20

#This defines the number of basis function
nbasis = nbreaks + norder - 2

#For the spline, it has to pass thorough the corresponding break points
breaks = np.linspace(0,tauf_max,nbreaks)
k = splinelab.augknt(breaks, norder)

# create spline basis of order p on knots k  
B = bspline.Bspline(k, norder)  
A0 = B.collmat(np.squeeze(tau_f), deriv_order=0)

Я бы хотел, чтобы базовые функции B Spline оценивались в указанных точках.Результаты, аналогичные MATLAB, будут весьма обнадеживающими.

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Есть evaluate_all_bspl, https://github.com/scipy/scipy/blob/v1.3.0/scipy/interpolate/_bspl.pyx#L163, который вычисляет все ненулевые b-сплайны, заданные узлами в данной точке оценки.Это не общедоступная функция, поэтому, если вы в конечном итоге используете ее, вы сами по себе.

0 голосов
/ 17 мая 2019

scipy.interplolate имеет функцию make_interp_spline , которая подгоняет и возвращает Bspline в 2D-набор данных, представленный двумя векторами x и y.Эта функция имеет параметры k и t для управления степенью сплайна и узлов.

...