一、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函数使用。