数值正交中的公差 - MATLAB
Tolerances in Numerical quadrature - MATLAB
在MATLAB中进行数值求积时abtol
和reltol
有什么区别?
我有一个三重积分,它应该生成一个介于 0 和 1 之间的数字,我想知道我的应用程序的最佳公差是多少?
关于减少 integral3
执行时间的任何其他想法。
还有谁知道 integral3
或 quadgk
哪个更快?
执行积分时,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-Kronrod7-15对(相同quadgk
使用的第 7 个 order/15-th 顺序集。
对于 integral2
/integral3
函数与平铺方法,低高解决方案是 Gauss-Kronrod 3-7 对(我从未使用过这个选项,所以我不确定它是如何与其他人相比)。
由于所有这些方法都归结为 Gauss-Kronrod 求积法则,我想说坚持使用 integral3
并让它根据需要进行自适应优化是最好的方法。
在MATLAB中进行数值求积时abtol
和reltol
有什么区别?
我有一个三重积分,它应该生成一个介于 0 和 1 之间的数字,我想知道我的应用程序的最佳公差是多少?
关于减少 integral3
执行时间的任何其他想法。
还有谁知道 integral3
或 quadgk
哪个更快?
执行积分时,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-Kronrod7-15对(相同quadgk
使用的第 7 个 order/15-th 顺序集。
对于 integral2
/integral3
函数与平铺方法,低高解决方案是 Gauss-Kronrod 3-7 对(我从未使用过这个选项,所以我不确定它是如何与其他人相比)。
由于所有这些方法都归结为 Gauss-Kronrod 求积法则,我想说坚持使用 integral3
并让它根据需要进行自适应优化是最好的方法。