我在使用quad2d方法来进行一个比较复杂的数值积分的时候,代码没有问题,但是matlab会给出警告:Warning: “Reached the maximum number of function evaluations (2000). The result fails the global error test. ”
在网上查了好多资料,也没有得到解决。
后来在看官网解释:The MaxFunEvals parameter limits the number of vectorized calls to fun. The default is 2000.
也就是说quad2d函数向量化调用的次数最多为2000,这个默认值为2000.
然后又在一篇帖子里面看到了quad2d一个的表达式(可能是类似于下面的式子,原帖不知道是哪一篇):
fun = @(x,y)abs(x.^2 + y.^2 - 0.25);
c = @(x)-sqrt(1 - x.^2);
d = @(x)sqrt(1 - x.^2);
quad2d(fun,-1,1,c,d,'AbsTol',1e-8,'MaxFunEvals',2000
于是,我就想试试看能不能把这个默认的2000改成4000或其他值。
然后我把自己的代码改成类似于以下的表达式:quad2d(fun,-1,1,c,d,'AbsTol',1e-8,'MaxFunEvals',4000.
结果可以运行通过,并且得到了解。
对于这一块,需要说明的是,鉴于默认值为2000,个人推荐按照2000递增的规律往上加,这个”MaxFunEvals“的值越大,
计算所需要的时间越长,同时能够解决的积分也越多。所以有时候适当提高这个值,有助于积分的求解。但是如果这个值
太大,则求解时间代价太大。至于精度是不是越高呢,应该不是的。
精度由”AbsTol“的值来控制。默认值为1e-5.可以调为
1e-6或1e-4.同样的,这个地方的值越小,精度越高,但是求解代价越大。
”AbsTol“的值应该根据自己所研究问题的尺度来决定。
就说这么多,希望对大家有帮助。
|