资源描述:
《数值分析课程设计--多项式插值的振荡现象》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、数值分析课程设计多项式插值的振荡现象林思辉9指导教师李娇娇讲师学院名称理学院专业名称信息与计算科学提交日期2008年5月17一、问题的提出考虑在一个固定区间上用插值逼近一个函数。显然,Lagrange插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式增加时,Ln(x)是否也更加靠近被逼近的函数。龙格(Runge)给出的一个例子是极著名并富有启发性的。设区间[-1,1]上的函数二、实验内容考虑区间[-1,1]的一个等距划分,节点为则拉格朗日插值多项式为其中的ai(x),i=0,1,2,…,n是n次Lagrange插值
2、基函数。三、实验结果及分析当节点为,n=2,最大误差L=0.17分点数n=3,最大误差L=0.分点数n=4,最大误差L=0.17分点数n=5,最大误差L=0.分点数n=6,最大误差L=0.17分点数n=7,最大误差L=0.分点数n=8,最大误差L=1.17分点数n=9,最大误差L=0.分点数n=10,最大误差L=1.17分点数n=11,最大误差L=0.分点数n=12,最大误差L=3.17再选一定义在区间[-5,5]上的函数,重复上面的实验。结果为切比雪夫函数:考虑区间[-1,1]上的函数节点为分点数n=2,最大误差L=0.17分点数
3、n=3,最大误差L=0.分点数n=4,最大误差L=0.17分点数n=5,最大误差L=0.分点数n=6,最大误差L=0.17分点数n=7,最大误差L=0.分点数n=8,最大误差L=0.17分点数n=9,最大误差L=0.分点数n=10,最大误差L=0.17分点数n=11,最大误差L=0.分点数n=12,最大误差L=0.17误差分析:1)结果分析:普通的Lagrange插值与切比雪夫函数式中使用的节点越多,插值函数与原函数越逼近,因此结果有效。2)误差分析:本题是以Lagrange插值的振荡现象为代表来考察多项式的振荡现象,其误差是在插值
4、过程中原函数值与插值函数值的差造成的。一、关于本设计的体会程序比较简单易明,执行效率较高,但程序只能这对单一的插值公式,使用JAVA来解题,对画图造成影响,使画图难度加大,若使用MATLAB会跟方便解题。二、参考文献《JAVA程序设计教程》、《数值分析》三、附录(1)、程序代码:importjava.util.Scanner;classSF{publicstaticvoidmain(String[]args){intMAX=2000;double[]a=newdouble[MAX];double[]b=newdouble[MAX];
5、double[]c=newdouble[MAX];double[]d=newdouble[MAX];double[]t=newdouble[MAX];double[]q=newdouble[MAX];double[]m=newdouble[MAX];doublef,p,y;inti,j,r,n,g,v;Scannerscan=newScanner(System.in);System.out.println("1--f(x)"+"2--h(x)"+"3--切比雪夫");System.out.printf("输入v:");v=s
6、can.nextInt();System.out.printf("输入n:");n=scan.nextInt();if(v==1){for(g=2;g<=n;g++)//g为公式中的n{for(r=0;r<=1000;r++){t[r]=-1+2*(double)r/1000;//将X在区间内分成1000份q[r]=1/(1+25*t[r]*t[r]);//q[r]为该点真实函数值17for(i=0;i<=g;i++)a[i]=-1+(2*(double)i/g);//a[i]即x[i]for(j=0;j<=g;j++){b[j]=
7、1.0;for(i=0;i<=g;i++)if(i!=j)b[j]=b[j]*(t[r]-a[i])/(a[j]-a[i]);}//b[i]为公式里a[i]y=0.0;for(j=0;j<=g;j++)y=y+b[j]/(1+25*a[j]*a[j]);//y为n=2公式得出的函数值d[r]=Math.abs(y-q[r]);//d[r]为1000个节点的误差if(d[r]>m[g])m[g]=d[r];//得出误差的最大值}System.out.printf("n=%d",g);System.out.printf("m=%f
8、n",m[g]);}}if(v==2){for(g=2;g<=n;g++){for(r=0;r<=1000;r++){t[r]=-5+10*(double)r/1000;for(i=0;i<=g;i++){a[i]=-5+(10*(d