详细实验指导见上上一篇,此处只写内容啦
实验内容
选择 y=arctan(x) 在0-1上的积分
准确积分结果:
精确值(保留二十位有效数字)为
程序实现
• 复化梯形算法
function Tn=Tn(a,b,n) syms x h=(b-a)/n; sum=0; f(x)=atan(x); for k=1:n-1 sum=sum+f(a+k.*h); end Tn=(f(a)+2*sum+f(b))*h/2; end
运行结果:
• 复化simpson公式
%%复化simpson法 syms x a=0; %积分区间左端点 b=1; %积分区间右端点 n=50; h=(b-a)/n; f(x)=atan(x); g(x)=a+x*h; s1=0; for i=0:n-1 s1=s1+f(g(i+1/2)); end s2=0; for j=1:n-1 s2=s2+f(g(j)); end S=h/6*(f(a)+4*s1+2*s2+f(b)); fprintf(\'复化simpson法=%g\n\',S);
运行结果:
• 复化科特斯法
function Cn = Cn(a,b,n) format long syms x f(x)=atan(x); h = (b-a)/n; sum1 = 0; sum2 = 0; for i = 0:n-1 sum1 = sum1 + 32*f(a+(i+1/4).*h)+12*f(a+(i+1/2).*h)+32*f(a+(i+3/4).*h); end for j = 1:n-1 sum2 = sum2 + 14*f(a+j.*h); end Cn = h/90*(7*f(a)+sum1+sum2+7*f(b));
运行结果:
• 另复化科特斯法
syms x a=0; %积分区间左端点 b=1; %积分区间右端点 n=50; h=(b-a)/n; f(x)=atan(x); g(x)=a+x*h; c1=0; for i=0:n-1 c1=c1+h/90*(7/n*f(a)+32*f(g(i+1/4))+12*f(g(i+1/2))+32*f(g(i+3/4))+14*f(g(i))+7/n*f(b)); end C1=c1-h/90*14*f(g(0)); fprintf(\'复化柯特斯法=%g\n\',C1);
运行结果:
• 龙贝格公式
syms x a=0; %积分区间左端点 b=1; %积分区间右端点 n=50; h=(b-a)/n; h1=(b-a)/(2*n); f(x)=atan(x); g(x)=a+x*h; g1(x)=a+x*h1; c1=0; for i=0:n-1 c1=c1+h/90*(7/n*f(a)+32*f(g(i+1/4))+12*f(g(i+1/2))+32*f(g(i+3/4))+14*f(g(i))+7/n*f(b)); end C1=c1-h/90*14*f(g(0)); c2=0; for i=0:2*n-1 c2=c2+h1/90*(7/(2*n)*f(a)+32*f(g1(i+1/4))+12*f(g1(i+1/2))+32*f(g1(i+3/4))+14*f(g1(i))+7/(2*n)*f(b)); end C2=c2-h1/90*14*f(g1(0)); Rn=64/63*C2-1/63*C1; fprintf(\'龙贝格公式法=%g\n\',Rn);
运行结果: