Matlab中关于数值积分及符号积分的讨论

一、integral系列函数进行数值积分

代码如下:

​
R=1;Ba=0;a=1;x=a;
fun3=@(r,theta)(1-theta.*cot(theta))./sqrt(1-sin(theta).*(r./R).^2);
thetamin=@(r)asin(a./r);
Nx3=integral2(fun3,x,1,thetamin,pi/2);

结果如下:

警告: 非有限结果。积分未成功。可能具有奇异性。 
> In integral2Calc>integral2t (line 121)
  In integral2Calc (line 9)
  In integral2 (line 106)
  In Untitled112 (line 4) 

可以发现此时函数积分未果,Nx3的结果为NaN,而小编本次对二元函数fun3进行积分时,积分变量r和theta的积分区间长度均为0,也就是说x=1,thetamin=pi/2,那么相应的积分结果应该也是零,可是函数返回值为NaN,这显然是不对的,那么下面使用符号积分进行尝试。

二、int符号积分函数

代码如下:

R=1;a=1;
syms r theta
fun3=(1-theta.*cot(theta))./sqrt(1-sin(theta).*(r).^2);
thetamin=asin(1./r);
Nx3=int(int(fun3,r,[1 1]),theta,[thetamin pi/2]);

此时,可以得到正确的结果0,说明integral数值积分函数中的数值误差的存在导致了积分结果出错。

三、总结

integral在一般精度要求不是特别高的情况下可以使用,且运行速度较快;当积分要求数值精度较高时,建议采用符号积分的方式,配合vpa函数使用。

上一篇:PyThon3函数的使用


下一篇:一文搞懂Python中的核心概念:导入,模块,包