布伦特方法的停止标准是
if abs(m) <= tol or fb == 0.0 then // root found (interval is small enough)
found := true;
但是,如果abs(m)
达到上述容差以下,但是f(b)
的值在接近零的位置为否,该怎么办?是否将这种情况视为融合失败或融合成功?我可以看到abs(m) < tolerance
,即|b-a| < tolerance
,但是函数的值不等于0或任何接近的值。布伦特方法的全部目的不是寻找函数的根使得f(b) == 0.0
或低于某个公差吗?
即使函数的值不接近零,即低于给定的公差,是否总是会出现|b-a| < tolerance
收敛的情况?
如果r
是根,那么您想将r
(而不是f(r)
)近似在给定的公差范围内,这正是此处发生的情况。此时f
的图形可能几乎是垂直的,并且如果b
为您的近似值,则f(b)
可能不会接近0
。如果发生这种情况,则需要较小的公差。对于大多数应用程序来说,知道小数点后六位的根是足够的,但是如果您的应用程序涉及一个函数,其值会随着小数点后第七位的变化而急剧变化,那么您当然会遇到问题。