资源描述:
《第一型 三次样条插值matlab程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第一型三次样条插值问题求解一:解题过程1.根据书上关于三次样条的步骤,列出相关的矩阵。2.编写追赶法的求解函数,求解矩阵得到3.根据求解结果得到分段函数,画图表示,并求解4.利用MATLAB内置三次样条函数求解问题二:结果以及结果对比1.(因显示问题,把表格中的精度变小了)自编程序所得的中间值MATLAB内置三次样条中间值2.样条图像自编程序所得的图像MATLAB内置三次样条图像可得,自编程序解得的结果与MATLAB解的结果完全一致。三:程序通用性分析程序对于输入点的顺序进行优化,自变量X不需要从小到大进行排序,随机输入以后,程序会自动
2、排序。数据的输入不限点数,自变量之间的间隔也不限。输入数据相对比较自由。四:程序使用演示、通用性演示运行文件yzy.m,即可得到中间值以及三次样条图像(里面内置了需要输入的数据)1.按书上数据输入得到图像2.颠倒书上数据输入得到同样的图像1.在原有数据上多输入三组数据根据上面三张图,可以发现,数据量不同、数据顺序不同、数据自变量X间隔不同,都可以得出结果,可以说明程序具有很好的通用性。附录yzy.m1.A=[10,1,2,3,4,5,6,7,8,9,0,11,13,15;5.8,3.3,4.04,4.7,5.22,5.54,5.78,5
3、.4,5.57,5.7,2.51,6,8,10.3];2.A=A';%转置排序3.A=sortrows(A);4.nn=size(A,1);5.A=A';6.f1=0.8;f2=0.2;7.n=size(A,2);8.M=eye(n);9.M=M*2;10.N=zeros(n,1);11.fori=2:n-112.M(i,i-1)=(A(1,i)-A(1,i-1))/(A(1,i+1)-A(1,i-1));13.M(i,i+1)=1-M(i,i-1);14.N(i)=6*(((A(2,i+1)-A(2,i))/(A(1,i+1)-A(1
4、,i))-((A(2,i)-A(2,i-1)))/(A(1,i)-A(1,i-1)))/(A(1,i+1)-A(1,i-1)));15.end16.M(1,2)=1;1.M(n,n-1)=1;%M为三次样条的矩阵2.N(1)=6*(((A(2,2)-A(2,1))/(A(1,2)-A(1,1))-f1));3.N(n)=6*(f2-((A(2,n)-A(2,n-1))/(A(1,n)-A(1,n-1))));4.NE=zeros(n,n+1);%追赶法5.NE(1,1)=M(1,1);6.NE(1,n+1)=N(1);7.fori=2:
5、n8.l=M(i,i-1)/NE(i-1,i-1);9.NE(i,i)=M(i,i)-l*M(i-1,i);10.NE(i,n+1)=N(i)-l*NE(i-1,n+1);11.end12.AN=zeros(n,1);13.AN(n)=NE(n,n+1)/NE(n,n);14.fori=1:n-115.j=n-i;16.AN(j)=(NE(j,n+1)-M(j,j+1)*AN(j+1))/NE(j,j);17.end18.M=AN;%追赶法结束19.S=zeros(n-1,5);20.fori=1:n-1;21.S(i,1)=A(2,i
6、);22.S(i,2)=(A(2,i+1)-A(2,i))/(A(1,i+1)-A(1,i))-(1/3*M(i)+1/6*M(i+1))*(A(1,i+1)-A(1,i));1.S(i,3)=1/2*M(i);2.S(i,4)=(M(i+1)-M(i))/(6*(A(1,i+1)-A(1,i)));3.S(i,5)=S(i,1)+S(i,2)*((A(1,i+1)-A(1,i))/2)+S(i,3)*((A(1,i+1)-A(1,i))/2).^2+S(i,4)*((A(1,i+1)-A(1,i))/2).^3;%三次样条函数系数4.
7、end5.n=size(S,1);6.title('三次样条图像');7.holdon;8.fori=1:n9.x=A(1,i):(A(1,i+1)-A(1,i))/100:A(1,i+1);10.y=S(i,1)+S(i,2)*(x-A(1,i))+S(i,3)*(x-A(1,i)).^2+S(i,4)*(x-A(1,i)).^3;11.plot(x,y);12.plot(A(1,i),A(2,i),'o');13.end14.plot(A(1,n+1),A(2,n+1),'o');15.holdoff;16.disp('ÖмäÖµ
8、');17.z=zeros(2,n);18.fori=1:n1.z(1,i)=(A(1,i)+A(1,i+1))/2;2.z(2,i)=S(i,5);3.end4.disp(z);5.X=zeros(1,n