作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用牛顿拉夫森方法来查找 Java 中评估函数的根。我正在使用带有以下终止条件的 while 循环:
while(Math.abs(eval_x/deriv_x) > epsilon)
显然,如果差值大于 epsilon,则可能会产生无限循环。我应该用更大的值替换 epsilon 还是应该包含一个计数器,在达到特定的大值时打破 while 循环?
我想知道如何实现牛顿法的标准终止条件。
最佳答案
通常,对于牛顿法之类的方法,有许多终止条件:
迭代次数的上限。例程可能会“卡住”或发散,如果找不到根,则应该在一定的最大迭代次数后退出。
对x
变化的容忍度。这可以是相对的,也可以是绝对的。如果算法使 x 的变化低于某个值(例如 1e-6
),并且您尚未收敛,那么您可能会陷入静止点。
说到驻点,如果您的梯度(导数)低于某个容差,您应该终止,因为您可能最终会到达驻点,并且如果您正在执行一维情况,则除以零。
函数绝对值的容差。这是您想要接近零的程度的最终衡量标准。
请记住,如果您将函数值容差设置得太紧,牛顿方法可能永远不会产生足够小的 x
值变化,使您处于该容差范围内。因此,为什么您应该停止 dx - 当然还有最大迭代次数。
关于java - 牛顿拉夫逊无解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955053/
我选择了带有 graylog2 的 elasticsearch,这一周过得非常糟糕。我正在尝试使用 Python 对 ES 中的数据运行查询。 我试过关注客户。 ESClient - 非常奇怪的结果,
我是一名优秀的程序员,十分优秀!