如何在牛顿法中找到 x0
How can I find x0 in Newton's method
牛顿法
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循环?
这里我通过扫描仪从用户那里获取值class:
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;
}
牛顿公式是
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);
}
但这会计算 x1 的 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次迭代后xi的值
请注意,您甚至可以将 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);
牛顿法
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循环?
这里我通过扫描仪从用户那里获取值class:
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;
}
牛顿公式是
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);
}
但这会计算 x1 的 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次迭代后xi的值
请注意,您甚至可以将 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);