标题：样条函数
样条函数
样条函数的研究始于20世纪中叶，到了60年代它与计算机辅助设计相结合，在外形设计方面得到成功的应用。样条理论已成为函数逼近的有力工具。它的应用范围也  样条函数在不断扩大，不仅在数据处理、数值微分、数值积分、微分方程和积分方程数值解等数学领域有广泛的应用，而且与最优控制、变分问题、统计学、计算几何与泛函分析等学科均有密切的联系。
在数学学科数值分析中，样条是一种特殊的函数，由多项式分段定义。样条的英语单词spline来源于可变形的样条工具，那是一种在造船和工程制图时用来画出光滑形状的工具。在中国大陆，早期曾经被称做“齿函数”。后来因为工程学术语中“放样”一词而得名。
在插值问题中，样条插值通常比多项式插值好用。用低阶的样条插值能产生和高阶的多项式插值类似的效果，并且可以避免被称为龙格现象的数值不稳定的出现。并且低阶的样条插值还具有“保凸”的重要性质。
在计算机科学的计算机辅助设计和计算机图形学中，样条通常是指分段定义的多项式参数曲线。由于样条构造简单，使用方便，拟合准确，并能近似曲线拟合和交互式曲线设计中复杂的形状，样条是这些领域中曲线的常用表示方法。
定义
给定k个点ti，称为节点(knot)，分布在一个区间[a,b]满足
<IMG class=tex alt="a=t_0 < t_1 < \ldots < t_{k-2}  对于一个给定的节点向量，所有n次样条构成一个向量空间。这个空间的一个基是n次B样条基。
一个参数曲线
称为n次样条，如果
并且在限制到每个子区间时，
换句话说，在每个子区间或者说节点长度(knot span)
S和一个n次多项式相同。
S(ti) 称为节点值 而（ti, S(ti)）称为内部控制点（internal control 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')      %分段两点样条插值