False Position Method (가위치법 )는 비선형 방정식의 근을 구하는 수치해석 기법 중 하나로, 두 점 사이의 선형 보간(linear interpolation)을 사용하여 근을 점점 좁혀가는 방식입니다. **이분법(bisection method)**과 유사하지만, 중간점을 f(x)의 선형 보간으로 계산한다는 차이가 있습니다.


image.png


✅ 파이썬 코드 예제

def false_position(f, a, b, tol=1e-6, max_iter=100):
    if f(a) * f(b) >= 0:
        raise ValueError("f(a)와 f(b)는 서로 다른 부호여야 합니다.")

    for i in range(max_iter):
        # 근을 보간하여 계산
        c = (a * f(b) - b * f(a)) / (f(b) - f(a))
        fc = f(c)

        print(f"Iteration {i+1}: c = {c}, f(c) = {fc}")

        if abs(fc) < tol:
            print("허용 오차 기준에 도달")
            return c

        # 구간 업데이트
        if f(a) * fc < 0:
            b = c
        else:
            a = c

    print("최대 반복 횟수 도달")
    return c


✅ 사용 예제

import math

# 예: f(x) = x^3 - x - 2 의 근 찾기
def f(x):
    return x**3 - x - 2

root = false_position(f, 1, 2)
print("근:", root)


🔍 장점과 단점

장점 단점
이분법보다 빠르게 수렴 가능 수렴 속도가 느릴 수 있음 (한쪽 끝이 고정되면 개선 안 됨)
수렴 보장 (f(a)*f(b)<0 일 때) 극단적인 기울기에서는 매우 느릴 수 있음

다양한 함수에 대해 False Position Method를 적용해볼 수 있는 예제를 아래에 정리함. 각 함수는 실근을 가지도록 설정했고, False Position Method가 잘 작동하도록 적절한 구간도 함께 제공.


image.png


image.png

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.cos(x) - x  # 함수 정의

def false_position(f, a, b, tol=1e-6, max_iter=100):
    if f(a) * f(b) >= 0:
        raise ValueError("f(a)와 f(b)는 서로 다른 부호여야 합니다.")

    for i in range(max_iter):
        c = (a * f(b) - b * f(a)) / (f(b) - f(a))
        fc = f(c)
        print(f"Iteration {i+1}: c = {c:.6f}, f(c) = {fc:.6f}")

        if abs(fc) < tol:
            print("허용 오차 도달!")
            return c

        if f(a) * fc < 0:
            b = c
        else:
            a = c

    return c

root = false_position(f, 0, 1)
print("근:", root)