主要内容

构造和使用b形样条

b形的构造

通常,样条是由一些信息构成的,比如函数值和/或导数值,或者是一些常微分方程的近似解。但是,通过向命令提供它的结序列和系数序列,也可以从头构造一个样条spmak

例如,如果您输入

Sp = spmak(1:10,3:8);

您提供统一的结序列1:10还有系数序列3:8。因为有10个节和6个系数,顺序必须是4(= 10 - 6),也就是说,你得到一个三次样条。命令

fnbrk (sp)

打印出该三次样条b型的组成部分,如下所示:

节(1:n+k) 1 2 3 4 5 6 7 8 9 10个系数(d,n) 3 4 5 6 7 8系数的数量n 6阶k 4维d的目标1

此外,fnbrk可以用来分别供应这些部件。

但是曲线拟合工具箱™样条功能的重点是,您不应该需要查找这些详细信息。你只需使用sp作为命令的参数,用于计算、求导、积分、转换或绘制包含其描述的样条sp

使用b形样条

以下命令可用于样条工作。有spmak而且fnbrk编一条样条,再把它拆开。使用fn2fm将B-form转换为ppform。的帮助下,您可以计算,微分,积分,最小化,寻找零点,绘制,细化或选择性外推样条fnval曾经fndirfnintfnminfnzerosfnpltfnrfn,fnxtr

有5个命令用于生成结序列:

  • augknt用于提供边界结点和控制内部结点的多样性

  • brk2knt用于提供具有指定多重度的结序列

  • aptknt为给定顺序的样条空间提供适合于在给定数据点进行插值的结序列

  • optknt提供最优在给定位置进行插值的结序列

  • newknt对于一个结序列,也许更适合函数的近似

此外,还有:

  • aveknt为提供一定的结平均Greville站点)作为插值的推荐站点

  • chbpnt提供这类网站

  • knt2brk而且knt2mlt用于从给定的结序列中提取断裂和/或它们的多重性

显示一条样条曲线给定二维系数序列和均匀结序列,使用spcrv

您还可以编写自己的样条构造命令,在这种情况下,您需要了解以下内容。一个样条的构造满足一些插值或近似条件通常需要一个搭配矩阵,即每一行都包含数字序列的矩阵DrBjk(τ),即r在τ处的Th导数j对于所有的b样条j,对一些人来说r和某个位点τ。这样的矩阵由spcol。可选参数允许由提供该矩阵spcol以节省空间的样条-几乎块-对角线形式或作为MATLAB®稀疏矩阵。它可以被喂slvblk,一个求解具有几乎块对角系数矩阵的线性系统的命令。如果你感兴趣的话spcol而且slvblk都是用在这个工具箱里的,看看这些命令吧spapispap2,spaps

此外,还有用于构造的例程立方样条函数。csapi而且csape分别使用非结和各种其他结束条件,在给定数据的结点处提供三次样条插值。给出了经过给定点的参数三次样条曲线cscvn。立方平滑中构造样条csaps

示例:b型样条圆逼近

另一个简单的例子是,

积分= .95*[0 -1 0 1;1 0 -1 0];Sp = spmak(-4:8,[点]);

提供一个平面,四次曲线,样条曲线,其中间部分很好地近似于圆,如下一页的图所示。它是由后续的

Plot (points(1,:),points(2,:),'x'),按住fnplt(sp,[0,4]),坐标轴等于正方形,按住

插入额外的控制点 ± 0.95 ± 0.95 / 1.9 会形成一个完美的圆。

这里有更多细节。的样条生成的曲线形式为Σ8j= 1Bj,5一个(:,j),连同-4:8均匀的结序,并与其控制点一个(:,j)序列α(0),(-α,0)、(0,-α),(α,0)、(0,α),(-α,0)、(0,-α),(α,0)α= 0.95。实际上只绘制了参数值0到4之间的曲线部分。

为了感觉这部分曲线有多接近圆形,计算它的无符号曲率。曲率κ(t)在曲线点γ(t) = (x(t), y (t))的空间曲线γ可由公式计算

κ | x y y x | x 2 + y 2 3. / 2

其中x', x″,y'和y' '是曲线相对于所使用参数(t).将平面曲线视为(xy),则得到其在21点处的曲率最大值和最小值,如下所示:

zt = 0 (size(T));DSP = fnder(sp);DSPT = fnval(dsp,t);DDSPT = fnval(fnder(dsp),t);kappa = abs (dspt(1:)。* ddspt (2:) -dspt(2:)。* ddspt(: 1))。/…(和(dspt。^ 2))。^ (3/2);[min(kappa),max(kappa)] ans = 1.6747 1.8611

所以,虽然曲率不是很恒定,但它接近1/圆的半径,正如你在下一个计算中看到的那样:

1/norm(fnval(sp,0)) ans = 1.7864

圆的样条近似;控制点已标记x

相关的话题