matlab怎么输⼊积分公式,在matlab下⽤梯形法求函数的积分函数是⽹上看到的,加上了⼀点我⾃⼰的理解
%⽤来就数值积分
%fx是由syms定义的函数表达式
function Trapezia(a,b,fx,E,Nfprintf('\n***********start*************\n');
h=(b-a)/2;
a=a+E/10;%⽤来减少出现除数为零的情况
%⽐如对含有1/x的函数积分且积分区间从0开始
%在梯形公式及Simpson公式算法中必然出现除数为零的情况
%当然我们可以在这之前就对被积函数做⼀定变形处理 ⽐如分部积分将分母移⾛
%不过我更愿意采⽤更简单的做法 将积分下限加⼀个⾮常⼩的数 使之不等于零
%这种处理⽅法对于精度要求⼏乎没有影响
matlab定义函数表达式
%当然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);%subs是替换fx中的变量
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
再控制窗⼝输⼊⼀下命令得到的结果为:
Trapezia(0,pi,'sin(x)',eps,7)
***********start*************
k=1 h=0.785398 I=1.570796
k=2 h=0.392699 I=1.896119
k=3 h=0.196350 I=1.974232
k=4 h=0.098175 I=1.993570
k=5 h=0.049087 I=1.998393
k=6 h=0.024544 I=1.999598
k=7 h=0.012272 I=1.999900
***********end*************
可以看出这个函数能都根据要就精确度E来计算结果,但是函数不断的重复运算使运算时间⽐较长。