2、一个内接点(j=0,1,2,3...,n)具有直到二阶的连续导数;则成为节点x0,x1,…,xn上的三次样条函数。若S(x)在节点x0,x1,…,xn上海满足插值条件:(3)S(xj)=yj(j=0,1,2,3...,n)则称S(x)为三次样条插值函数。由(1)知,S(x)在每一个小区间[xj-1,xj]上是一三次多项式,若记为Sj(x),则可设:Sj(x)=ajx3+bjx2+cjx+dj要确定函数S(x)的表达式,需确定4n个未知数{aj,bj,cj,dj}(j=0,1,2,3...,n)。由(2)知S(x),S'(x),S''
3、(x)在内节点x1,x2,....,xn-1上连续,则Ⅰ型S(xj-0)=S(xj+0)Ⅱ型S'(xj-0)=S'(xj+0)Ⅲ型S''(xj-0)=S''(xj+0)j=0,1,2,3...,n-1可得3n-2个方程,又由条件(3)S(xj)=yjj=0,1,2,3...,n得n个方程,共得到4n-2个方程。要确定4n个未知数,还差俩个方程。通常在端点x0=a.xn=b处各附加一个条件称边界条件,常见有三种:(1)自然边界条件:S''(x0)=S''(xn)=0(2)固定边界条件:S'(x0)=f'(x0),S'(x)=f'(xn
4、)(3)周期边界条件:S'(x0)=S'(xn),S''(x0)=S''(xn)共4n个方程,可唯一的确定4n个未知数算法分析:按照传统的编程方法,可将公式直接转换成MATLAB可识别的语言即可;另一种是运用矩阵运算,发挥MATLAB在矩阵运算上的优势。两种方法都可以方便的得到结果。这里给出方法一的程序。由于应用Ⅱ型边界条件,故取名叫spline2.m流程图:开始(1)由S(x),S'(x),S''(x)在内节点x1,x2,....,xn-1上连续,对S(xj-0)=S(xj+0)S'(xj-0)=S'(xj+0)S''(xj-0)
5、=S''(xj+0)进行循环,可得3n-2个方程加上固定边界条件S'(x0)=f'(x0),S'(x)=f'(xn)可得2个方程。S(xj)=yjj=0,1,2,3...,n得n个方程共4n个方程,可唯一确定Sj(x)=ajx3+bjx2+cjx+dj方程中S(x)的表达式中需确定的4n个未知数{aj,bj,cj,dj}由确定的{aj,bj,cj,dj}得出方程的解Sj(x)储存结果开始(2)输入原始数据选择spline2的插值方法进行插值处理输出插值文件输出图形结束源代码:functions=spline2(x0,y0,y21,y
6、2n,x)%s=spline2(x0,y0,y21,y2n,x)%x0,y0areexistedpoints,xareinsertpoints,y21,2narethesecond%dirivitivenumbersgiven.n=length(x0);km=length(x);a(1)=-0.5;b(1)=3*(y0(2)-y0(1))/(2*(x0(2)-x0(1)));forj=1:(n-1)h(j)=x0(j+1)-x0(j);endforj=2:(n-1)alpha(j)=h(j-1)/(h(j-1)+h(j));beta
7、(j)=3*((1-alpha(j))*(y0(j)-y0(j-1))/h(j-1)+alpha(j)*(y0(j+1)-y0(j))/h(j));a(j)=-alpha(j)/(2+(1-alpha(j))*a(j-1));b(j)=(beta(j)-(1-alpha(j))*b(j-1))/(2+(1-alpha(j))*a(j-1));endm(n)=(3*(y0(n)-y0(n-1))/h(n-1)+y2n*h(n-1)/2-b(n-1))/(2+a(n-1));forj=(n-1):-1:1m(j)=a(j)*m(j+1)
8、+b(j);endfork=1:kmforj=1:(n-1)if((x(k)>=x0(j))&(x(k)