《数值逼近课程设计》由会员分享,可在线阅读,更多相关《数值逼近课程设计(7页珍藏版)》请在金锄头文库上搜索。
1、数值逼近课程设计报告080710205邱 明 敏作业一多项式插值的 Runge 现象对于 Runge 函数 f(x)= ,在-1,1上作等距节点插值,分别取11+252n=4,n=8,n=12,编出程序,画出此插值的图像。程序代码(matlab实现):lagrange.mfunction y=lagrange(x0,y0,x)ii=1:length(x0);y=zeros(size(x);for i=iiij=find(ii=i);y1=1;for j=1:length(ij),y1=y1.*(x-x0(ij(j);endy=y+y1*y0(i)/prod(x0(i)-x0(ij);endru
2、nge.mfunction runge(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-,x,y4,r-,x,y5,b-.,x,y6,m:)legen
3、d(原函数,n=4,n=8,n=12)三、运行结果(运行过程):输入 runge(4,8,12),可得插值图像:作业二Remez 算法求函数 f(x)= 在-1,1上的二次多项式逼近。参考文献:数值分析算法描述与习题解答(徐士良著)二、程序代码(C 语言实现):#include#includedouble remezf(double x)double y;y=exp(x);return(y);void remez(double a,double b,double p,int n,double eps) int i,j,k,m;double x21,g21,d,t,u,s,xx,x0,h,yy;
4、if(n20) n=20;m=n+1; d=1.0e+35;for(k=0;k=0;i-)t=t*x0+pi;s=fabs(s-t);if(su) u=s; xx=x0;x0=x0+h;s=remezf(xx);t=pn-1;for(i=n-2;i=0;i-)t=t*xx+pi;yy=s-t; i=1; j=n+1;while(j-i)!=1)k=(i+j)/2;if(xx=0;k-)t=t*x0+pk;s=s-t;if(s*yy0.0)x0=xx;else for(k=n-1; k=0; k-)xk+1=xk;x0=xx; elseif(xxxn)s=remezf(xn); t=pn-1;f
5、or(k=n-2;k=0;k-)t=t*xn+pk;s=s-t;if(s*yy0.0)xn=xx;elsefor(k=0;k=0;k-)t=t*xi+pk;s=s-t;if(s*yy0.0) xi=xx;else xj=xx;void main() double a,b,eps,p4;a=-1.0; b=1.0; eps=1.0e-10;remez(a,b,p,3,eps);printf(a0=%en,p0);printf(a1=%en,p1);printf(a2=%en,p2);printf(n);printf(MAX(p-f)=%en,p3);printf(n);三、运行结果及说明: 其中
6、 a0,a1,a2 分别为二次多项式零次,一次,二次的系数。作业三复化公式用复化公式计算积分 。10dxe程序代码(C+实现):#include#include#include#includedouble f(double x) /被积分函数 f(x)return exp(x);int fun(int n)if(n=0)if(n=0)return 1;else return 2*fun(n-1);else exit(0);double T(int n) /复化梯形公式double a=0,b=1,sum=0,h=(b-a)/n;long i;for(i=1;in;i+)sum+=f(a+i*h
7、);sum+=(f(a)+f(b)/2;return (h*sum);double S(int n) /复化 Simpson 公式double Sn;Sn=(4*T(2*n)-T(n)/3;return (Sn);double C(int n) /复化 Cotes 公式double Cn;Cn=(16*S(2*n)-S(n)/15;return (Cn);void main()int i;cout1 复化梯形公式,2 复化Simpson 公式,3 复化 Cotes 公式:n ;for(i=1;i=10;i+)coutfun(i) ;coutsetiosflags(ios:showpoint)setprecision(16);coutT(fun(i) S(fun(i) C(fun(i)endl;三、运行结果及说明: