样条插值

来自testwiki
跳转到导航 跳转到搜索

数值分析这个数学分支中,样条插值是使用一种名為样条的特殊分段多项式进行插值的形式。由于样条插值可以使用低阶多项式样条实现较小的插值误差,这样就避免了使用高阶多项式所出现的龙格现象,所以样条插值得到了流行。

样条插值

使用多项式插值,对给定数据集进行插值的n阶多项式就被给定数据点所唯一地定义出来。但是,对同样的数据进行插值的n阶样条并不是唯一的,为了构建一个唯一的样条插值式它还必须满足另外n-1个自由度

线性样条插值

线性样条插值是最简单的样条插值。数据点使用直线进行连接,结果样条是一个多边形

从代数的角度来看,每个Si 都是一个如下

Si(x)=yi+yi+1yixi+1xi(xxi)

线性函数。 样条在每个数据点都必须连续,即

Si(xi+1)=Si+1(xi+1) , i=1,n1

我们很容易得到

Si1(xi)=yi1+yiyi1xixi1(xxi1)=yi
Si(xi)=yi+yi+1yixi+1xi(xxi)=yi

所以以上论述成立。

二次样条插值

二次样条插值可以构建为

Si(x)=yi+zi(xxi)+zi+1zi2(xi+1xi)(xxi)2

通过选择z0,然后用递推关系就可以得到系数

zi+1=zi+2yi+1yixi+1xi

三次样条插值

对于n+1给定点的数据集{xi},我们可以用n段三次多项式在数据点之间构建一个三次样条。如果

S(x)={S0(x), x[x0,x1]S1(x), x[x1,x2]Sn1(x), x[xn1,xn]

表示对函数f进行插值的样条函数,那么需要:

  • 插值特性,S(xi)=f(xi)
  • 样条相互连接,Si1(xi)=Si(xi),i=1,,n1
  • 两次连续可导,S'i1(xi)=S'i(xi) 以及 S'i1(xi)=S'i(xi),i=1,,n1.

由于每个三次多项式需要四个条件才能确定曲线形状,所以对于组成Sn个三次多项式来说,这就意味着需要4n个条件才能确定这些多项式。但是,插值特性只给出了n+1个条件,内部数据点给出n+12=n1个条件,总计是4n2个条件。我们还需要另外两个条件,根据不同的因素我们可以使用不同的条件。

其中一项选择条件可以得到给定uv钳位三次样条,

S(x0)=u
S(xk)=v

另外,我们可以设

S(x0)=S(xn)=0.

这样就得到自然三次样条。自然三次样条几乎等同于样条设备生成的曲线。

在这些所有的二次连续可导函数中,钳位与自然三次样条可以得到相对于待插值函数f的最小震荡。

如果选择另外一些条件,

S(x0)=S(xn)
S(x0)=S(xn)
S(x0)=S(xn)

可以得到周期性的三次样条。

如果选择,

S(x0)=S(xn)
S(x0)=S(xn)
S(x0)=f(x0),S(xn)=f(xn)

可以得到complete三次样条。

三次样条的最小性

三次样条有另外一个非常重要的解释,实际上它是在索伯列夫空间H2([a;b])最小化泛函

J(f)=ab|f(x)|2dx

的函数。

泛函J包含对于函数f(x)全部曲率|f(x)(1+f(x)2)32|的近似,样条是f(x)最小曲率的近似。

由于弹性条的总体能量与曲率成比例,所以样条是受到n个点约束的弹性条的最小能量形状。样条也是基于弹性条设计的工具。

使用自然三次样条的插值

它可以定义为

Si(x)=zi+1(xxi)3+zi(xi+1x)36hi+(yi+1hihi6zi+1)(xxi)+(yihihi6zi)(xi+1x)

以及

hi=xi+1xi.

通过解下面的方程可以得到它的系数。

{z0=0hi1zi1+2(hi1+hi)zi+hizi+1=6(yi+1yihiyiyi1hi1)zn=0

示例

线性样条插值

假设要为带有节点

(x0,f(x0))=(x0,y0)=(1, e1)
(x1,f(x1))=(x1,y1)=(12, e14)
(x2,f(x2))=(x2,y2)=(0, 1)
(x3,f(x3))=(x3,y3)=(12, e14)
(x4,f(x4))=(x4,y4)=(1, e1)

的函数

f(x)=ex2

找一个线性样条。直接代入样条公式,我们得到如下样条:

S(x)={e1+2(e14e1)(x+1)x[1,12]e14+2(1e14)(x+12)x[12,0]1+2(e141)xx[0,12]e14+2(e1e14)(x12)x[12,1]

样条函数(蓝线)以及所近似的函数(红点)如下图所示:

二次样条插值

下图是一个k=4的样条函数(蓝线)与所近似的函数(红线)的例子:

参见