public static void main(String[] args) {
double a = 0.0; // Левая граница
double b = 3.0; // Правая граница
double eps = 0.0001; // Точность
double root = findRoot(a, b, eps);
System.out.printf("Найденный корень: %.4f%n", root);
}
public class BisectionMethod {
// Математическая функция f(x), корень которой мы ищем
public static double f(double x) {
return x * x - 4; // Корень x = 2
}
// Метод половинного деления
public static double findRoot(double a, double b, double eps) {
// Проверяем условие существования корня на отрезке
if (f(a) * f(b) >= 0) {
throw new IllegalArgumentException("Функция должна иметь разные знаки на концах отрезка [a, b]");
}
double c = a;
while ((b - a) / 2 > eps) {
c = (a + b) / 2; // Находим середину отрезка
// Если попали точно в корень
if (f(c) == 0.0) {
break;
}
// Меняем границы отрезка
if (f(a) * f(c) < 0) {
b = c; // Корень находится в левой половине
} else {
a = c; // Корень находится в правой половине
}
}
return (a + b) / 2;
}
}