如何在牛顿方法中找到 x0

How can I find x0 in Newton's method

提问人:Kerem Candangil 提问时间:11/7/2021 最后编辑:Thomas KlägerKerem Candangil 更新时间:11/7/2021 访问量:247

问:

牛顿法

x1 = x0 - (f(x0)/f'(x0))
x2 = x1 - (f(x1)/f'(x1))
.
.
.
xn = xn-1 - (f(xn-1)/f'(xn-1))

此处 x0 显示初始根预测。f'(x) 表示 f(x) 函数的导数。 程序将从用户那里获取值 a、b、c、n、x0。 该程序将找到 axx + b*x + c = 0 方程的根。 程序将打印 xn 值。

我将 a、b、c 和 x0 定义为双精度数据类型。我将 n 的值定义为 int 数据类型。如何定义与牛顿方法相关的 for 循环或 while 循环?

在这里,我通过 Scanner 类从用户那里获取值:

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in); 
     System.out.print("a = "); 
     double a = sc.nextDouble(); 
     System.out.print("b = "); 
     double b = sc.nextDouble(); 
     System.out.print("c = "); 
     double c = sc.nextDouble(); 
     System.out.print("n = "); 
     int n = sc.nextInt(); 
     System.out.print("x0 = "); 
     double x0 = sc.nextInt(); 
}

然后,我将方法定义为函数和 derivativeOfFunction 方法。在 main 方法中,我如何调用函数,或者我需要在 main 方法中创建 for 或 while 循环?我能做些什么?

public static double function(double a, double b, double c, double x) { 
    return (a * Math.pow(x, 2)) + (b * x) + c; 
} 
public static double derivativeOfFunction(double a, double b, double x) { 
    return 2 * a * x + b; 
}
爪哇岛 for循环 while-循环 java.util.scanner 做而成

评论

0赞 ashu 11/7/2021
x0 是原始根可能所在位置附近的随机猜测。

答:

0赞 Thomas Kläger 11/7/2021 #1

牛顿公式是

x1 = x0 - (f(x0)/f'(x0))

插入函数时,会获得以下代码片段:

double x1 = x0 - function(a, b, c, x0) / derivativeOfFunction(a, b, x0);

你可以把它包装在一个for循环中:

for (int i = 1; i <= n; i++) {
    double x1 = x0 - function(a, b, c, x0) / derivativeOfFunction(a, b, x0);
}

但这将计算 x 值的 n 倍,并且在 for 循环终止后结果将丢失。

因此,您需要一个使用 x0 初始化并修改 n 次的变量:

double xi = 0;
for (int i = 1; i <= n; i++) {
    xi = xi - function(a, b, c, xi) / derivativeOfFunction(a, b, xi);
}
System.out.println("xn="+xi);

然后 xn 的值是 n 次迭代后的 习 值。

请注意,您甚至可以将 for 循环的主体缩短为

double xi = 0;
for (int i = 1; i <= n; i++) {
    xi -= function(a, b, c, xi) / derivativeOfFunction(a, b, xi);
}
System.out.println("xn="+xi);