执行数值求积时,MATLAB中abtol
和reltol
之间有什么区别?
我有一个三重积分,应该生成0到1之间的数字,我想知道什么是我的应用程序的最佳容差?
关于减少integral3
执行时间的任何其他想法。
也有人知道integral3
或quadgk
是否更快?
答案 0 :(得分:2)
执行集成时,MATLAB(或大多数其他集成软件)计算低阶解qLow
和高阶解qHigh
。
有许多不同的计算真实错误的方法(即,qLow
或qHigh
与实际解决方案qTrue
的距离有多远) ,但MATLAB只计算绝对误差作为高阶和低阶积分解决方案之间的差异:
errAbs = abs(qLow - qHigh).
如果积分确实是一个很大的值,那么这种差异在绝对意义上可能很大,但不是相对意义上的差异。例如,errAbs
可能是1E3
,但qTrue
是1E12
;在这种情况下,可以说该方法相对收敛,因为已达到至少8位精度。
因此MATLAB还会考虑相对错误:
errRel = abs(qLow - qHigh)/abs(qHigh).
您会注意到我将qHigh
视为qTrue
,因为这是我们的最佳估算值。
在给定的子区域上,如果误差估计值低于绝对极限或相对极限乘以当前积分估计值,则认为积分是收敛的。如果不是,则划分该区域,并重复计算。
对于使用迭代方法的integral
函数和integral2
/ integral3
函数,低 - 高解决方案是Gauss-Kronrod 7-15对(相同的7- quadgk
使用的顺序/第15顺序集。
对于使用平铺方法的integral2
/ integral3
函数,低 - 高解决方案是Gauss-Kronrod 3-7对(我从未使用过这个选项,所以我' m不确定它与其他人的比较。)
由于所有这些方法都归结为Gauss-Kronrod求积法则,我说坚持使用integral3
并让它根据需要进行自适应细化是最佳方法。