嵌套正交的自适应容差

计算科学 数值分析 正交 误差估计
2021-11-29 10:28:16

我正在通过求积进行嵌套积分。举一个明确的例子,让我们说:

02dx[x+0xdy2y]

如此有效地我将从 0 整合到 2 (尽管显然我的实际问题不能像这样分析解决)。它在代码中实现,如下所示:x+x2

inner(x) = quad(y->2*y, 0, x, tolerance=t_inner)
quad(x + inner(x), 0, 2, tolerance=t_outer)

编辑:另请注意,在此示例中仅作为内部积分的限制出现,但我的实际问题也出现在被积函数中。一般来说,我只是说内部调用以某种方式依赖于xquadx

这个例子的要点是,对于小,第一项大于第二项,而对于较大的,第二项(内部积分)占主导地位。xx

这表明我可以通过较小t_inner误差容限 ( 然后,当这个内部正交真的很重要时,当我达到大xxt_innerx

我的问题是,是否有一些通用的方法来找出做这种事情的最佳方法?有什么方法可以让我选择我的“全局”容差,t_outert_inner根据自动选择?x

2个回答

如果积分中的两项具有显着不同的行为,则更好的方法可能是将积分分成两个单独的积分。这样,您可以分别为每个被积函数选择参数。

我还没有完全考虑到这一点,但似乎 t_inner 应该随着内积分对 x 的导数而变化。例如,假设我们有一个函数 t_inner = A*(B - d(2y)/dx)。您可以通过在积分限制处定义边界条件或将 t_outer = t_inner 设置为 x 的值(其中 x = inner(x))来选择 A 和 B 的值。直观地说,您似乎不需要 A 和 B(A=1 或 B=0),但我不确定哪个是正确的。

在任何情况下,当您迭代 x 时,您可以通过查看上一次迭代中 inner(x) 的数值变化来为每个 x 计算一个新的 t_inner。只要您的 x 间距相对于 inner(x) 相当平滑,这似乎应该有效。