用简单迭代法求解一元非线性方程,要求能输入系数和误差,端点同号也可继续二分法。Java语言
时间: 2024-11-25 18:14:29 浏览: 13
【数学知识】非线性方程求解的二分法以及牛顿迭代法
在Java中,我们可以使用一种称为牛顿迭代法(也称牛顿-拉弗森方法)来求解一元非线性方程。这种方法适用于函数在根附近可导的情况。以下是简单的迭代步骤:
```java
import java.util.Scanner;
public class NewtonRaphsonMethod {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 输入方程的系数和初始近似值
System.out.println("请输入方程 a*x^2 + b*x + c = 0 的系数:");
double a = input.nextDouble();
double b = input.nextDouble();
double c = input.nextDouble();
// 检查是否可以进行二分法(即a和c同号)
if (Math.signum(a) * Math.signum(c) <= 0) {
System.out.println("错误:a和c的乘积应为正数,才能进行二分法。");
} else {
double guess = 0; // 初始猜测
double epsilon = 0.0001; // 容许的精度
while (true) {
double nextGuess = guess - f(guess, a, b, c) / fPrime(guess, a, b); // 函数f及其导数f'
// 如果新猜测与旧猜测相近,达到精度则停止迭代
if (Math.abs(nextGuess - guess) < epsilon) {
break;
}
guess = nextGuess;
}
// 输出结果
System.out.printf("方程的根近似为: %.6f\n", guess);
}
input.close();
}
private static double f(double x, double a, double b, double c) {
return a * x * x + b * x + c;
}
private static double fPrime(double x, double a, double b) {
return 2 * a * x + b; // 对f的一阶导数
}
}
```
阅读全文