查看文章
 
Trapezia 梯形数值积分
2007-12-14 13:33
%用来就数值积分
%fx是由syms定义的函数表达式
function Trapezia(a,b,fx,E,N)
fprintf('\n***********start*************\n');
h=(b-a)/2;
a=a+E/10;%用来减少出现除数为零的情况
               %比如对含有1/x的函数积分且积分区间从0开始
               %在梯形公式及Simpson公式算法中必然出现除数为零的情况
               %当然我们可以在这之前就对被积函数做一定变形处理 比如分部积分将分母移走
               %不过我更愿意采用更简单的做法 将积分下限加一个非常小的数 使之不等于零
               %这种处理方法对于精度要求几乎没有影响
               %当然who有更好的方法欢迎交流一下!
T0=h*(subs(fx,a)+subs(fx,b));
T=0;
for m=1:N
    F=0;
    for k=1:2^(m-1)
        F=F+subs(fx,a+(2*k-1)*h);
    end
    T=0.5*T0+h*F;
    if abs(det(T-T0))<3*E
        break;
    else
        h=h/2;
        T0=T;
    end
     fprintf('k=%d\th=%f\tI=%f\n',m,h,T);
end
fprintf('\n***********end*************\n');
end

类别:matlab程序夹||添加到搜藏 |分享到i贴吧|浏览(158)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu