xjzuo 发表于 2007-9-6 15:37

1.符号计算中,为了节约时间,可以利用"牛顿-莱布尼兹定理", 先求出积分后的函数,再计算积分值.---针对上面代码.

2.本问题用数值方法可能更好, 而且适用于一般情形. 按照本论坛一些帖子的做法,自己稍微思考一下,相信就能解决问题了.

至于加上外循环W的情形,基本上只是多一步而已,不需要什么新的技巧.

twomao 发表于 2007-9-6 22:08

原帖由 xjzuo 于 2007-9-6 15:37 发表 http://www.chinavib.com/forum/images/common/back.gif
1.符号计算中,为了节约时间,可以利用"牛顿-莱布尼兹定理", 先求出积分后的函数,再计算积分值.---针对上面代码.

2.本问题用数值方法可能更好, 而且适用于一般情形. 按照本论坛一些帖子的做法,自己稍微思考 ...

多谢版主指点。按照版主教的方法改了下代码,终于得出数了。:@D :victory:


clear ;clc;
syms x y z
f=(1-x.^2).^(1/2);
dfdx=diff(f);
aa=int(5e13*cosh(dfdx*z/1e6),z);
bb=int(5e13*sinh(dfdx*z/1e6),z);
A=subs(aa,z,(1e-7))-subs(aa,z,0)
B=subs(bb,z,(1e-7))-subs(bb,z,0)
C=(0.04*A-B*(A^2-B^2+0.04^2)^0.5)/(A^2-B^2)
D=inline(eval())
E=quadl(D,-(1e-4)+eps,1e-4)
F=0.016*E

结果:
E =
1.6000e-006

F =
2.5600e-008

再次感谢版主对我的无私帮助!:handshake

wlykw 发表于 2010-8-10 11:26

关于报错的原因

syms a b x y z t i;
>> t=@(Vd) quad(@(x) a*x+b*y+z,0.05,Vd);
>> i=t(0.2)
上面是我输入的程序,下面是报错,请问是什么意思啊,原因是什么
??? Function 'isfinite' is not defined for values of class 'sym'.

Error in ==> isfinite at 19
= builtin('isfinite', varargin{:});

Error in ==> quad at 66
if ~isfinite(y(1))
页: 1 [2]
查看完整版本: 如何用数值方法求以下积分