Brent's 和 Alefeld-Potra-Shi 在寻根方面的区别

计算科学 matlab 效率
2021-11-30 04:11:44

我需要找到非线性函数的(唯一)根f(x),xR. 作为记录,f(x)是概率密度减去常数的 CDF0<p<1(我正在反转 CDF;请参阅此问题)。pdf 定义为高斯乘以多项式的一维混合。f是分析性的,但计算起来相对昂贵,所以我想加快寻根算法。

到目前为止,我一直fzero在MATLAB中使用,它实现了Brent的方法。在这个论坛的几个地方(另见上面的问题)我看到推荐的 Alefeld-Potra-Shi 的方法,这让我觉得它是最先进的(我对寻根文献不是特别熟悉) .

Brent 方法和 Alefeld-Potra-Shi 方法之间的性能差异是什么,什么时候一种方法会比另一种更好?

如果 Alefeld-Potra-Shi 对我的问题可能更好,我可能会在 Alefeld-Potra-Shi 的 MATLAB 端口上工作,到目前为止我找不到(可能有一个 Octave 实现,这里有一个 Julia 实现)。

1个回答

Brent 方法的渐近收敛阶趋向于 1.618 和 1.689,其中 Alefeld-Potra-Shi 方法直接介于两者之间。Alefeld-Potra-Shi 方法的主要区别在于边界的紧密性,而 Brent 的方法在中间迭代期间可能无法给出。

总的来说,我不推荐 Alefeld-Potra-Shi 的方法用于您的目的。该方法旨在成为用于包围根的黑盒大锤。布伦特的方法在大多数情况下“差不多”。

对于可能满足您的目的的更简单的方法,Chandrupatla 的方法可能会引起您的兴趣。它与 Brent 的简单根方法具有相同的渐近性质,但由于使用二等分或插值的更“智能”算法,它具有初始收敛速度更快的趋势。