数值正交中的公差 - MATLAB

Tolerances in Numerical quadrature - MATLAB

在MATLAB中进行数值求积时abtolreltol有什么区别?

我有一个三重积分,它应该生成一个介于 0 和 1 之间的数字,我想知道我的应用程序的最佳公差是多少?

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

还有谁知道 integral3quadgk 哪个更快?

执行积分时,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-Kronrod7-15对(相同quadgk 使用的第 7 个 order/15-th 顺序集。 对于 integral2/integral3 函数与平铺方法,低高解决方案是 Gauss-Kronrod 3-7 对(我从未使用过这个选项,所以我不确定它是如何与其他人相比)。

由于所有这些方法都归结为 Gauss-Kronrod 求积法则,我想说坚持使用 integral3 并让它根据需要进行自适应优化是最好的方法。