
import sys
import stdio
EPSILON = 1e-15
# 명령줄에서 값 입력
c = float(sys.argv[1])
# 초기 추측값 (아무 값이나 가능하지만 보통 1.0으로 시작)
x = 1.0
# 뉴턴 반복
while True:
fx = x**3 - c # f(x)
fpx = 3 * x**2 # f'(x)
new_x = x - fx / fpx # 뉴턴 공식
# 충분히 가까워지면 종료
if abs(new_x - x) < EPSILON:
break
x = new_x
x1 = round(new_x,3)
stdio.writeln("근사값: " + str(new_x))
stdio.writeln("근사값: " + str(x1))
뉴턴 방법을 통해서 어떤 함수에 대한 f(x) = 0에 대한 x값을 근사적으로 구해낼 수 있다.
다만, 뉴턴 방법도 깔끔하게 해결되지 않는 경우가 있다 함수가 매끄럽게(미분 가능) 생겼고 해 근처에서 기울기가 0이 아니고 시작값을 해 근처에서 잡으면 매우 빠르게 구하고자 하는 x값에 수렴하다. 아래의 예시를 살펴보자 아래 방정식의 경우 해를 깔끔하게 정리할 수가 없다. 그러나 뉴턴 방법을 사용하면 3~4번 반복만으로 거의 정확한 해를 구해준다.


따라서 뉴턴 공식에 따라 x_new의 값은 다음과 같다.

import math
x = 1.0
EPSILON = 1e-15
while True:
fx = math.cos(x) - x
fpx = -math.sin(x) - 1
new_x = x - fx / fpx
if abs(new_x - x) < EPSILON:
break
x = new_x
print(new_x)
