我正在尝试通过定义b-splines的顺序,基础功能的数量,结和评估范围来生成基链曲线功能。请将我推荐给Python中的合适功能,可以帮助我。
我当前的实现是使用JohnTfoster/BSPLINE方法。它不允许我定义基函数的数量,结果与MATLAB的函数不相似。https://github.com/johntfoster/bspline
scipy.interpaly.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样条基函数。类似于MATLAB的结果将是令人鼓舞的。
有 evaluate_all_bspl
,https://github.com/scipy/scipy/blob/v1.3.0/scipy/interpaly/_bspl.pl.pyx#l163它在给定的评估点上计算给定打结的所有非零B-SPLINE。不过,这不是公共功能,因此,如果您最终使用它,您就可以自己。
scipy.tellate的功能make_interp_spline,该功能适合并返回BSPLINE到由两个向量x
和y
表示的2D数据集。此函数具有用于控制样条和结度的参数k
和t
。