www.gusucode.com > 高等数学问题求解源码程序 > CH08/quad_inf.m

    function I=quad_inf(fun,a,b,tol,eps)
%QUAD_INF   无穷限反常积分的无穷区间逼近法
% I=QUAD_INF(FUN,A,B)  求函数FUN在区间[A,B]上的数值积分,A或B可以为无穷,下同
% I=QUAD_INF(FUN,A,B,TOL)  求函数FUN在区间[A,B]上的数值积分,容差为TOL
% I=QUAD_INF(FUN,A,B,TOL,EPS)  求无穷限反常积分,精度为EPS
%
% 输入参数:
%     ---FUN:被积函数
%     ---A,B:积分区间的端点,要求A<B
%     ---TOL:容差,缺省值为1e-6
%     ---EPS:精度要求,迭代终止准则,缺省值为1e-5
% 输出参数:
%     ---I:求得的积分值
%
% See also quadgk, quadl

if nargin<5 || isempty(eps)
    eps=1e-5;
end;
if nargin<4 || isempty(tol)
    tol=1e-6;
end;
N=2;I=0;T=1;
if isinf(a) && isinf(b)
    I=quad_inf(fun,-inf,0)+quad_inf(fun,0,inf);  % 递归调用
elseif isinf(b)
    while T>eps
        b=a+N;
        T=quadl(fun,a,b,tol);
        I=I+T;
        a=b; N=2*N;
    end
elseif isinf(a)
    while T>eps
        a=b-N;
        T=quadl(fun,a,b,tol);
        I=I+T;
        b=a; N=2*N;
    end
else
    I=quadl(fun,a,b,tol);
end
web -broswer http://www.ilovematlab.cn/forum-221-1.html