数值分析实验报告(一)(完整)

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

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

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

资源描述

1数值分析实验报告姓名学号系别数学系班级09信息(2)班主讲教师王丹指导教师王丹实验日期专业信息与计算科学课程名称数值分析同组实验者无一、实验名称:实验一、插值多项式的收敛性实验二、实验目的:1.理解插值的基本原理;2.掌握多项式插值的概念、存在唯一性;3.编写MATLAB程序实现Lagrange插值和Newton插值,验证Runge现象、分析插值多项式的收敛性。三、实验内容及要求:1.已知数据如下:ix0.20.40.60.81.0()ifx0.980.920.810.640.38(1)用MATLAB语言编写按Langrage插值法和Newton插值法计算插值的程序,对以上数据进行插值;(2)利用MATLAB在第一个图中画出离散数据及插值函数曲线。2.给定函数21(),[1,1]125fxxx=?+,利用上题编好的Langrage插值程序(或Newton插值程序),分别取3个,5个、9个、11个等距节点作多项式插值,分别画出插值函数及原函数()fx的图形,以验证Runge现象、分析插值多项式的收敛性。三、实验步骤(或记录)Lagrange插值法的基本思想:步骤1:构造01,,,nxxxL处的插值基函数01(),(),,()nlxlxlxL,其中,插值节点ix处的插值基函数()ilx为011011()()()()()()()()()iiniiiiiiinxxxxxxxxlxxxxxxxxx-+-+----=----LLLL;步骤2:以iy作为()ilx的系数,使得()iiylx通过插值点(,)iixy;步骤3:把所有的()iiylx线性叠加,得到通过所有插值点(,),0,1,,iixyin=L的插值函数0()()nniiiLxylx==å。Lagrange插值伪代码:给定n个插值点0011(,),(,),,(,)nnxyxyxyL的情况下,求插值函数()nLx在点t处的函数值。/*输入参数2*x=(x0,x1,….,xn),插值节点*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值*t求插值函数Ln(x)在t处的函数值*返回值插值函数Ln(x)在t处的函数值*/procedureLagrangeresult0;fori=1tonli(t)1;forj=1tonifi≠jli(t)li(t)*(t-xi)/(xi-xj);endifendforresultresult+yi*li(t);endforreturnresult;endprocedureLagrange插值子程序lagr1:functiony=lagr1(x0,y0,x)%x0为插值点的向量,y0为插值点处的函数值向量,x为未知的点向量n=length(x0);m=length(x);fori=1:mz=x(i);s=0.0;fork=1:np=1.0;forj=1:nifj~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;EndNewton插值算法公式:001001011()()[,]()[,,,]()()()nnnNxfxfxxxxfxxxxxxxxxLLL余项为()()()nnRxfxNx)(],,,,[010ininxxxxxxf0(1)()()(1)!niifnxxn其中(,)ab与x有关.Newton插值伪代码:3/*输入参数*x=(x0,x1….,xn),插值节点*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值*t求插值函数Pn(x)在t处的函数值*返回值插值函数Pn(x)在t处的函数值*/procedureNewtonforj=0tond1jyj;endforforj=1tonfori=jtondij(di,j-1-di-1,j-1)/(xi-xi-j+1);endforendforresultd11;temp1;fori=1tontemptemp*(t-xi-1);resultresult+di,i*temp;endforreturnresult;endprocedureNewton插值子程序Newton:functiony=newton(x0,y0,x)%牛顿插值法n=length(x0);m=length(x);d=zeros(n,n);%d为差商表矩阵forj=1:nd(j,1)=y0(j);%差商表第一列endforj=2:n%差商表为下三角矩阵fori=j:nd(i,j)=(d(i,j-1)-d(i-1,j-1))./(x0(i)-x0(i-j+1));%求差商表矩阵中各值endendfork=1:mz=x(k);result=d(1,1);temp=1;fori=2:ntemp=temp*(z-x0(i-1));result=result+d(i,i)*temp;endy(k)=result;end41.编写拉格朗日插值多项式函数内容为:functionf=lagfun(x)a=[0.2,0.4,0.6,0.8,1.0];b=[0.98,0.92,0.81,0.64,0.38];fori=1:5L(i)=1;forj=1:5ifj~=iL(i)=L(i)*(x-a(j))/(a(i)-a(j));endendendf=0;fori=1:5f=f+L(i)*b(i);end画图程序内容为:x0=[0.2,0.4,0.6,0.8,1.0];y0=[0.98,0.92,0.81,0.64,0.38];plot(x0,y0,'o')holdongridonfplot('lagfun',[0,1]);holdonx=0:0.1:1;plot(x,newton(x0,y0,x),'r');legend('离散点','Lagrange插值','Newton插值')图形为:00.10.20.30.40.50.60.70.80.910.40.50.60.70.80.91离散点Lagrange插值Newton插值52.Lagrange插值程序forn=3:2:11x=-1:0.1:1;y=1./(1+25.*x.^2);z=0*x;x0=-1:2/(n-1):1;y0=1./(1+25.*x0.^2);y1=lagr1(x0,y0,x);plot(x,z,'r',x,y,'k:',x,y1,'r')gtext(['Lagr.',num2str(n)])holdonendtitle('Lagrange')legend('Largr插值','f(x)图像')图形为:-1-0.8-0.6-0.4-0.200.20.40.60.81-1-0.500.511.52Lagr.3Lagr.5Lagr.7Lagr.9Lagr.11LagrangeLargr插值f(x)图像6-1-0.8-0.6-0.4-0.200.20.40.60.81-0.4-0.200.20.40.60.811.21.41.6Lagr10.y=1/(1+25.*x.2)Lagrange拉格朗日插值在高次插值时同原函数偏差大、存在龙格现象,高次插值多项式不收敛。五、教师评语(或成绩)教师签字:王丹2011年月日

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

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

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

×
保存成功