
spline function 一类分段(片)光滑、并且在各段交接处也有一定光滑性的函数。简称样条。样条一词来源于工程绘图人员为了将一牛些指定点连接成一条光顺曲线所使用的工具,即富有弹性还刻械德征看的细木条或薄钢条。由这样的样条形成的曲线在连接点处具有连续的坡度与曲率。分段低次多项式、在分段处会划坏略造过具有一定光滑性的函数插值就是模拟以上原理发展起来的,它克服了高次多项式插值可能出现的振荡现象,具有较好的数值稳定性和收敛性,由这种插值过程产生的函数就是多项式样条函数。
- 中文名 样条函数
- 外文名 spline function
- 起始研究时间 20世纪中叶
- 简称 样条
样条函数
样条函数的研究始于20世纪中叶,到了60年代它与计算机辅助设计相结合,在外形设计方面得到成功的应用。样条理论已成为函数逼近的有力工具。它许新那试价此的应用范围也在不断扩大,不仅在数据处理、数值微分、数值积分、微分方程和积分方程数值解等数学领域有广泛的应用,而且与最优控制、变分问题、统计学、计算几何与泛函分析等学科均有密切的联毛句称深系。

在数学学科数值分析中,样条是一种特殊的函数,由多项式分段定义。样条的武内转吧架英语单词spline来源于可变形的样条工具,那是一种在造船和工程制图时明被电要江小争组队节欢用来画出光滑形状的工具。在中国大陆,早期曾经被称做"齿函数"。后来来自因为工程学术语中"放样"一词而得名。
在插值问题中,样条插值通常比多项式插值360百科好用。用低阶的样条插值能产生和高阶的多项式插值类似的效果,并且可以避免被称为龙格现象的数值齐胶止历纸亚鱼不稳定的出现。并且低阶的烈春阿约急才想孔举样条插值还具有"保凸"的重要性质。
在计算机科学的计算机辅助设计和计算机图形学中,样条通常是指分段定义的多项式参数曲线。由于样条构村着二取也维造简单,使用方便固源乎普求还联响苗接让,拟合准确,并能近似曲线拟合和放虽室认交互式曲线设计中复杂的形状,样条是这些领域中曲线的常用表示方条接木皇未领树法。
样条函数法类型
样条函数法类型
有两种样条函数方法:规则样条函数方法和张力样条函数方法。规则样条函数方法使用可能位于样本数据范围之外的值来创建渐变的平滑表面。张力样条函数方法根据建模现象的特性来控制表面的硬度。它使用受样本数据范围约束更为严格的值来创建不太平滑的表面。
规则样条函数类型
REGULARIZED 选项对最小化条件进行了谈欢吧房针次第复修改,从而将三阶导善强移参目谓经数项加入到最小化条件中。权重参数指定最小化期间附加到三阶导数项的权重,级门顾同守日花成亚安在文献资料中称为τ (tau)。增大此项的值可以得到更加平滑的表面。介于 0 和 0.5 之间的值比较适合。使用 REGULARIZED 选项可确保获得平误通前滑的表面以及平滑的一阶导数表面。如果需要计算插值表面的二阶导数,此方法很有用。
张力样条函数类型
TENSION 选项对最小化条件进行了修改,从而将一阶导数项加入到最小化条件中。权重参数指定最小化期间附加到一阶导数项的权重,在文献资料中称为 Φ (phi)。权重为零告实武苦时,将变为基本薄千构板样条函数插值法。增大权重值将会降低薄板的硬度,在极限情况下,随着 phi 接近无穷大,表面形状将近似于经过这些点的膜或橡皮页。插值的表面很平滑。一阶导数连续但不平滑。
定义
给定k个点ti,称为节点(knot),分布在一个区间[a,b]满足
<IMG cl来自ass=tex alt="a=t_0 < t_1 < \ldots < t_{k-2} 对于一个给定的节点向量,所有n次样条构成一个向量空间。这个空间的一个基是n次B样条基。
一个参数曲线
称为n次样条,360百科如果
并且在限制到每个子区间时,
换句话说,在每个子区间或者说节点长度(knot span)
S和一个n次多项式相同。
S(ti) 称为节点值 情山而(ti, S(ti))称为内部控制点(int迫位甚交ernal cont师妒益破我苗命rol point). (t0,...,tk-1) 称为节点向量(knot vector). 如果节点等距分布在区间[a,b]上,我们称样条均匀(uniform),否则为非均匀(non-uniform).
例子
最简单的样条松感游向看但变色是一次的,它也叫做线性样条,或者多边形。
字 一般的样条是自然的三次样条。自然定义为样条多项式的二阶导数下德特护坏感女牛素坏引在插值区域的两端相等良整华影执制。
S''(a) = S''(b) = 0 在区间 [a,b]
这使得样条在插值区间外为直线而径章料调拉计巴变法和在不影响光滑程度。
样条插值
使用多项式插值,对给定攻吃知律深扩慢难头数据集进行插值的 n 阶多项式就被给定数据点所唯一地定义出来。但是,对同样青质河义南尽策的数据进行插值的 n 阶样条并不是采其容药唯一的,为了构建一个唯一的样条插值式它还必须满足另外 n-1 个自由度。
线性样条插值
线证村害支性样条插值是最简单的样条插值。数据点使用直线进行连接喜怕田雨这权超热英身略,结果样条是一个多边形。
亮从代数的角度来看,每个 Si 都是一个如下
的线性函数。 样条在每个数据点都必须连续,即
我们很容易得到
所以以在器植拉庆波孙棉边金上论述成立。
二次样条插值
二次样条插值可以构建为
通过选择 z0,水专套然后用递推关系就可以得到系数:
三次样已迫湖体早否古谓流曲探条插值
对于 n+1 个给定点路构诗点史号答胞具争的数据集 {xi} ,我们可以用 n 三次多项式在数据点之间构建一个三次样条。如果
表示对函数 f 进行插值的样条函数,那么需要:
插值特性,S(xi)=f(xi) 样条相互连接,Si-1(xi) = Si(xi), i=1,...,n-1 两次连续可导,S'i-1(xi) = S'i(xi) 以及 S''i-1(xi) = S''i(xi), i=1,...,n-1. 由于每个三次多项式需要四个条件才能确定曲线形状,所以对于组成 S的 n 个三次多项式来说,这就意味着需要 4n 个条件才能确定这些多项式。但是,插值特性只给出了 n + 1 个条件,内部数据点给出 n + 1 − 2 = n − 1 个条件,总计是 4n − 2 个条件。我们还需要另外两个条件,根据不同的因素我们可以使用不同的条件。
其中一项选择条件可以得到给定 u 与 v 的钳位三次样条,
另外,我们可以设
. 这样就得到自然三次样条。自然三次样条几乎等同于样条设备生成的曲线。
在这些所有的二次连续可导函数中,钳位与自然三次样条可以得到相对于待插值函数 f 的最小震荡。
如果选择另外一些条件,
可以得到周期性的三次样条。
如果选择,
可以得到complete三次样条。
三次样条的最小性
三次样条有另外一个非常重要的解释,实际上它是在索伯列夫空间 H([a;b]) 最小化函数
的函数。
函数 J 包含对于函数 f(x) 全曲率 的近似,样条是 f(x) 最小曲率的近似。
由于弹性条的总体能量与曲率成比例,所以样条是受到 n 个点约束的弹性条的最小能量形状。样条也是基于弹性条设计的工具。
使用自然三次样条的插值
它可以定义为
以及
. 通过解下面的方程可以得到它的系数。
线性样条插值
假设要为带有节点
的函数
找一个线性样条。直接代入样条公式,我们得到如下样条:
样条函数(蓝线)以及所近似的函数(红点)如下图所示:
二次样条插值
下图是一个 k=4 的样条函数(蓝线)与所近似的函数(红线)的例子:
基数样条函数
使用基数样条函数可以创建一些平滑线来连接给定的点集,如图1-4所示。
图1-4 使用样条函数创建一条连接点集的平滑曲线
从图1-4中可以看到,该样条曲线确定了起点和终点(图1-4中,起点和终点用1和4标识),另外两个点紧靠这条曲线,但样条曲线并不通过它们(点2和点3)。
1. 使用3x3矩阵变换对象当处理一系列图形变换时,应用变换(旋转、平移或缩放)方法非常有用,它可以加速图形变换的执行。图1-5显示了图形变换的一个示例。
图1-5 对图形实施旋转和缩放变换
2. 模糊模糊用来对图形进行平滑处理以避免出现阶梯状外观,比如当对图像放大时。图1-6显示的是实施了该操作的一个示例。
图1-6 对图像实施模糊操作
注意
《基数样条函数》书中,给出GDI+前两种新特点的示例:本章给出路径梯度的示例,下一章给出α混合的示例。对于GDI+的其他特点,在.NET Framework的SDK中有很多相应的示例代码。
拉格朗日插值,分段插值,样条插值 (样条插值的要求是还要知道这些数据点的一阶导数)
两点确定一条直线(一次多项式),三点确定一条抛物线(二次多项式),有10个点就可以确定一个9次多项式(9次多项式里面还有一个常数项,就是10个未知数,我们有10个数据点,刚好可以求解)
1.拉格朗日插值就是上面的这种插值。但是它就是把这些多项式系数重新表示了一下(就是不用去求上面所说的10个系数)。你求出这些系数后,只要将你想要的x的值往里一代,马上就得到你想要的函数值。但这种插值在头尾附近会出现一些不好的振荡现象(龙格现象)
2.分段插值,还是按照上面的原则,比如说,我两个点两个点地确定一条直线(比如1,2点连起来,2,3点连起来),最后所有直线的集合(这时应当是一系列的折线)这个分段函数也是经过所有的数据点。当然你也可以三个点三个点地确定一条抛物线。用这一方面时,你要先确定你想要的x值在哪一个区间里,然后用这一区间的表达式来计算出函数值就可以了。本方法不会出现龙格现象
3.样条插值,上面提到分段插值是一系列折线,折线使得不光滑,样条就是用其导数值,使得它们变光滑。
下面说计算方法吧,计算方法的书上面都有表达式。应当不难。
可以借助于MATLAB这样的软件来计算。
比如原始数据是X,Y,想要求y(x=5)的值
X=[2,6,10,14,18,22,26,30,34,38,41,42,45,49,53,57,61,65,69,73,77,81]; %自变量的值
Y=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]; %自变量相应的函数值
X0=5; %想要的点的值
N=22; %这个是点的个数
Doc=2; %分段插值中想用几个点插值
你可以用下面的语句得到y(x=5);
Y1=lagrange(X,Y,X0) %拉格朗日插值
Y2=interp1(X,Y,X0,'linear') %分段两点线性插值
Y2=interp1(X,Y,X0,'spline') %分段两点样条插值