integral

function q=myintegral(f,a,b,n,method)
% f 积分函数
%method 是求定积分采用哪种方法,我本次实验采用辛普森法
if nargin<5
    method=2;
end
%将a-b的区间分为n个结点,加上中点(a+b)/2,总共有n+1个结点
if nargin<4
    n=5;
end
% (b-a)/n 是步长,每块区间的长度 ,积分区间a到b
x=a:(b-a)/n:b;
g=@(t,a,b)t*(b-a)/2+(b+a)/2;
switch method
    case 1
        A=[1/2,1/2];
        xx=[g(-1,x(1:n),x(2:n+1));...
            g(1,x(1:n),x(2:n+1))];
        q=(b-a)/n*sum(A*f(xx));
%用辛普森公式近似定积分,求出的精度要比梯形公式要高
    case 2
       A=[1/6,2/3,1/6]; 
       x=a:(b-a)/n:b;
       xx=[g(-1,x(1:n),x(2:n+1));...
           g(0,x(1:n),x(2:n+1));...
           g(1,x(1:n),x(2:n+1))];
%定积分的值
       q=(b-a)/n*sum(A*f(xx));
    case 3
        A=[7/90,16/45,2/15,16/45,7/90]; 
        x=a:(b-a)/n:b;
        g=@(t,a,b)t*(b-a)/2+(b+a)/2;
        xx=[g(-1,x(1:n),x(2:n+1));...
           g(-1/2,x(1:n),x(2:n+1));...
           g(0,x(1:n),x(2:n+1));...
           g(1/2,x(1:n),x(2:n+1));...
           g(1,x(1:n),x(2:n+1))];
       q=(b-a)/n*sum(A*f(xx));
    case 5
        tol=10^(-n);
        N=n+1;
        h=(b-a)./2.^(0:N-1);
        T=zeros(N);
        T(1,1)=myintegral(f,a,b,1,1);
        for i=2:N
            T(i,1)=T(i-1,1)/2+h(i)*sum(f(a+(1:2:2^(i-1)-1)*h(i)));
            for j=2:i
                T(i,j)=(4^(j-1)*T(i,j-1)-T(i-1,j-1))/(4^(j-1)-1);
            end
            if abs(T(i,i)-T(i-1,i-1))<tol
                break
            end
        end
        q=T(i,i);  
end



猜你喜欢

转载自blog.csdn.net/weixin_48450741/article/details/112464778