0

我正在尝试了解实现 bspline 基函数的工作流程。

tauf    Vd
0        0
0.048   502.8944826
0.072   743.5034753
0.096   791.2514106
0.12    825.3244319
0.144   858.1731717
0.168   889.1381766
0.192   922.4214306
0.216   952.9989296
0.24    982.8650001

结果basisValueMat_f

1.000   0.000   0.000   0.000   0.000   0.000
0.000   0.076   0.551   0.364   0.009   0.000
0.000   0.013   0.393   0.533   0.062   0.000
0.000   0.000   0.234   0.596   0.170   0.000
0.000   0.000   0.121   0.547   0.331   0.001
0.000   0.000   0.057   0.420   0.496   0.027
0.000   0.000   0.023   0.273   0.591   0.114
0.000   0.000   0.007   0.140   0.570   0.283
0.000   0.000   0.001   0.044   0.408   0.547
0.000   0.000   0.000   0.001   0.085   0.914
0.000   0.000   0.000   0.000   0.000   1.000

图示:

图表

代码:

norder = 4;    % degree - 1
nbreaks = 2;
nbasis = nbreaks + norder - 2;
breaks = linspace(0,taufmax,nbreaks)';
wtaubasis = create_bspline_basis([0,max(breaks)], nbasis, norder, breaks);
basisValueMat_f = full(eval_basis(wtaubasis, tauf)); 

请帮助我了解 thecreate_bspline_basiseval_basis函数的作用。我需要对这些信息进行数学解释。

4

1 回答 1

2

基函数就像在区间内逼近函数的“积木”。正如您从图中看到的那样,使用了几个基函数来逼近您的源函数。原始函数越复杂,在给定误差的情况下近似它所需的基函数就越多。看看这个解释方波傅里叶级数的动画:

在此处输入图像描述

傅里叶变换(FT;在上面的动画中显示为蓝色S(f))显示的信息与图表的“切片”相同:

在此处输入图像描述

不同之处在于,在维基百科的 FT 示例中,基函数(正弦和/或余弦)的幅度在整个区间内是恒定的,但在样条插值示例中,基函数(多项式)的幅度变化平滑整个区间。

最后,为了回答您的问题,评估基函数可以告诉您在给定点(或区间)哪个是最主要的基函数。我能想到的一个用途是 - 如果某个函数比其他函数更占主导地位(如图表中的点“1”所示),则可以完全忽略“不重要”函数,同时保持整体插值公平准确 - 这可能有一些计算上的好处。

于 2019-05-25T05:51:07.877 回答