三次样条插值的Matlab实现精计算机matlab_高等教育-大学课件.pdf
(第一边界条件源代码:fun ctio n y=yt1(xO,yO,f_O,f_ n,x _(1%第一类边界条件下三次样条 插值;%xi 所求点;%yi 所求点函数值;%x 已知插值点;%y 已知插值点函数值;%f_0 左端点一次导数值;%f_n 右端点一次导数值;n=len gth(xO;z=len gth(yO;h=zeros(n-1,1;k=zeros(n-2,1;l=zeros(n-2,1;S=2*eye(n;fori=1:n-1 h(i=x0(i+1-x0(i;end fori=1:n-2 k(i=h(i+1/(h(i+1+h(i;l(i=1-k(i;end%对于第一种边界条件:k=1;k;_(2 l=l;1;_(3%构建系数矩阵 S:fori=1:n-1 S(i,i+1=k(i;S(i+1,i=l(i;end%建立均差表:F=zeros(n-1,2;fori=1:n-1 F(i,1=(y0(i+1-y0(i/(x0(i+1-x0(i;end D=zeros(n-2,1;fori=1:n-2 F(i,2=(F(i+1,1-F(i,1/(x0(i+2-x0(i;次导数值右端点一次导数值对于第一种边界条件构建系数矩阵建立均差表构建函数寻找所在位置并求出对应插值自然边界条件源代码仅仅需要对上面部分标注的位置做如下修改删除D(i,1=6*F(i,2;end%构建函数 D:d0=6*(F(1,2-f_0/h(1;_(4 dn=6*(f_n-F(n-1,2/h(n-1;_(5 D=d0;D;d n;_(6 m=SD;%寻找 x 所在位置,并求出对应插值:fori=1:le ngth(x for j=1:n-1 if(x(i=x0(j y(i=(m(j*(x0(j+1-x(iA3/(6*h(j+.(m(j+1*(x(i-x0(jA3/(6*h(j+.(y0(j-(m(j*h(jA2/6*(x0(j+1-x(i/h(j+.(y0(j+1-(m(j+1*h(jA2/6*(x(i-x0(j/h(j;break;else con ti nue;end end end(2(自然边界条件源代码:次导数值右端点一次导数值对于第一种边界条件构建系数矩阵建立均差表构建函数寻找所在位置并求出对应插值自然边界条件源代码仅仅需要对上面部分标注的位置做如下修改删除仅仅需要对上面部分标注的位置做如下修改:(1:fun ction y=yt2(x0,y0,x(2:k=0;k _(3:l=l;0 _(4+(5:删除(6:D=0:D:0 次导数值右端点一次导数值对于第一种边界条件构建系数矩阵建立均差表构建函数寻找所在位置并求出对应插值自然边界条件源代码仅仅需要对上面部分标注的位置做如下修改删除