gpt4 book ai didi

java - 牛顿法在 Java 中的递归

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:17 25 4
gpt4 key购买 nike

我很好奇我有这段 Java 代码。我的问题是返回 1.0 * 递归调用的原因是什么?在代码的其他部分

我的第二个问题是,当我在代码的主要部分将 E 变量声明为 0.0000001 AND A 时,X 变量为 double ,我将 A 设为 0 并进入无限循环。我该如何解决这个问题?

public static double sqrtR(long x, double e, double a) {
if (Math.abs(a * a - x) <= e) {
return a;
} else {
a = (a * a + x) / (2 * a);
return 1.0 * (sqrtR(x, e, a));
}
}

最佳答案

当 a 等于 0 时,它会导致 f'(x) = 2a 变为 0,在这种情况下,您在此步骤中除以 0:

a = (a * a + x) / (2 * a);

当 f'(x) 变为 0 时,表示您处于最小值或最大值:http://en.wikipedia.org/wiki/Newton%27s_method

将值移动 1 可以根据等式起作用。在某些情况下,函数没有零,在这种情况下,即使您移动 1 牛顿法也可能将您推回到相同的最佳状态。在其他情况下,函数可能有许多不同的最优值,即使存在某些三角函数等解,牛顿法也很容易卡住。

在您的情况下,它应该可以工作,除非两种情况之一为真:

  1. 你的方程式没有零。
  2. 你的等式正好有一个零。

在情况 1 中,您将陷入最佳状态,因为没有零。在情况 2 中,零处于最佳状态,这将导致程序走向无穷大。

因此,您首先要检查此时的 f(x) 是否为零,因为您可能已经找到了答案。否则移到一边,只要步长不是太大,如果有一个,它应该找到零。

关于java - 牛顿法在 Java 中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30701162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com