【问题标题】:Tolerances in Numerical quadrature - MATLAB数值求积中的公差 - MATLAB
【发布时间】:2015-02-27 01:50:48
【问题描述】:

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

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

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

还有谁知道integral3quadgk 哪个更快?

【问题讨论】:

  • 这不是专门针对数值求积,但您可能会发现 this discussion at MatlabCentral 很有帮助。
  • 您是否尝试过在您的平台上针对您的特定应用程序对这两个选项进行基准测试?看来您也可以尝试比较 integral,因为您已经在使用 quadgk 进行三重积分。还有已弃用的triplequad
  • 这个问题与我昨天发布的另一个问题有关,您要求我对其进行编辑。我使用了积分 3,计算需要很长时间

标签: matlab numerical-methods


【解决方案1】:

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

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

【讨论】:

  • integralintegral2integral3 也更有可能在未来的 Matlab 版本中看到改进和性能优化。
  • @troyHaskin 你是否建议我使用integral3并将方法修改为被迭代?
  • 还有怎么让integral3做自适应细化?
  • @George 由于规则的高阶,我会进行迭代,但由于我缺乏经验,我不确定平铺方法是否平均更快或更准确。所有的方法都使用自适应细化、区间分裂来实现收敛。
  • 谢谢,例如,对于我的应用程序,我知道数字应该介于 0 和 1 之间,我应该将其用于我的三重积分、abstol 还是 reltol,以及您的建议好数字 1e-30?@TroyHaskin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2013-05-14
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多