找回密码
 注册
Simdroid-非首页
查看: 43|回复: 0

【心得】这样解决“maximum number of function evaluations (2000)

[复制链接]
发表于 2012-6-12 10:29:15 | 显示全部楼层 |阅读模式 来自 湖北武汉
    我在使用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“的值应该根据自己所研究问题的尺度来决定。

就说这么多,希望对大家有帮助。

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-5 22:27 , Processed in 0.030305 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表