티스토리 뷰

반응형

뉴턴법


안녕하세요 Hun!입니다!!


오늘은 "뉴턴법(Netwon's Method)"에 대해서 알아보고 파이썬으로 표현하여 보겠습니다. 제가 뉴턴법을 소개하게된 이유는 요즘 "파이썬으로 배우는 수학적 프로그래밍(저자 : 일란M.스테이블리)"이란 책을 통해 수학과 파이썬에대해서 공부를 하고있는데 책에서 뉴턴법에 대한 내용이 간략하게 나와서입니다. 그 동안 "뉴턴의 운동법칙"은 알았지만 '뉴턴법'은 처음 듣는 말이여서 생소하였습니다. 찾아보니 뉴턴법은 뉴턴이 라이프니츠와 함께 미분의 창시자여서 그런지 미분과 관련된 간단한 내용이었습니다. 하지만 저에게는 생소한 말이기도 하고 수학공부를 하면서 프로그래밍에 처음 적용한 법칙이라 소개해 드릴려고합니다.


'뉴턴법'은 간단하게 설명하면 함수의 해를 찾아가는 과정이라고 말할 수 있습니다. 그 과정은 미분을 통해 구한 접선을 이용합니다. 자세한 과정은 아래와 같습니다.


x와 y변수로 이루어진 그래프에 다차함수인 f(x)가 있다고 가정합니다. 다차함수 f(x)의 x값 범위 중에서 임의로 선택하고 임의로 선택한 x를 x1이라고 합시다. 그리고 x1 값을 가지는 f(x1)에 접하는 접선을 구합니다. 이때 접선을 구하는 방법은 x1 값을 가지는 f(x1)을 x에 대해서 미분을 하면 기울기가 나오게 되는데 이 기울기를 가지는 접선 위에 x2와 0이 포함되어있다고 보고 x1과 f(x1)을 대입하면 간단히 구할 수가 있습니다. x2와 0은 접선이 x선과 만나게 되는 부분인 x, y변수를 의미합니다. 



그리고 f(x2)에 접하는 접선을 또 구하여 줍니다. 두 번째 접선을 접선2라고 하겠습니다. 접선2가 x선과 만나는 부분은 x3과 0이고 위와 동일하게 과정을 거치게 되어서 x4, x5을 구하면 점점 다차함수인 f(x)가 x선과 만나는 점인 해와 가까워지는 모습을 보이게됩니다. 위와 같은 과정들은 그래프로 표현하면 아래의 그래프 사진과 같습니다.



<출처 : 위키백과 | 저자 : Ralf Pfeifer>



위에서 설명한 것과 같이 x1, x2, x3, x4, x5가 점점 함수의 해에 근접해가는 모습입니다. 과정을 더 진행하면 x5을 넘어선 x값은 해에 더 가까이 위치할 것입니다. 하지만 뉴턴법은 초기에 임의로 선택하는 x값을 해와 충분히 가깝게 설정해야하고 접선의 기울기가 0에 근접하는 x값을 선택하면 안된다는 조건이 있습니다. 그래야 해에 수렴한다고 합니다. 물론 미분 가능한 함수여야 할 것입니다. 


그럼 이제는 파이썬으로 뉴턴법을 표현하여 보겠습니다. 파이썬 작업을 위한 개발환경은 스파이더(Spyder)를 활용하여 작성하였습니다. 파이썬으로 아래와 같이 뉴턴법을 함수로 만들어보았습니다. 다차함수는 이차함수로 설정하였습니다.





여기서 위의 코드를 보시면 매개변수가 'x_value', 'root', 'tolerance'로 3개인 것을 보실 수가 있습니다. 'x_value' 변수의 역할은 x변수를 의미하여 처음에는 초기에 임의로 설정한 x1 값을 넣으면됩니다. 'root' 변수는 다차함수의 해를 의미하고 'tolerance' 변수는 오차를 의미하는데 오차는 해와 x값사이의 오차를 의미합니다. 해와 x값을 뺀 값이 오차이하가 된다면 마지막 x값이 들어있는 'x_value'를 해와 동일하다고 보고 최종 'x_value'를 반환하게 되는 형태로 뉴턴법 알고리즘을 표현하였습니다. 


스파이더(Spyder) 에디터에 코드를 입력하였으면 파일을 저장하고 실행하여줍니다. 결과는 스파이더 우측 하단의 콘솔(IPython Console) 창에서 확인하면됩니다. 바로 아래와 같이 말입니다.



   



sqrt함수에 임의의 값을 매개변수인 'x_value', 'root', 'tolerance' 순으로 순차적으로 입력하시면됩니다. 저는 '2.0, 0, 0.001'과 '1.0, 0, 0.001'을 입력하였는데 결과는 두 가지 경우가 같다라는 것을 확인할 수 있었습니다. 여러분들도 다양하게 값을 임의대로 입력하여 결과를 확인하시면 되겠습니다.


파이썬과 수학을 얼마 공부한지 안되어 미흡하지만 많은 분들께 도움이 되었으면 좋겠습니다. 이상으로 뉴턴법 파이썬으로 표현하기를 마치겠습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함