数值求积公差 - MATLAB

时间:2015-02-27 01:50:48

标签: matlab numerical-methods

执行数值求积时,MATLAB中abtolreltol之间有什么区别?

我有一个三重积分,应该生成0到1之间的数字,我想知道什么是我的应用程序的最佳容差?

关于减少integral3执行时间的任何其他想法。

也有人知道integral3quadgk是否更快?

1 个答案:

答案 0 :(得分:2)

执行集成时,MATLAB(或大多数其他集成软件)计算低阶解qLow和高阶解qHigh

有许多不同的计算真实错误的方法(即,qLowqHigh与实际解决方案qTrue的距离有多远) ,但MATLAB只计算绝对误差作为高阶和低阶积分解决方案之间的差异:

errAbs = abs(qLow - qHigh).

如果积分确实是一个很大的值,那么这种差异在绝对意义上可能很大,但不是相对意义上的差异。例如,errAbs可能是1E3,但qTrue1E12;在这种情况下,可以说该方法相对收敛,因为已达到至少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并让它根据需要进行自适应细化是最佳方法。