본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

비선형 방정식(Nonlinear Equation)은 미지수가 일차식으로만 결합되지 않은 방정식으로, 다항식·지수·로그·삼각함수 등이 섞여 해를 공식으로 바로 구하기 어려워 반복 계산으로 근사해(수치해)를 구하는 일이 많은 방정식이다.

선형 방정식은 가우스 소거법 같은 정해진 절차로 해를 정확히 구할 수 있다. 반면 x5 - x - 1 = 0, ex = 3x, cos x = x 처럼 비선형인 방정식은 대부분 해를 닫힌 식으로 쓸 수 없다. 이때는 f(x) = 0 꼴로 바꾼 뒤, 근 근처의 값에서 출발해 규칙에 따라 값을 고쳐 나가며 근에 다가가는 수치해법(근 찾기, root finding)을 쓴다. 회로 해석, 공정 시뮬레이션, 기계 학습의 최적화, 금융의 내부수익률 계산처럼 공학 계산의 상당 부분이 이 문제로 귀결된다.

수치해는 참값 대신 허용 오차 안에 들어온 근삿값이다. 반복할 때마다 x0, x1, x2, ... 을 만들고 다음 중 하나가 만족되면 멈춘다.

  • |xn+1 - xn| < ε (근삿값이 더 이상 거의 바뀌지 않는다)
  • |f(xn)| < ε (함숫값이 0에 충분히 가깝다)
  • 최대 반복 횟수에 도달한다(발산·진동 대비)

수치해법은 크게 두 갈래다.

구분 구간법(Bracketing method) 개방법(Open method)
출발 부호가 다른 두 점 [a, b] 로 근을 가둔다 근 근처의 한 점(또는 두 점)에서 출발한다
수렴 항상 수렴한다(f 가 연속이고 f(a)·f(b) < 0 이면) 출발점이 나쁘면 발산할 수 있다
속도 느리다 빠르다
예 이분법(Bisection), 가위치법(False position) 뉴턴-랩슨 방법, 할선법(Secant), 고정점 반복법

이분법과 뉴턴-랩슨 방법 비교

편집 원본 편집
구분 이분법 뉴턴-랩슨 방법
원리 근이 있는 구간을 반으로 나누고 부호가 바뀌는 쪽 절반을 남긴다(중간값 정리) 현재 점에서 접선을 그어 x 축과 만나는 점을 다음 근삿값으로 삼는다(테일러 1차 근사)
반복식 m = (a + b) / 2 xn+1 = xn - f(xn) / f'(xn)
필요한 것 f(a), f(b) 의 부호가 다른 구간 출발값 x0, 도함수 f'(x)
수렴 속도 1차(선형) - 반복마다 오차 구간이 절반 2차 - 근 가까이에서 맞는 자릿수가 반복마다 약 두 배
수렴 보장 보장된다 보장되지 않는다. f'(x) ≈ 0 인 점, 나쁜 출발값, 중근에서 느려지거나 발산
반복 횟수 예측 n ≥ log2((b - a) / ε) 로 미리 안다 미리 알기 어렵다
계산량 반복마다 함숫값 1번 반복마다 함숫값 1번 + 도함수 1번

실무에서는 이분법으로 근 근처까지 안전하게 좁힌 뒤 뉴턴-랩슨 방법으로 빠르게 마무리하는 혼합 방식(Brent 방법 등)을 쓴다.

f(x) = x2 - 4, f'(x) = 2x 이고 참값은 2 다.

뉴턴-랩슨 방법 (x0 = 3)

편집 원본 편집

반복식은 xn+1 = xn - (xn2 - 4) / (2xn) = (xn + 4 / xn) / 2 이다.

n xn f(xn) f'(xn) xn+1 xn+1 - 2|
0 3 5 6 3 - 5/6 = 2.1666667 1.7 × 10-1
1 2.1666667 0.6944444 4.3333333 2.0064103 6.4 × 10-3
2 2.0064103 0.0256821 4.0128205 2.0000102 1.0 × 10-5
3 2.0000102 0.0000410 4.0000205 2.0000000 2.6 × 10-11

오차가 0.17 → 0.0064 → 0.00001 → 0.00000000003 으로, 한 번 반복할 때마다 앞 오차의 제곱 정도로 줄어든다(2차 수렴). 네 번 만에 소수점 아래 10자리까지 2 와 같아진다.

이분법 (구간 [0, 3])

편집 원본 편집

f(0) = -4 < 0, f(3) = 5 > 0 이므로 근이 [0, 3] 안에 있다.

반복 구간 [a, b] 중점 m f(m) 남길 구간
1 [0, 3] 1.5 -1.75 [1.5, 3]
2 [1.5, 3] 2.25 1.0625 [1.5, 2.25]
3 [1.5, 2.25] 1.875 -0.484 [1.875, 2.25]
4 [1.875, 2.25] 2.0625 0.254 [1.875, 2.0625]
5 [1.875, 2.0625] 1.96875 -0.124 [1.96875, 2.0625]

다섯 번 반복해도 오차가 약 0.03 이다. 오차를 10-6 아래로 줄이려면 log2(3 / 10-6) ≈ 21.5 이므로 22번 반복해야 한다.