三次样条插值作业题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

例1设)(xf为定义在[0,3]上的函数,有下列函数值表:xi0123yi00.521.5且2.0)('0xf,1)('3xf,试求区间[0,3]上满足上述条件的三次样条插值函数)(xs本算法求解出的三次样条插值函数将写成三弯矩方程的形式:)()6()()6()(6)(6)(211123131jjjjjjjjjjjjjjjjxxhhMyxxhhMyxxhMxxhMxs其中,方程中的系数jjhM6,jjhM61,jjjjhhMy)6(2,jjjjhhMy)6(211将由Matlab代码中的变量Coefs_1、Coefs_2、Coefs_3以及Coefs_4的值求出。以下为Matlab代码:%=============================%本段代码解决作业题的例1%=============================clearallclc%自变量x与因变量y,两个边界条件的取值IndVar=[0,1,2,3];DepVar=[0,0.5,2,1.5];LeftBoun=0.2;RightBoun=-1;%区间长度向量,其各元素为自变量各段的长度h=zeros(1,length(IndVar)-1);fori=1:length(IndVar)-1h(i)=IndVar(i+1)-IndVar(i);end%为向量μ赋值mu=zeros(1,length(h));fori=1:length(mu)-1mu(i)=h(i)/(h(i)+h(i+1));endmu(i+1)=1;%为向量λ赋值lambda=zeros(1,length(h));lambda(1)=1;fori=2:length(lambda)lambda(i)=h(i)/(h(i-1)+h(i));end%为向量d赋值d=zeros(1,length(h)+1);d(1)=6*((DepVar(2)-DepVar(1))/(IndVar(2)-IndVar(1))-LeftBoun)/h(1);fori=2:length(h)a=(DepVar(i)-DepVar(i-1))/(IndVar(i)-IndVar(i-1));b=(DepVar(i+1)-DepVar(i))/(IndVar(i+1)-IndVar(i));c=(b-a)/(IndVar(i+1)-IndVar(i-1));d(i)=6*c;endd(i+1)=6*(RightBoun-(DepVar(i+1)-DepVar(i))/(IndVar(i+1)-IndVar(i)))/h(i);%为矩阵A赋值%将主对角线上的元素全部置为2A=zeros(length(d),length(d));fori=1:length(d)A(i,i)=2;end%将向量λ的各元素赋给主对角线右侧第一条对角线fori=1:length(d)-1A(i,i+1)=lambda(i);end%将向量d的各元素赋给主对角线左侧第一条对角线fori=1:length(d)-1A(i+1,i)=mu(i);end%求解向量MM=A\d';%求解每一段曲线的函数表达式fori=1:length(h)Coefs_1=M(i)/(6*h(i));Part_1=conv(Coefs_1,...conv([-1,IndVar(i+1)],...conv([-1,IndVar(i+1)],[-1,IndVar(i+1)])));S_1=polyval(Part_1,[IndVar(i):0.01:IndVar(i+1)]);Coefs_2=M(i+1)/(6*h(i));Part_2=conv(Coefs_2,...conv([1,-IndVar(i)],...conv([1,-IndVar(i)],[1,-IndVar(i)])));S_2=polyval(Part_2,[IndVar(i):0.01:IndVar(i+1)]);Coefs_3=(DepVar(i)-M(i)*h(i)^2/6)/h(i);Part_3=conv(Coefs_3,[-1,IndVar(i+1)]);S_3=polyval(Part_3,[IndVar(i):0.01:IndVar(i+1)]);Coefs_4=(DepVar(i+1)-M(i+1)*h(i)^2/6)/h(i);Part_4=conv(Coefs_4,[1,-IndVar(i)]);S_4=polyval(Part_4,[IndVar(i):0.01:IndVar(i+1)]);S=S_1+S_2+S_3+S_4;plot([IndVar(i):0.01:IndVar(i+1)],S,'LineWidth',1.25)%在样条插值曲线的相应位置标注该段曲线的函数表达式text(i-1,polyval(Part_1,3),...['\itS',num2str(i),'(x)=',num2str(Coefs_1),'(',num2str(IndVar(i+1)),'-x)^{3}+',...num2str(Coefs_2),'(x-',num2str(IndVar(i)),')^{3}+',num2str(Coefs_3),...'(',num2str(IndVar(i+1)),'-x)+',num2str(Coefs_4),'(x-',num2str(IndVar(i)),')'],...'FontName','TimesNewRoman','FontSize',14)holdonend%过x=1和x=2两个横轴点作垂线%line([1,1],[2.5,-0.5],'LineStyle','--');line([2,2],[2.5,-0.5],'LineStyle','--');%为x轴和y轴添加标注xlabel('\itx','FontName','TimesNewRoman',...'FontSize',14,'FontWeight','bold');ylabel('\its(x)','FontName','TimesNewRoman',...'Rotation',0,'FontSize',14,'FontWeight','bold');最终,三次样条插值函数s(x)表达式为:.3,2,)2(44.1)3(62.2)2(06.0)3(62.0,2,1,)1(62.2)2(08.0)1(62.0)2(42.0,1,0,08.0)1(06.042.0)1(06.0)(333333xxxxxxxxxxxxxxxxs曲线的图像如图所示:例2已知函数值表:xi1245yi1342试求在区间[1,5]上满足上述函数表所给出的插值条件的三次自然样条插值函数)(xs本算法求解出的三次样条插值函数将写成三弯矩方程的形式:)()6()()6()(6)(6)(211123131jjjjjjjjjjjjjjjjxxhhMyxxhhMyxxhMxxhMxs其中,方程中的系数jjhM6,jjhM61,jjjjhhMy)6(2,jjjjhhMy)6(211将由Matlab代码中的变量Coefs_1、Coefs_2、Coefs_3以及Coefs_4的值求出。以下为Matlab代码:%=============================%本段代码解决作业题的例2%=============================clearallclc%自变量x与因变量y的取值IndVar=[1,2,4,5];DepVar=[1,3,4,2];%区间长度向量,其各元素为自变量各段的长度h=zeros(1,length(IndVar)-1);fori=1:length(IndVar)-1h(i)=IndVar(i+1)-IndVar(i);end%为向量μ赋值mu=zeros(1,length(h));fori=1:length(mu)-1mu(i)=h(i)/(h(i)+h(i+1));endmu(i+1)=0;%为向量λ赋值lambda=zeros(1,length(h));lambda(1)=0;fori=2:length(lambda)lambda(i)=h(i)/(h(i-1)+h(i));end%为向量d赋值d=zeros(1,length(h)+1);d(1)=0;fori=2:length(h)a=(DepVar(i)-DepVar(i-1))/(IndVar(i)-IndVar(i-1));b=(DepVar(i+1)-DepVar(i))/(IndVar(i+1)-IndVar(i));c=(b-a)/(IndVar(i+1)-IndVar(i-1));d(i)=6*c;endd(i+1)=0;%为矩阵A赋值%将主对角线上的元素全部置为2A=zeros(length(d),length(d));fori=1:length(d)A(i,i)=2;end%将向量λ的各元素赋给主对角线右侧第一条对角线fori=1:length(d)-1A(i,i+1)=lambda(i);end%将向量d的各元素赋给主对角线左侧第一条对角线fori=1:length(d)-1A(i+1,i)=mu(i);end%求解向量MM=A\d';%求解每一段曲线的函数表达式fori=1:length(h)Coefs_1=M(i)/(6*h(i));Part_1=conv(Coefs_1,...conv([-1,IndVar(i+1)],...conv([-1,IndVar(i+1)],[-1,IndVar(i+1)])));S_1=polyval(Part_1,[IndVar(i):0.01:IndVar(i+1)]);Coefs_2=M(i+1)/(6*h(i));Part_2=conv(Coefs_2,...conv([1,-IndVar(i)],...conv([1,-IndVar(i)],[1,-IndVar(i)])));S_2=polyval(Part_2,[IndVar(i):0.01:IndVar(i+1)]);Coefs_3=(DepVar(i)-M(i)*h(i)^2/6)/h(i);Part_3=conv(Coefs_3,[-1,IndVar(i+1)]);S_3=polyval(Part_3,[IndVar(i):0.01:IndVar(i+1)]);Coefs_4=(DepVar(i+1)-M(i+1)*h(i)^2/6)/h(i);Part_4=conv(Coefs_4,[1,-IndVar(i)]);S_4=polyval(Part_4,[IndVar(i):0.01:IndVar(i+1)]);S=S_1+S_2+S_3+S_4;plot([IndVar(i):0.01:IndVar(i+1)],S,'LineWidth',1.25)%在样条插值曲线的相应位置标注该段曲线的函数表达式text(i,polyval(Part_1,5),...['\itS',num2str(i),'(x)=',num2str(Coefs_1),'(',num2str(IndVar(i+1)),'-x)^{3}+',...num2str(Coefs_2),'(x-',num2str(IndVar(i)),')^{3}+',num2str(Coefs_3),...'(',num2str(IndVar(i+1)),'-x)+',num2str(Coefs_4),'(x-',num2str(IndVar(i)),')'],...'FontName','TimesNewRoman','FontSize',14)holdonend%过x=2和x=4两个横轴点作垂线%line([2,2],[4.5,0.5],'LineStyle','--');line([

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功