본문 바로가기

(비정기) Mr.K's Post/Weekly paper

R.A.M. #1. 무리수 √2의 값을 구해보자! : Stage 4

부제(?) : 글쓰는건 목요일에 시작했다는 -_-;


안녕하십니까 많이 늦었습니다//

원래 저녁먹고 한숨 잤다가 깨서 포스트를 미루는 공지를 썼었는데

잠이 다 깨고 나니 오늘 안에도 쓸 수 있을 것 같아(& 댓글 달린것도 없어서) 올렸던 공지를 내렸습니다


..만;

결국 자정을 넘기고 마네요 -_-;



Bisection Method(RAM 1-1)에서
Dlbo군이 댓글로 Newton's Method(이하 뉴턴메소드)를 언급해서 그것에 대해 쓸까 했지만


그건 도함수가 필요하니 환타군이 쓰기엔 아직 좀 무리가 있을 수 있지요;
또, 도함수를 쉽게 구할 수 없는 함수도 많습니다 -_-;



그리고 뉴턴메소드의 경우, 함수가 잘생겼다면 상관없지만
함수가 못생겼다면, 초기값(x0)을 실근의 추정값에서 멀리 잡을수록 발산할 확률이 높습니다 -_-;

그래서 나온 방법인지는 잘 모르겠는데,
최근 수업시간에 배운 Secant Method를 소개해볼까 합니다



뉴턴메소드는 주어진 초기값(x0)에 대해 다음 근사값(xn)을 계산하기 위해
위 그림에서 보시는 것 처럼 f'(x(n-1))이 필요합니다

그런데 이 f'(x(n-1))의 정의는 다음과 같으므로, 정의부분에서 '극한'만 떼어낸 근사값을 생각하는겁니다


저 근사값이 작은 오차를 가지기 위해서는 x가 x(n-1)에 가까울 수록 좋은데,
우리가 가지고 있는 정보는 x0, x1, …, x(n-2), x(n-1)이므로

저 x에 x(n-2)를 대입한 값을 최종 근사값으로 생각합니다

그러고나서 이 최종 근사값을 f'(x(n-1))에 대입하기만 해주면, 우리는 다음과 같은 Secant Method를 얻어낼 수 있습니다




이 때, 두 초기값 x0와 x1은 함수의 정의역 안에 있기만 하면

min(x0, x1) < 실근의 추정값 < max(x0, x1)을 만족한다는 조건 하에 아무렇게나 잡아도 되는 것 같습니다

따로 도함수를 구할 필요도 없으니 (식이 좀 복잡할 수 있지만) 적용하는 데도 큰 무리가 없습니다



위 코드에서 secantMethod함수 내의 terms라는 변수는 '최대시행회수'를 나타냅니다



이제 Secant Method를 사용해서 √2를 구하는 과정을 그래프로 보여드리고 포스팅을 마치도록 하겠습니다//
아마 다음주에는 다른 주제를 가지고 포스팅할 것 같지만 그게 뭐가 될지는 저도 잘.. -_-;


먼저, f(x) = x² - 2 라 하고 시작합니다

x0와 x1은 제 임의로 x0 = 2, x1 = 1이라 하였습니다

위 그래프에서 파란색 *가 실근(√2)입니다

주어진 공식에 의해 x2를 구해보면 4/3, 즉 1.3333…이 나옵니다
실제 √2와 약 0.08088정도 차이납니다

주어진 공식에 의해 x3을 구해보면 10/7, 즉 1.4286…이 나옵니다
실제 √2와 약 0.01436정도 차이납니다

주어진 공식에 의해 x4를 구해보면 41/29, 즉 1.4138…이 나옵니다
실제 √2와 약 0.00042정도 차이납니다

(포스팅 소요시간 : 약 60분)