数值分析实验之数值积分法(MATLAB代码)

时间:2024-03-08 18:58:58

 详细实验指导见上上一篇,此处只写内容啦

 

实验内容

     选择 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);

  运行结果: