资源描述:
《数值逼近课程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数值逼近课程设计报告080710205邱明敏作业一多项式插值的Runge现象对于Runge函数f(x)=,在[-1,1]上作等距节点插值,分别取n=4,n=8,n=12,编出程序,画出此插值的图像。程序代码(matlab实现):lagrange.mfunctiony=lagrange(x0,y0,x)ii=1:length(x0);y=zeros(size(x));fori=iiij=find(ii~=i);y1=1;forj=1:length(ij),y1=y1.*(x-x0(ij(j)));endy=y+y1*y0(i)/prod(x0(i)-x0(ij));
2、endrunge.mfunctionrunge(m1,m2,m3)x1=-1+2*[0:m1]/m1;y1=1./(1+25*x1.^2);x=-1:0.01:1;y4=lagrange(x1,y1,x);x2=-1+2*[0:m2]/m2;y2=1./(1+25*x2.^2);x=-1:0.01:1;y5=lagrange(x2,y2,x);x3=-1+2*[0:m3]/m3;y3=1./(1+25*x3.^2);x=-1:0.01:1;y6=lagrange(x3,y3,x);x=-1:0.01:1;y=1./(1+25*x.^2);plot(x,y,'k-'
3、,x,y4,'r--',x,y5,'b-.',x,y6,'m:')legend('原函数','n=4','n=8','n=12')三、运行结果(运行过程):输入runge(4,8,12),可得插值图像:作业二Remez算法求函数f(x)=在[-1,1]上的二次多项式逼近。参考文献:数值分析算法描述与习题解答(徐士良著)二、程序代码(C语言实现):#include#includedoubleremezf(doublex){doubley;y=exp(x);return(y);}voidremez(doublea,doubleb,do
4、ublep[],intn,doubleeps){inti,j,k,m;doublex[21],g[21],d,t,u,s,xx,x0,h,yy;if(n>20)n=20;m=n+1;d=1.0e+35;for(k=0;k<=n;k++){t=cos((n-k)*3.1415926/(1.0*n));x[k]=(b+a+(b-a)*t)/2.0;}while(1==1){u=1.0;for(i=0;i<=m-1;i++){p[i]=remezf(x[i]);g[i]=-u;u=-u;}for(j=0;j<=n-1;j++){k=m;s=p[k-1];xx=g[k-1
5、];for(i=j;i<=n-1;i++){t=p[n-i+j-1];x0=g[n-i+j-1];p[k-1]=(s-t)/(x[k-1]-x[m-i-2]);g[k-1]=(xx-x0)/(x[k-1]-x[m-i-2]);k=n-i+j;s=t;xx=x0;}}u=-p[m-1]/g[m-1];for(i=0;i<=m-1;i++)p[i]=p[i]+g[i]*u;for(j=1;j<=n-1;j++){k=n-j;h=x[k-1];s=p[k-1];for(i=m-j;i<=n;i++){t=p[i-1];p[k-1]=s-h*t;s=t;k=i;}}p[m
6、-1]=fabs(u);u=p[m-1];if(fabs(u-d)<=eps)return;d=u;h=0.1*(b-a)/(1.0*n);xx=a;x0=a;while(x0<=b){s=remezf(x0);t=p[n-1];for(i=n-2;i>=0;i--)t=t*x0+p[i];s=fabs(s-t);if(s>u){u=s;xx=x0;}x0=x0+h;}s=remezf(xx);t=p[n-1];for(i=n-2;i>=0;i--)t=t*xx+p[i];yy=s-t;i=1;j=n+1;while((j-i)!=1){k=(i+j)/2;if(
7、xx=0;k--)t=t*x[0]+p[k];s=s-t;if(s*yy>0.0)x[0]=xx;else{for(k=n-1;k>=0;k--)x[k+1]=x[k];x[0]=xx;}}else{if(xx>x[n]){s=remezf(x[n]);t=p[n-1];for(k=n-2;k>=0;k--)t=t*x[n]+p[k];s=s-t;if(s*yy>0.0)x[n]=xx;else{for(k=0;k<=n-1;k
8、++)x[