function [q,step]=CombineTraprl(f,a,b,eps)
%被积函数 f, eps 精度
%积分区间左端点:a, 积分区间右端点:b
%积分结果 :q, step积分的子区间数
if(nargin==3), eps=1.0e-4; end
n=1; h=(b-a)/2; q1=0;
q2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;
while abs(q2-q1)>eps
n=n+1; h=(b-a)/n; q1=q2; q2=0;
for i=0:n-1 %第n次的复合梯形公式积分
x=a+h*i; %i=0 和n-1时,分别代表积分区间的左右端点
x1=x+h;
q2=q2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+subs(sym(f),findsym(sym(f)),x1));
end
end
q=q2; step=n;
%%%%以上为数值积分公式
如果我要求函数sin(x)*exp(-x)的积分, 应该调用CombineTraprl('sin(x)*exp(-x)',0,10)就可以
但是我请问如果,我调用M-file方式, 另做一个文件
function y=integ(x)
y=sin(x)*exp(-x);
然后调用CombineTraprl('integ',0,10)为什么就不行呢?
注:本人需要求得被积函数很复杂
findsym(sym(f)), 寻找f函数中的 符号变量,f为自定义函数,能不能写在M-file文件中,调用呢?
[ 本帖最后由 ChaChing 于 2010-6-23 23:03 编辑 ] |