公差标准 Brent 方法

sai*_*ddy 3 algorithm math root numerical-methods modelica

布伦特方法的停止条件是

if abs(m) <= tol or fb == 0.0 then    // root found (interval is small enough) 
    found := true;
Run Code Online (Sandbox Code Playgroud)

但是,如果abs(m)达到低于所述容差但 的值f(b)不接近零怎么办?这种情况会被认为是收敛失败还是收敛成功?我可以看到abs(m) < tolerance,即|b-a| < tolerance,但函数的值不等于零或任何接近的值。不是布伦特的方法的全部意义在于找到一个函数的根,使得f(b) == 0.0或低于某个容差?

|b-a| < tolerance即使函数的值不接近于零,即低于给定的容差,当实现收敛时是否总是这样?

Joh*_*man 6

如果r是根,那么您希望将r(不是f(r))逼近给定的容差范围内,这正是这里发生的情况。当然,此时 的图可能f几乎是垂直的,因此如果b是您的近似值f(b)不接近0。如果发生这种情况,您需要更小的容差。对于大多数应用程序来说,知道小数点后 6 位的根就足够了,但是如果您的应用程序涉及一个函数,其值会随着小数点第 7 位的变化而发生显着变化,您当然会遇到问题。这就是为什么在数值分析课程中,方法中误差的表达式涉及导数的界限。您需要某种平滑度假设才能获得合理的结果。

  • https://math.stackexchange.com/questions/3628219/brents-method-convergence-criteria (2认同)