1数值计算实验报告模板目录1.1Lagrange插值法......................................................................................................................................11.1.1实验目的与实验内容..........................................................................................................................11.1.2Lagrange插值法原理...........................................................................................................................11.1.3实验方案的选择与设计......................................................................................................................21.1.4Lagrange插值法算法分析设计及程序实现........................................................错误!未定义书签。1.1.5数值计算结果分析...............................................................................................................................51.1.6本次实验总结......................................................................................................................................91.1Lagrange插值法1.1.1实验目的与实验内容掌握Lagrange插值法的基本思路和步骤,完成算法的分析设计与程序编写,并完成不同条件(例如内插,外推对计算结果的影响;插值节点的多少对插值结果的影响等)下的数值实验;观察龙格现象。并进行相关的误差分析。1.1.2Lagrange插值法原理对于函数()yfx。假设给定n+1个插值节点nxxx10,及节点上的函数值nyyy,,,10,若n次多项式)(xlj,nj,,2,1,0在n+1个节点2nxxx10上满足jijixlji01)(.nji,,2,1,0,.(1.1)则称这n+1个n次多项式)(,),(),(10xlxlxln为节点nxxx,,,10上的n次插值基函数.则有插值基函数)())(()()())(()()(110110nkkkkkknkkkxxxxxxxxxxxxxxxxxl(1.2)(nk,,2,1,0若满足插值条件()()iiniyfxLx的插值多项式)(xLn:nkkknyxlxL0)()((1.3)则称为函数()yfx的n次Lagrange插值多项式。1.1.3Lagrange插值法算法分析设计及程序实现Lagrange插值法算法分析设计Step1:给定插值节点X向量和节点的函数值Y向量,以及插值节点0x;Step2:判断X和Y的长度是否相等若相等,继续运行;若不相等则返回Step1;Step3:置nk,...,2,1,0,)()(0nkjjjkjkxxxxxl(1.1.3)Step4:若jk,则退出本次循环;否则,转入Step3;Step4:置拉格朗日插值多项式3nkkknxlyxL0)()(;(1.1.4)Step5:带入插值节点0x,求出节点函数值y;Step6:输出y和插值多项式)(nxL;Lagrange插值法程序function[L,y]=lagrange123(X,Y,x0)%X是给定的插值节点,Y是节点的函数值,x0是插入的节点%L是Lagrange插值多项式,y是节点的函数值tic%计算开始时间n=length(X);m=length(Y);%求出向量X和Y的长度if(m~=n)%避免输入的X和Y的长度不一致,用if语句做出判断error('向量长度不一致!');return;%如果错误,则重新输入X和Yendsymsx%定义自变量xn=length(X);L=0;fork=1:ns=1;forj=1:nif(k~=j)%加入判断条件使k不等于jg=(x-X(j))/(X(k)-X(j));s=s*g;endendL=L+s*Y(k);%求出lagrange插值多项式4endL=expand(L);%展开拉格朗日插值多项式L=vpa(L,6);%将分数变成小数f=sin(x);%定义原函数sin(x)y=subs(L,x,x0);%求出x0的函数值h=ezplot(f,[0,1]);set(h,'linestyle',':','color','r');%画出原函数sin(x)的图像,并标记holdong=ezplot(L,[0,1]);set(g,'linestyle','-','color','g');%画出插值多项式的图像,并标记legend('y=sin(x)','lagrange多项式','location','southeast');%添加图例在右下角gridon;1.1.4实验方案的选择与设计实验方案1针对函数()sinyfxx,观察其在sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274处的插值结果,并与精确值比较,做误差分析。同时求出sin0.3367的近似值,并作图与原函数)sin(x的图像比较拟合效果。实验方案2针对函数()sinyfxx,观察其在不同步长(即节点的多少对插值结果的影响)实验方案3针对函数xxfcos)(,观察其在不同步长,不同节点数的条件下的插值结果,并与精确值比较,做误差分析。同时给出直观的插值效果图。实验方案4在区间[5,5]上,利用函数211)(xxf观察龙格现象51.1.5数值实验结果分析方案一:在matlab命令窗口输入:X=0:0.5:3;y=cos(X);plot(X,y,'.r')holdonx=0:0.01:3;y=cos(x);plot(x,y)蓝线为标准图像,红点为7个插值点Lagrange123([00.511.522.53],[1.00000.87760.54030.0707-0.4161-0.8011-0.9900])得到以下结果:ans=-0.0001-0.00680.0572-0.0178-0.4902-0.00201.0000%%该系数是算出的Lagrange多项式的系数,次数由高向低排列%对该多项式进行画图forx0=min(X):0.05:max(X);t=subs(sum(ll),'x',x0);holdonplot(x0,t,'r')end插值效果图像图像是通过该Lagrange算法算出的多项式的图像方案二在matlab命令窗口输入:X=[0.32,0.34,0.36];Y=[0.314567,0.333487,0.352274];00.511.522.53-1-0.8-0.6-0.4-0.200.20.40.60.8100.511.522.53-1-0.8-0.6-0.4-0.200.20.40.60.816x0=0.3367;[L,y]=lagrange123(X,Y,x0)回车,输出[L,y]=lagrange123(X,Y,x0)Elapsedtimeis0.718000seconds.L=-.166250*x^2+1.05572*x-.624100e-2y=0.3304插值效果图像00.20.40.60.811.21.41.61.8200.511.5x-.166250x2+1.05572x-.624100e-2y=sin(x)lagrange多项式图1.1.1增加节点个数,10个在matlab命令窗口输入:X=0.3:0.02:0.5;Y=sin(X);x0=0.3367;[L,y]=lagrange123(X,Y,x0)回车,输出Elapsedtimeis1.154000seconds.L=7-.166608*x^3+.913435e-2*x^5-.169533e-2*x^6-.232153e-2*x^8+.130088e-2*x^9-.262003e-3*x^4+.225435e-2*x^7-.286960e-7+1.00000*x-.856839e-5*x^2-.325667e-3*x^10y=0.3304插值效果图像00.20.40.60.811.21.41.61.8200.10.20.30.40.50.60.70.80.91x.130088e-2x9-.325667e-3x10-.856839e-...+1.00000xy=sin(x)lagrange多项式图1.1.2减少节点个数为5个在matlab命令窗口输入:X=0.3:0.02:0.4;Y=sin(X);x0=0.3367;[L,y]=lagrange123(X,Y,x0)回车,输出Elapsedtimeis0.998000seconds.L=.732376e-6+.853207e-4*x^2-.166974*x^3+.782745e-2*x^5+.587697e-3*x^4+.999988*xy=0.3304插值效果图像800.20.40.60.811.21.41.61.8200.10.20.30.40.50.60.70.80.91x.732376e-6+.853207e-4x2-.166974x3+...+.999988xy=sin(x)lagrange多项式图1.1.3根据上面的实验,可以看出5个节点比10个节点的拟合效果更好,说明节点数越多,不一定拟合效果更好。数值实验结果分析1)由于这是第一个实验,还不太熟悉,因此出现了许多语句格式上的错误。比如:缺少括号,if语句没有加end,输入的节点用X表示,调用的时候却用x.这些错误都是由于粗心,以后在编程过程中应该仔细。2)利用函数feval计算x0的函数值。它的命令格式是F=@(x)f,y=feval(F,x0),则函数值y=f(x0)。在调试过程中发现,如果写出f的表达式,再调用f,那么会显示F=@(x)f,y也不是x0的函数值而是函数f的表达式。由于拉格朗日插值多项式L不能在程序中写出,因此改用subs函数求函数值。3)由于多项式的显示格式是因式连续相乘,而不是幂次递减格式显示,因此利用expand()函数展开多项式,就正确显示4)利用函数legend可以给函数图像添加标题。5)今天用函数sin(x)做数值试验,可能由于输入的X和Y的小数位比较多,所以导致多项式L用分号表示。这时利用函数vpa()可以把分数化成小数,而且在设定9vpa的精度只能是整数,不能是小数。6)图形显示在界面上方,此时右上角的图例会盖住图形。因此,在命令legend()后面加上('lacation','southeast’),让图例位于右下角。7)利用plot画图,要先算出y的取值,这样会浪费许多时间。因此,选择函数ezplot().并用命令ezplot(L,’r’),却发现这样不能带标记的图象。经过查阅资料,我明白正确的命令h=ezplot(f,[-2*pi,2*pi]);set(h,'linestyle',':','color'