您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数值分析课程实验报告-拉格朗日和牛顿插值法
《数值分析》课程实验报告用拉格朗日和牛顿插值法求解函数值算法名称用拉格朗日和牛顿插值法求函数值学科专业机械工程作者姓名程习康作者学号153711006作者班级机电院研究生15级C2班中南大学二〇一五年十二月《数值分析》课程实验报告《数值分析》课程实验报告实验名称用拉格朗日和牛顿插值法求解函数值成绩一、问题背景在工程技术与科学研究中,常遇到考察两个变量间的相互关系问题。两个变量间的关系可以通过函数表示,若x为自变量,y为因变量,则函数关系可描述为y=f(x)。大多数问题中,函数表达式y=f(x)未知,人们通常采用逼近的方法处理:取得一组数据点(xi,yi)(i=0,1,2,…,n),数据点可由不同方式取得(例如,可根据工程设计要求得到,也可通过采样或实验取得),然后构造一个简单函数P(x)作为y=f(x)的近似表达式,即y=f(x)≈P(x),对于y=f(x)≈P(x),若满足P(xi)=f(xi)=yi,i=0,1,2…,n,这类问题成为插值问题。二、数学模型1.函数f(x)=lnx的一些数值如表:用拉格朗日插值法计算ln1.54的近似值。2.函数f(x)=x的一些数值如表:x0.40.50.60.70.80.63250.70710.77460.83670.8944用牛顿插值法计算√0.54的近似值,画出插值函数与原函数的图形做比较。三、算法描述1.拉格朗日插值法:设已知0x,1x,2x,...,nx及iy=f(ix)(i=0,1,.....,n),)(xLn为不超过n次多项式且满足iinyxL)((i=0,1,...n).易知)(xLn=0l(x)0y+....+)(xlnny.其中,)(xli均为n次多项式且满足式(3)(i,j=0,1,...,n),再由jx(ji)为n次多项式)(xli的n个根知)(xli=cniijjxx0.最后,由1)()(0nijjjijixxcxlc=nijjjixx0)(1,i=0,1,...,n.x1.41.51.61.71.8lnx0.33650.40550.47000.53060.5878x《数值分析》课程实验报告总之,)(xLn=iniiyxl0)(,)(xli=.0nijjjijxxxx式为n阶Lagrange插值公式,其中,)(xli(i=0,1,...n)称为n阶Lagrange插值的基函数。2.牛顿插值法:插值法是利用函数f(x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f(x)的近似值。如果这特定函数是多项式,就称它为插值多项式。当插值节点增减时全部插值基函数均要随之变化,这在实际计算中很不方便。为了克服这一缺点,提出了牛顿插值。牛顿插值通过求各阶差商,递推得到的一个公式:f(x)=f[x0]+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+...f[x0,...xn](x-x0)...(x-xn-1)+Rn(x)。四、主要代码1.拉格朗日插值建立函数文件:function[yt,L]=LagInterpl(x,y,xt)symst;n=length(x);ny=length(y);ifn~=nyerrorendL=0.0;fork=1:nlk=1;forj=1:nifj~=klk=lk*(t-x(j))/(x(k)-x(j));endend;L=L+y(k)*lk;endsimplify(L);L=collect(L);yt=subs(L,'t',xt);2.牛顿插值建立函数文件:function[yt,N]=NewtInterp(x,y,xt)symst;n=length(x);ny=length(y);ifn~=nyerror《数值分析》课程实验报告enda=zeros(1,n);N=y(1);w=1;fork=1:n-1yy=zeros(1,n);forj=k+1:nyy(j)=(y(j)-y(k))/(x(j)-x(k));enda(k)=yy(k+1);w=w*(t-x(k));N=N+a(k)*w;y=yy;endyt=subs(N,'t',xt);simplify(N);N=collect(N);N=vpa(N,6);五、实验结果及分析1.拉格朗日插值法在命令窗口输入:x=[1.4,1.5,1.6,1.7,1.8];y=[0.3365,0.4055,0.4700,0.5306,0.5878];xt=1.54;[yt,L]=LagInterpl(x,y,xt);z=1:0.05:4;yz=subs(L,'t',z);figure;plot(z,log(z),'--r',z,yz,'-b')holdonplot(x,y,'marker','+')holdonplot(xt,yt,'marker','o')legend('ln(x)','拉格朗日插值多项式','(x_k,y_k)','x=1.54')xlabel('x')ylabel('y')yt得到结果及图像如下:yt=0.4318《数值分析》课程实验报告得到ln1.54的近似值为0.4318。拉格朗日插值模型简单,结构紧凑,是经典的插值法。但是由于拉格朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新计算。且当增大插值阶数时容易出现龙格现象。2.牛顿插值法在命令窗口输入:x=[0.40.50.60.70.8];y=[0.63250.70710.77460.83670.8944];xt=0.54;[yt,N]=NewtInterp(x,y,xt)z=0.1:0.05:2;yz=subs(N,'t',z);figure;plot(z,sqrt(z),'--r',z,yz,'-b')holdonplot(x,y,'marker','+')holdonplot(xt,yt,'marker','o')h=legend('$\sqrt{x}$','牛顿','$(x_k,y_k)$','$x=0.54$');set(h,'Interpreter','latex')xlabel('x')ylabel('y')得到结果及图像如下:yt=0.7348N=-0.291667*t^4+0.925*t^3-1.30208*t^2+1.46125*t+0.2046《数值分析》课程实验报告得到√0.54的近似值为0.7348,插值函数为N=-0.291667*t^4+0.925*t^3-1.30208*t^2+1.46125*t+0.2046,其计算精度是相当高的。Lagrange插值法和Newton插值法解决实际问题中关于只提供复杂的离散数据的函数求值问题,通过将所考察的函数简单化,构造关于离散数据实际函数f(x)的近似函数P(x),从而可以计算未知点出的函数值,是插值法的基本思路。实际上Lagrange插值法和Newton插值法是同一种方法的两种变形,其构造拟合函数的思路是相同的,而实验中两个实际问题用两种算法计算出结果是相同的。
本文标题:数值分析课程实验报告-拉格朗日和牛顿插值法
链接地址:https://www.777doc.com/doc-4796116 .html