← 返回论文解读

Improvements of the Modified Anderson-Björck (modAB) Root-Finding Algorithm

paper root-finding bracketing bisection Anderson-Björck NonlinearSolve.jl
Authors: Nedelcho Ganchovski, Oscar Smith, Christopher Rackauckas, Lachezar Tomov, Alexander Traykov
Source: Preprints.org, 27 March 2026 · DOI: 10.20944/preprints202603.2190.v1
Affiliations: Proektsoft (Bulgaria) · JuliaHub · MIT · New Bulgarian University

问题

一维求根(找 f(x)=0 的 x)看似简单,实际上所有方法都在速度和鲁棒性之间做取舍:

2022 年提出的 modAB(Modified Anderson-Björck)用一个线性度检测来决定何时从 bisection 切换到 Anderson-Björck 插值。初始版本表现不错,但有几个已知缺陷:偏差因子 k 固定为 0.25、bisection fallback 策略太保守、终止条件对平坦函数不可靠、benchmark 只有 21 个函数。

翻译

一个类比:自动挡和手动挡的切换

Bisection = 一档爬坡(慢但稳)

每一步把搜索区间砍一半。n 步后区间缩小 2n 倍。不需要了解函数形状——只要知道两端异号就行。

Anderson-Björck = 高档巡航(快但可能打滑)

用线性插值预测根的位置,然后修正固定端点。对近线性函数收敛极快,但对弯曲函数可能退化。

modAB = 自动变速箱

在每一步检测函数「有多直」(线性度)。接近直线→切换到 AB 高档;弯曲太多→降回 bisection 一档。关键在于何时换挡和换挡失败时如何回退。

本文的三个改进全部围绕「换挡策略」:(1) 偏差因子 k 根据端点对称性自适应 (k=r²);(2) bisection fallback 从固定步数改为实际性能对比;(3) 终止条件从步长检查改为区间宽度检查。

架构

三个改进

4.1 自适应偏差因子 k

原始版本 k = 0.25(固定值)。新版本引入对称因子 r:

$$r = 1 - \left|\frac{y_m}{y_2 - y_1}\right|, \quad k = r^2$$

4.2 自适应 Bisection Fallback

原始版本:AB 跑固定步数后无条件回退到 bisection。新版本:实时比较 AB 的实际区间缩小速度与 bisection 的理论速度——

$$W(t) > T(t), \quad T(t) = C \cdot \frac{W_0}{2^t}$$

C = 16(允许 4 步延迟),每步更新 Tt = Tt-1/2。如果 AB 比 bisection 收缩得慢,才回退。

4.3 新终止条件

原始版本:|xn - xn-1| < ε(步长检查)——对平坦函数失效(步长小但距根远)。新版本:

$$b_n - a_n < \varepsilon_{\text{abs}} + \varepsilon_{\text{rel}} \cdot |x_n|$$

区间宽度检查——不受函数形状影响,代价是可能多 1-2 步(等另一端也收缩)。

关键结果

92 函数 Benchmark

方法总评估数平均vs modAB²Best (#)Worst (#)
Bisection449848.92.50×1140
False position820089.14.56×744
Illinois297532.31.66×76
Anderson-Björck316234.41.76×457
ITP273229.71.52×151
Ridders225624.51.26×51
Brent297232.31.65×131
modAB¹ (2022)185720.21.03×310
modAB² (本文)179719.51.00×310

核心数据:

评价

⚖️ 一个扎实的增量改进——92 函数 benchmark 上一致优于所有经典方法且无最差表现。但核心贡献是工程改进(adaptive k, adaptive fallback, better termination),没有新的理论洞察。

亮点:92 函数 benchmark 是该领域最全面的(之前 modAB¹ 只有 21 个);Worst=0 的鲁棒性令人印象深刻;已集成到 NonlinearSolve.jl(Rackauckas 是共同作者)、ROOT.CERN 等主流库;代码完整附在 Appendix。

局限:只测了函数评估次数,没测挂钟时间(modAB 每步的 overhead 比 bisection 大);benchmark 全是一维标量函数,不涉及方程组;没有收敛阶的理论分析;k=r² 的二次关系是经验选择,没有理论论证。

博导审稿

🎓 「这篇我快速过了一遍。」

——一位带了 20 年数值计算方向研究生的博导

选题眼光
一维求根看起来是「已解决的问题」,但实际上 Brent (1973) 之后 50 年内几乎没有实质性改进——ITP (2021) 才打破了沉寂。modAB 试图在这条缝里挤出更多性能。选题不是原创性问题,而是实用工程改进。
方法成熟度
三个改进都是 engineering refinement,不是 algorithmic innovation。adaptive k = r² 没有理论依据(为什么二次而不是三次?);adaptive fallback threshold 的 C=16 也是经验选择。方法有效但缺乏深度——一个好的审稿人会问「你能证明收敛阶吗?」答案大概是不能。
实验诚意
很好。92 函数 benchmark 从 6 个独立来源收集,包括 SciML Benchmarks suite——这比大多数求根论文用的 5-20 个函数强得多。用函数评估数而非迭代次数作为 metric 是正确的(Ridders 每步 2 次评估)。代码完整公开(Appendix A)。唯一缺憾:没有 wall-clock 时间——modAB 每步的分支判断和对称因子计算有 overhead。
写作功力
写得简洁直接——12 页把问题、缺陷、改进、benchmark 全讲清楚了。Table 2 的 92 函数大表虽然占了 3 页但信息量极高。Section 3 对原始 modAB 缺陷的自我批评很诚实。不过 Section 4.1 的对称性论证偏 hand-wavy——「relationship between symmetry and convergence is rather quadratic than linear」需要更多支撑。
影响力预判
实际影响力可能超过学术引用量——因为代码已经集成到 NonlinearSolve.jl(Julia 生态标准求根库)和 ROOT.CERN(粒子物理标准分析框架)。每次有人在这些库中调用求根,用的就是 modAB。预计 3 年内 15-30 次引用,但代码使用量可能远超论文引用。
📋 Weak Accept
实验全面(92 函数 benchmark)、Worst=0 的鲁棒性令人印象深刻、代码已集成到主流库。但方法贡献是工程改进而非算法创新——没有收敛阶分析、adaptive k 的二次关系缺乏理论支撑。对于 Preprints.org 的定位(快速分享实用成果)完全合适。如果投到 ACM TOMS 或 Numerical Algorithms,需要补充理论分析。

一句话总结

通过自适应偏差因子(k=r²)、实时性能对比的 bisection fallback、和区间宽度终止条件,改进版 modAB 在 92 函数 benchmark 上以最低总评估数(1797)和零最差表现击败所有经典一维求根方法——代码已集成到 NonlinearSolve.jl 和 ROOT.CERN。