Algorithm
이분법(Bisection Method)
wooyeon06
2024. 12. 13. 14:10
이분법(Bisection Method)은 구간을 반씩 나누며 해를 찾아가는 방법입니다. 주어진 구간에서 함수의 값을 계산하여 구간을 절반으로 나누고, 함수값이 0에 가까운 지점을 찾는 방식으로 근을 찾아갑니다. 이 방법은 주로 연속 함수의 근을 구할 때 사용됩니다.
이분법을 이용한 함수 근 찾기
이분법을 사용할 때 중요한 점은 다음과 같습니다:
- 초기 구간을 설정해야 합니다. 이 구간에서 함수값이 부호가 달라야 합니다. (즉, 함수의 값이 한 구간에서 양수에서 음수로 변하거나 그 반대여야 합니다)
- 구간의 중간 값을 계산하여 해당 함수의 값을 구합니다.
- 함수값이 0에 가까워지면 그 값을 해로 사용하거나, 구간을 절반으로 나누어 반복합니다.

public class BisectionMethod {
// 함수 f(x) = x^2 - 4 (근을 구하고자 하는 함수)
public static double func(double x) {
return x * x - 4;
}
// 이분법을 이용한 근 구하기
public static double bisection(double a, double b, double tol) {
// 구간 [a, b]에서 함수값의 부호가 달라야 한다.
if (func(a) * func(b) >= 0) {
System.out.println("구간 [a, b]에서 함수값의 부호가 달라야 합니다.");
return Double.NaN;
}
double c = a;
while ((b - a) / 2 > tol) {
// 구간의 중간 값 계산
c = (a + b) / 2;
// 함수값 계산
if (func(c) == 0.0) {
break; // 정확히 0인 근을 찾으면 종료
}
// 함수값이 0에 가까워지면 종료
if (func(c) * func(a) < 0) {
b = c; // 근이 왼쪽 구간에 있을 때
} else {
a = c; // 근이 오른쪽 구간에 있을 때
}
}
return c; // 근 반환
}
public static void main(String[] args) {
double a = 0; // 구간 시작
double b = 3; // 구간 끝
double tolerance = 0.0001; // 허용 오차
double root = bisection(a, b, tolerance);
if (!Double.isNaN(root)) {
System.out.println("구간 [" + a + ", " + b + "]에서 찾은 근은: " + root);
}
}
}
https://blog.naver.com/mykepzzang/220073289630?photoView=0