数值分析课程设计课程设计的目的和意义:《课程设计》是数值分析的同步课程,是《数值分析》的上机实习课。《数值分析》课程中构造了各种有效的算法和有效公式,同学们通过上机作课程设计,学习揣摩这些算法的思想和构造,评价算法的优劣性。通过上机,可以提高我们运用数学软件编程解决问题的能力,为今后从事科学计算和软件开发打下良好的基础。课程设计的题目:多项式插值的Runge振荡现象设计目的:通过对多项式插值现象的观察,了解多项式的次数与逼近效果的关系,提高同学们分析实验结果的能力。问题提出:考虑在一个固定区间上用插值逼近一个函数。显然,Lagrange插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式增加时,Ln(x)是否也更加靠近被逼近的函数。龙格(Runge)给出的一个例子是极著名并富有启发性的。设区间[-1,1]上的函数21()125fxx区间[-考虑设计1,1]的一个等距划分,节点为21,0,1,2,,iixinn则拉个朗日插值多项式为201()()125nniiiLxlxx其中的li(x),i=0,1,2,…,n是n次Lagrange插值基函数。设计要求:1.选择不断增大的分点数n=2,3,…*画出原函数f(x)及插值多项式函数Ln(x)在[-1,1]上的图像;*给出每一次逼近的最大误差;*比较并分析实验结果。2.选择其它函数,例如定义在区间[-5,5]上的函数。4(),()arctan1xhxgxxx重复上述实验看其结果如何。3.区间[a,b]上切比雪夫(Chebychev)点的定义为(21)cos,1,2,,1222(1)kbabakxknn以x1,x2,„,xn+1为插值节点构造上述各函数的Lagrange插值多项式,比较其结果。设计过程:已知函数f(x)在n+1个点x0,x1,…,xn处的函数值为y0,y1,…,yn。求一n次多项式函数Pn(x),使其满足:Pn(xi)=yi,i=0,1,…,n.解决此问题的拉格朗日插值多项式公式如下n0iiiny)x(L)x(P其中Li(x)为n次多项式:)xx()xx)(xx()xx)(xx()xx()xx)(xx()xx)(xx()x(Lni1ii1ii1i0in1i1i10i(1).在MATLAB6.5中输入函数21()125fxx当取不同的分点数n时,所得图象与原函数图象对比如下:n=2时;最大误差为:Max[L(x)-f(x)]=0.6462n=3时,max[L(X)-f(X)]=0.7070;n=6时,max[L(X)-f(X)]=0.6169;n=8时,max[L(X)-f(X)]=1.0452;n=10时;最大误差为:max[L(X)-f(X)]=1.9156;n=20时,最大误差为:max[L(X)-f(X)]=58.5855。图象分析:从图中可以看出当插值节点很少时,插值的误差很大,插值图象与原图象没有很好重叠在一起,而当随着插值的节点增加,中间能很好的重叠,但是两边出现很大误差,随着n值的增多,总体上分散的越厉害,最大误差也逐渐增加,在n=3时,最大误差为0.6462,但到了n=20时,已经变成了58.5855,这种随着节点数增多依然不能很好的接近被插值函数的现象称为“龙格现象”,亦称为多项式插值的振荡现象。因此通过增加节点数从而提高插值多项式的次数来逼近被插函数是不可取的。(2).对于定义在定义在区间[-5,5]上的函数h(x)=x/(1+x^4);输入函数后取节点数n=4,8,10;得到图象如下n=4时,max[L(X)-h(X)]=0.4020;n=8时,max[L(X)-h(X)]=0.1708;n=10时,max[L(X)-h(X)]=0.1092。图象分析:从图象可以看出随着插值节点数的增加出现异常的摆动,中间能较好的接近原函数,但两边却出现很大的误差。(3).对定义在(-5,5)上的函数g(x)=arctanx在matlab里输入相应的lagrange插值公式,当n取不同的值时,得到相应图象如下:n=4时,max[L(X)-g(X)]=0.4458;n=8时,max[L(X)-g(X)]=0.3240;N=10时,max[L(X)-g(X)]=0.8066。图象分析:从图象可以看出随着插值节点数的增加出现异常的摆动,中间能较好的接近原函数,随着插值节点增加有较好的插值重叠,但两边却出现很大的误差。(3).以上实验是从对区间的等距划分而作出的拉格朗日多项式,也因此产生了龙格振荡现象,现在我们通过用切比雪夫点来对上述各函数的区间进行划分,以此来建立拉格朗日多项式,看这样建立的拉格朗日多项式是否还会出现龙格振荡现象。还是考虑函数,为了与等距节点进行比较,我们仍然选取节点数不断增多的拉格朗日多项式。得到不同图象:n=3时;21()125fxxn=6时;n=11时;n=21时。图象分析:可见利用切比雪夫点来构造的拉格朗日多项式比等距节点下的拉格朗日多项式更为有效,随着节点数的增加,逼近程度就越好,它能很好的消除了“龙格现象”。心得体会:1)深入了解matlab运行环境和操作环境,初步学会调试程序,运用绘图命令制作函数图象。2)了解lagrange插值法龙格的异常现象,以及数值分析的解决方案。3)懂得如何运用已有的知识更进一步了解未知的问题。4)独立解决和思考问题的能力有了一定的提高。参考文献:《数值分析》华中科技大学出版社。李红著《matlab从入门到精通》人民邮电出版社求是科技编著《数值分析》北京理工大学出版社史万明孙新等编著附录程序代码1:functiont_charptresult=inputdlg({'请选择实验,若选2.1,请输入1,否则输入2:'},'charpt_2',1,{'1'});Nb=str2num(char(result));if(Nb~=1)&(Nb~=2)errordlg('实验选择错误!');return;endpromps={'请选择实验函数,若选f(x),请输入f,若选h(x),请输入h,若选g(x),请输入g:'};%选择所要运算的函数titles='charpt_2';result=inputdlg(promps,'charpt2',1,{'f'});Nb_f=char(result);if(Nb_f~='f'&Nb_f~='h'&Nb_f~='g')errordlg('实验选择错误!');return;endresult=inputdlg({'请输入插值点数N:'},'charpt_2',1,{'10'});Nd=str2num(char(result));if(Nd1)errordlg('结点输入错误!');return;endswitchNb_fcase'f'f=inline('1./(1+25*x.^2)');a=-1;b=1;case'h'f=inline('x./(1+x.^4)');a=-5;b=5;case'g'f=inline('atan(x)');a=-5;b=5;endif(Nb==1)x0=linspace(a,b,Nd+1);y0=feval(f,x0);x=a:0.1:b;y=lagrange(x0,y0,x);fplot(f,[a,b],'co');holdon;plot(x,y,'b--');xlabel('x');ylabel('y=f(x)oandy=ln(x)--');holdon;f1=1./(1+25*x.^2);err=max(abs(y-f1));result=inputdlg({'请输入插值点数N:'},'charpt_2',1,{'10'});xc=-cos(pi*[0:4]/4);x=(a+b)*0.5+(b-a)*xc*0.5;elseif(Nb==2)x0=linspace(a,b,Nd+1);y0=feval(f,x0);x=a:0.1:b;cs=spline(x0,y0);y=ppval(cs,x);plot(x0,y0,'o');holdon;plot(x,y,'k-');xlabel('x');ylabel('y=f(x)oandy=spline(x)-');endfunctiony=lagrange(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;endt1=clock%获得系统时间程序代码2:x=[-1:0.2:1];y=1./(1+25.*x.^2);x0=[-1:0.01:1];y0=lagrange(x,y,x0);y1=1./(1+25.*x0.^2);plot(x0,y0,'--r');holdon;plot(x0,y1,'-b');x2=abs(y0-y1);max(x2);程序代码3:n=3;fori=1:nx(i)=cos(((2.*i-1).*pi)./(2.*(n+1)));y(i)=1./(1+25.*x(i).*x(i));endx0=-1:0.01:1;y0=lagrange(x,y,x0);y1=1./(1+25.*x0.^2);plot(x0,y0,'--r')holdonplot(x0,y1,'-b')计算机配置:AMDathlon(tm)1.73GHz,512MB内存。CPU时间:(4.880000-0.020000,4.880000+0.020000)seconds。运行平台:MATLAB6.5.1