Brent方法的停止标准是
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
,但是函数的值不等于零,也不等于任何接近零的值。布伦特方法的全部要点不就是寻找函数的根,使得f(b) == 0.0
或低于一定的容差吗?
当函数的值不接近于零,即低于给定的容差时,是否始终存在|b-a| < tolerance
收敛的情况?
发布于 2020-04-16 02:52:49
如果r
是根,那么您希望将r
(而不是f(r)
)近似到给定的容差范围内,这正是这里所发生的情况。当然,也有可能f
的图形在这一点上几乎是垂直的,所以如果b
是您的近似值,那么f(b)
就不会接近0
。如果发生这种情况,您需要一个较小的容差。对于大多数应用程序来说,知道小数点后6位的根就足够了,但是如果您的应用程序涉及到一个函数,该函数的值可能会随着小数点后7位的变化而发生巨大变化,那么您肯定会遇到问题。这就是为什么在数值分析过程中,方法中误差的表达式涉及导数的界限。你需要一些平滑的假设才能得到合理的结果。
发布于 2020-04-16 04:00:12
Brent方法是一种括号方法,这意味着它在迭代过程中保持一个括号间隔,即两个函数值符号相反的点。由此可以得出结论:在长度为m
区间中有一个符号变化,因此,根据中值定理,存在一个距离不大于m
的接近b
的“精确”根。
不完全是“精确”,因为你正在计算一个数值函数。如果放大从明显为正到明显为负(或v.v)的分段上的间隔,则数值评估的实际图可能看起来相当模糊,就像扩展的威尔金森多项式,
来自example and plot using expanded W.-pol.。
在另一个极端,数值函数在放大下可能看起来不模糊,但然后它将是分段常数,并且可能没有值为零的点,
(1e-14
部分中的水平缩放)来自example and plot using factorized W.-pol.。
https://stackoverflow.com/questions/61235831
复制相似问题