资源描述:
《数值分析实验报告(一)(完整)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数值分析实验报告姓名学号系别数学系班级09信息(2)班主讲教师王丹指导教师王丹实验日期专业信息与计算科学课程名称数值分析同组实验者无一、实验名称:实验一、插值多项式的收敛性实验二、实验目的:1.理解插值的基本原理;2.掌握多项式插值的概念、存在唯一性;3.编写MATLAB程序实现Lagrange插值和Newton插值,验证Runge现象、分析插值多项式的收敛性。三、实验内容及要求:1.已知数据如下:0.20.40.60.81.00.980.920.810.640.38(1)用MATLAB语言编写按Langrage插值法和Newton插值法计算插值的程序,对以上数据进行插值;(
2、2)利用MATLAB在第一个图中画出离散数据及插值函数曲线。2.给定函数,利用上题编好的Langrage插值程序(或Newton插值程序),分别取3个,5个、9个、11个等距节点作多项式插值,分别画出插值函数及原函数的图形,以验证Runge现象、分析插值多项式的收敛性。三、实验步骤(或记录)Lagrange插值法的基本思想:步骤1:构造处的插值基函数,其中,插值节点处的插值基函数为;步骤2:以作为的系数,使得通过插值点;步骤3:把所有的线性叠加,得到通过所有插值点的插值函数。Lagrange插值伪代码:给定个插值点的情况下,求插值函数在点处的函数值。/*输入参数6*x=(x0
3、,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为插值点的
4、向量,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插值算法公式 :余项为其中有关.Newton插值伪代码:6/*输入参数*x=(x0,x1….,xn),插值节点*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值*t求插值函数Pn(x)在t处的函数值*返回值插值函数Pn(x)在t处的函数
5、值*/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)
6、;%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;end61.编写拉格朗日插值多项式函数内容为:functionf=lagfun(x)a=[0.2,0.4,0
7、.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]);hol