반응형

제곱근의 값은 어떻게 구할까?[개평법, 바빌로니아법, 뉴턴-랩슨법]

 

0. 서론

제곱근도 숫자인가요?

네, 숫자이죠!

그렇다면 분수를 소수점으로 나타낼 수 있듯이, 제곱근(=무리수)도 소수점으로 표현할 수 있겠죠?

참고로 무리수는 순환하지 않는 무한소수로 알려져있습니다.

자, 그럼 우리가 흔히 알고 있는,

  • $ \sqrt{2} = 1.414 \cdots $
  • $ \sqrt{3} = 1.732 \cdots $
  • $ \sqrt{5} = 2.236 \cdots $

이런 값들은 어떻게 구하는 걸까요?

자, 오늘은 이 제곱근의 값을 직접 구하는 방법을 알아보겠습니다!

 

 

1. 제곱 범위로 찾기

제일 쉬운 방법이죠. 가령 $ \sqrt{2} $ 는 제곱하면 2이고, 이 수는 1보다는 크고 4보다는 작으니 다시 제곱근을 취하면 1보다는 크고 2보다는 작은 수 일 겁니다.

$ 1 < \sqrt{2} < 2 $

소수점 이하로 확장해볼까요?

1.1의 제곱은 1.21, 1.5의 제곱은 2.25이므로

$ 1.21 < 2 < 2.25 \rightarrow 1.1 < \sqrt{2} < 1.5 $

따라서 $ \sqrt{2} $는 1.1과 1.5 사이의 수가 되겠네요.. 이런 방식으로 점점 범위를 좁혀나가는 겁니다.

그러면 소수점 이하 자리수를 늘릴수록 더 정확한 근사값을 얻을 수 있겠죠?

 

장점은 정말 매우매우매우 직관적입니다. 교과서에서도 무리수의 값을 찾는 방법으로 바로 소개가 되죠.

더불어 제곱근의 확장이 용이합니다. 즉, 세제곱, 네제곱... 거듭해서 제곱을 해도 그에 해당하는 거듭제곱 값을 범위로 설정하면 되기 때문이죠.

 

그러나 단점은.. try&error방식으로 진행되다보니

  • 범위를 적극적으로 좁히면 error 즉 제곱근 값의 범위를 넘어갈 수 있는 가능성이 높아지고
  • 범위를 소극적으로 좁히면 try 즉 제곱근의 정확한 값으로의 수렴이 느려집니다.

 

 

2. 개평방법(開平方法) 혹은 개평법(開平法)

딱 봐도 한자가 출동한 게 보이시죠?

동아시아의 전통 학문인 산학(算學)에서 발전한 방법입니다.

동아시아에서는 어떤 수의 제곱을 '평방(平方)'이라고 하였고, 이 제곱을 풀어낸다(=제곱근)는 뜻에서 '열 개'자를 써서 개평방(開平方) 혹은 줄여서 개평(開平)이라고 불렀습니다.

그 유명한 중국의 산학책 '구장산술'에 실렸던 방법입니다.

 

방법은 간단합니다. 나눗셈과 비슷해요. 다만 근호 왼쪽의 수가 계속 변화하는 나눗셈이지요.

\begin{align}
& ㅤㅤ\! \textcolor{red}{1}.\,\textcolor{blue}{4} \ \textcolor{orange}{1} \ \textcolor{green}{4} \ \cdots 
\\
\textcolor{red}{1} ㅤㅤ & \ \, \sqrt{2ㅤㅤㅤㅤ\ }
\\
\underline{+\textcolor{red}{1} ㅤㅤ\! } & \underline{\ -\textcolor{red}{1}ㅤㅤㅤㅤ\ } ㅤ(1 = 1 \times 1)
\\
2 \textcolor{blue}{4} ㅤ\ & ㅤㅤ\! 1 \, 00
\\
\underline{+ \ \ \ \textcolor{blue}{4} \, ㅤ} & \underline{ㅤ\  -\textcolor{blue}{96}ㅤㅤ\ \ \ }ㅤ(96=24\times4) \\ 28 \textcolor{orange}{1} \ \ & ㅤㅤㅤ4 \, 00
\\
\underline{+ \ ㅤ\ \textcolor{orange}{1} \ \, } & \underline{ㅤ \! -\textcolor{orange}{2\, 81}ㅤ\ \ }ㅤ(281=281\times1)
\\  282 \textcolor{green}{4} & ㅤㅤㅤ\,119 \, 00
\\
\underline{+ㅤㅤ\textcolor{green}{4}\!} & \underline{ㅤ -\textcolor{green}{112 \, 96}\ } \,ㅤ(11296=2824\times4)
\\
2828 &ㅤㅤㅤㅤ\  6\,04
\\
& ㅤ\ \ \, \vdots
\end{align}

1) 자, 여기서 보면 나눗셈처럼 시작을 합니다.

2를 제곱하여 나눌 수 있는 가장 큰 수를 선택을 합니다. 여기서는 $ \textcolor{red}{1} $이네요.

그럼 이 $ \textcolor{red}{1} $을 제곱근호 왼쪽과 위에 하나씩 써 줍니다.

자, 여기서부터 근호기준 왼쪽연산과 오른쪽 연산이 분리됩니다.

오른쪽 연산은 완전한 나누기 연산입니다. 다만 자릿수를 내릴 때 나눗셈은 0 하나만 내리지만, 개평방에서는 00으로 0을 두개 내리지요.

왼쪽 연산은 이전에 선택한 수를 더해서 내리고 새로운 자리를 추가하는 연산입니다.

2)

오른쪽 연산: 나눗셈처럼 근호 왼쪽에 있는 수를 근호 위쪽에 있는 수와 곱하여 그 곱한 값을 근호 내에 있는 값과 빼주고, 나머지를 내립니다.(나머지: 2 - 1 = 1)

왼쪽 연산: 현재 선택한 수(1)를 더해주고, 그 수를 아래로 내려줍니다.(1 + 1 = 2 $)

3)

오른쪽 연산: 나머지에 00을 내립니다.(100)

왼쪽 연산: 내린 수의 끝자리에 수를 하나 더 추가합니다.(십의자리 2, 일의자리 ?)

4)

오른쪽 연산: 왼쪽에서 이 2? 와 ?를 곱해서 현재 "나머지+00"인 수보다 크지 않은 수를 찾습니다.
여기서는 24*4 = 96이므로 4가 우리가 찾던 ?입니다. 100에서 96을 뺀 4를 아래로 내려줍시다.
근호 위에도 써줍시다. 원래 근호 안에 있던 수의 자릿수보다 더 나누게 되니 소수점도 추가해줍시다.

왼쪽 연산: 위에서와 마찬가지로 244를 더하고 아래로 내려줍니다.

5) 이후 계속 반복계산합니다.

글로보면 어렵지만, 이미지로 보면 정말 쉽습니다.

 

장점은

  1. 처음 방법을 터득할때까지가 어색할 뿐이지 한번 터득하고 나면 계속 완전 같은 방식으로 연산을 반복하므로 직관적이고 쉽습니다.
  2. 개평방법으로 구한 각 자릿수는 절대 변동의 여지없이 정확한 숫자를 나타냅니다.(이후 다른 방법들을 이용하여 제곱근을 구하게되면 소수점 자리들이 출렁출렁하면서 바뀝니다)
  3. 나눗셈과 같이 한자리 한자리 구해나가는 것이므로, 완전제곱수의 경우 유한한 단계에서 명확하게 끝이 납니다.

단점은

  1. 계산이 갈수록 엄청 번거로워지고(자릿수가 하나씩 늘어나는 곱셈 및 뺄셈 연산)
  2. 이에따라 자릿수를 하나하나 늘려가는데 시간이 갈수록 오래 걸린다는 점이 있습니다.

 

 

3. 바빌로니아식 제곱근 근사법(Babylonian method)

3-1. 유래

제곱근을 계산하는 다른 방법으로는 바빌로니아 방법 혹은 바빌로니아 알고리즘이라는 방법이 있습니다.

왜 바빌로니아식 제곱근 근사법이냐 하면...

고대 바빌로니아(기원전 1800년경)의 점토판 유물에서 발견된 수학 문서에 제곱근 근사값을 계산하는 방식이 등장합니다.

  • Plimpton 322 (기원전 1800년경 수메르/바빌로니아 지역의 점토판): 고대 바빌로니아 수학자들이 작성한 것으로 보이는 피타고라스 삼수표(Table of Pythagorean triples)로 해석되는 표(직각삼각형 계산과 연루)가 작성된 점토판. 정확한 용도에 대해서는 논란이 있으나, 제곱근 근사와 관련된 고대의 계산 문화와 맥락이 담겨있다고 볼 수 있다.
  • YBC 7289 점토판: $ \sqrt{2} \approx 1.414213 $의 고정밀 근사값이 기록되어 있음 (실제값과 소수점 여섯째 자리까지 일치)

그래서 현대의 수학자들이 이 방법을 '바빌로니아식'이라고 명명하였습니다.

이후 고대 그리스 수학자 헤론(Heron of Alexandria)이 동일한 공식을 사용했어서 '헤론의 방법'이라고도 부르나, 보통은 바빌로니아 기록이 더 이르기 때문에 '바빌로니아식 제곱근 근사법'이라고 부릅니다.

 

 

3-2. 의미

위에서 봤던 개평법과는 다르게, 바빌로니아식 제곱근 근사법은 "반복 근사법"입니다.

즉, 계속해서 같은 공식에 이전에 나왔던 값을 '반복 대입'하며 근사값을 찾아가는 방법이죠.(점화식과 같습니다)

"반복 근사하면 오래걸리지 않아?"라고 하실지 모르겠습니다만, 일단 수렴속도가 어마어마하게 빨라서 해당 제곱근 수 근처의 수를 고르면 다섯번 이내로 최소 소수점이하 두세자리까지는 완벽하게 알 수 있습니다.(첫 값을 잘 고르면 네 번 만에 여덟자리까지 수렴하기도 합니다)

 

3-3. 수식

$ x_{n+1} = \frac{1}{2}\left(x_n+\frac{S}{x_n}\right) $

수식은 이와같이 생겼습니다. 즉, $ x_n $을 넣고 계산을 하면 $ x_{n+1} $값이 나오고, 이 값을 다시 넣어서 계산하면서 반복해서 근사해나가는 방식이죠.

이때 $ x_0 > 0 $에서 시작하면 이 수열의 극한값이 $ \sqrt{S} $라는 것이 바빌로니아식 제곱근 근사법입니다.

$ x_0 > 0 $이 조건이 필요하냐면... 0이면 아예 계산이 안되고, 음수면 $ -\sqrt{S} $로 수렴해서 그렇습니다.

 

 

3-4. 수렴하는 이유

직관적으로 보면

어떤 수 $ x $가 $ \sqrt{S} $보다 작으면 $ \frac{S}{x} $는 커지고, 반대로 $ x $가 크면 $ \frac{S}{x} $는 작아집니다.
그러므로 둘의 평균을 취하면 더 정확한 근사치에 다가갈 수 있죠!

 

수학적으로 보면

[수식의 나열입니다. 아래 더보기를 눌러보시고, 어려우시면 건너뛰시죠!]

더보기

현재 수식 $ x_{n+1} = \frac{1}{2}\left(x_n + \frac{S}{x_n}\right) $의 우항은 '산술평균'이라고 볼 수 있습니다.

따라서 기하평균을 구해보면 $ \sqrt{x_n \cdot \frac{S}{x_n}} = \sqrt{S} $가 되죠.

산술기하평균 부등식으로 살펴보면 따라서

$ \frac{1}{2}\left(x_n + \frac{S}{x_n}\right) \ge \sqrt{S} $

즉, 처음 잡아주는 $ x_0 $를 제외하고는 이후에 계산되어 나오는 모든 수가 $ \sqrt{S} $보다 큰 값이란 걸 알 수 있습니다.(즉, $ \sqrt{S} $보다 큰 수에서부터 수렴한다는 뜻이기도 하죠)

따라서, 항상 $ x_n \ge \sqrt{S} \Leftrightarrow (x_n)^2 \ge S, \ (n \ge 1) $ 임을 알 수 있습니다.

 

그렇다면 $ \frac{S}{x_n} $은 $ \sqrt{S} $에 비해 어떨까요? 클까요 작을까요?

일단 부등호 방향을 모르니 ? 라고 두고 풀어보죠

\begin{align}

\frac{S}{x_n} \ & ? \ \sqrt{S} \\

\frac{S^2}{(x_n)^2} \ & ? \ S \\

\frac{S}{(x_n)^2} \ & ? \ 1

\end{align}

자 여기서 아까, $ (x_n)^2 \ge S $였으므로, $ \frac{S}{(x_n)^2} $는 무조건 1보다 작아지겠군요. 따라서 $ ? $는 $ \le $가 됩니다.

$ \frac{S}{(x_n)^2} \le 1 $이 되며, 따라서 제일 처음에 썼던 식도 부등호방향이 정해집니다. $ \frac{S}{x_n} \le \sqrt{S} $

즉, $ \frac{S}{x_n} $은 $ \sqrt{S} $에 비해 항상 작다고 볼 수 있습니다.

따라서 $ x_n \ge \sqrt{S} $이고, $ \frac{S}{x_n} \le \sqrt{S} $이니, 두 값이 서로 반대방향으로 움직이며 평균치를 조정한다는 걸 알 수 있습니다.

 

그러나 여기서 또 문제가 발생하죠. '왜 수렴하는가'입니다.

아닌말로 두 값이 서로 반대방향으로 움직여도 서로 완전히 같은 값을 가지고 움직이면, 혹은 둘중에 한값이 더 크게 움직이면 아무리 평균을 해봤자 절대 수렴하지 못하죠! (일정 이거나 발산 이거나..)

수렴하는 방법은 단 하나입니다. 근사값 $ x_n $과 $ \frac{S}{x_n} $의 평균이 점점 $\sqrt{S}$에 가까워지는, 즉 다시말해 두 수의 오차가 줄어드는 방법밖에 없죠.

 

그러면 왜 수렴하는지 한번 살펴볼까요? 여기까지 따라오셨으면 이거는 쉽습니다.

자, 이제 어떤 근사값 $ x_n $ 혹은 $ \frac{S}{x_n} $ $ \sqrt{S} $의 '차이' 혹은 '오차'만 보겠습니다.(양인지 음인지 중요하지 않고 그 값만 보겠다는 말입니다. 즉 값에 절대값 씌워서 보겠습니다.)

$ | \sqrt{S} - \frac{S}{x_n} | $

그럼 바로 이 부분이 실제 참값 $ \sqrt{S} $와 근사값 $ \frac{S}{x_n} $의 차이일 겁니다.

자, 여기서 $ | x_n - \frac{S}{x_n} | $보다 $ | \sqrt{S} - \frac{S}{x_n} | $이 작으면 수렴하겠군요.

식변형 해보죠

$ | \sqrt{S} - \frac{S}{x_n} | = | \frac{\sqrt{S}}{x_n}(x_n - \sqrt{S}) | $

어? 잘 보면 우항에서 $ | x_n - \sqrt{S} | $부분이 나왔습니다. 그런데 앞에 $ \frac{\sqrt{S}}{x_n} $가 곱해져있군요!

위에서 $ \frac{S}{(x_n)^2} \le 1 $이었고, $ \frac{\sqrt{S}}{x_n} \le 1 $이므로

$ | \frac{\sqrt{S}}{x_n}(x_n - \sqrt{S}) | $는 항상

$ | \frac{\sqrt{S}}{x_n}(x_n - \sqrt{S}) | \le | x_n - \sqrt{S} | $ 가 되겠네요!

따라서 $ | \sqrt{S} - \frac{S}{x_n} | \le | x_n - \sqrt{S} | $이고,

결과적으로 $ \sqrt{S} $를 기준으로 하방으로 $\frac{S}{x_n}$ 오차는 더 작아지되 상방으로 $x_n$오차 와 반대방향 값을 가지므로 이 둘을 평균하면 점점 더 값이 작아지게 됩니다.

 

실제 수식으로 풀어보면 다음과 같습니다.

현재까지 밝혀진 사실로, $ n \ge 1 $일 때,

$ \frac{S}{x_n} \le \sqrt{S} \le x_n $ 입니다.($ x_n $이 항상 $\sqrt{S}$보다 크거나 같은건 산술기하평균으로, $ \frac{S}{x_n} \le \sqrt{S} $는 식변형으로 증명했죠)

그리고 위에서 오차의 크기도 증명했죠.(여기서는 n이 1이상일때 식 순서에 따르면 부호는 양수로 자명하니 절댓값 부호 빼고 진행하겠습니다.)

$ \sqrt{S} - \frac{S}{x_n} \le x_n - \sqrt{S} $

이와 같습니다.

$ \frac{S}{x_n} \le \sqrt{S} $를 정리하면

$ 0 \le \sqrt{S} - \frac{S}{x_n} $

이므로

결국

$ 0 \le \sqrt{S} - \frac{S}{x_n} \le x_n - \sqrt{S} $

입니다.

여기서 $ x_n - \sqrt{S} $를 a, $ \sqrt{S} - \frac{S}{x_n} $를 b라고 한다면

$ 0 \le b \le a $

라고 할 수 있겠죠?

 

여기서 처음 점화식은

\begin{align}

x_{n+1} & = \frac{1}{2}\left(x_n+\frac{S}{x_n}\right)

\end{align}

여기서 좌우변 모두 $ \sqrt{S} $를 빼줘서 기준값 기준 오차로 살펴보도록하죠

\begin{align}

x_{n+1} -\sqrt{S} & = \frac{1}{2}\left(x_n+\frac{S}{x_n}\right) -\sqrt{S}\\

& = \frac{(x_n-\sqrt{S})-(\sqrt{S}-\frac{S}{x_n})}{2}\\

& = \frac{a-b}{2}

\end{align}

 

자, 여기서 $ 0 \le b \le a $이므로

$ b \le a $를 정리하면, $ 0 \le a-b $죠.

또한, $ b \ge 0 $이면, $ a - b $는 무조건 $ a $보다 작아질 것이므로, $ a - b \le a $입니다.

따라서 다시 정리하면, $ 0 \le a-b \le a $가 됩니다.

여기서 다시 2로 나누면, $ 0 \le \frac{a-b}{2} \le \frac{a}{2} $로 정리가 됩니다.

 

다시 a, b 대입하여 정리하면

\begin{align}

0 \le \frac{x_n - \sqrt{S} - (\sqrt{S} - \frac{S}{x_n})}{2} & \le \frac{x_n - \sqrt{S}}{2} \\

0 \le \frac{x_n + \frac{S}{x_n} - 2\sqrt{S}}{2} & \le \frac{1}{2}(x_n - \sqrt{S}) \\

0 \le \frac{x_n + \frac{S}{x_n}}{2} - \sqrt{S} & \le \frac{1}{2}(x_n - \sqrt{S}) \\

0 \le x_{n+1} - \sqrt{S} & \le \frac{1}{2}(x_n - \sqrt{S})

\end{align}

여기까지 정리하면, 끝났습니다. 이 식에서 바로 두 가지가 동시에 드러납니다.

  • 단조 감소: $ n \ge 1 $에서는 현재값은 항상 참값(제곱근) 이상이고, 역보정값 $ \frac{S}{x_n} $은 항상 그 이하입니다. 그러므로 두 값의 평균인 다음 값은 항상 현재값 이하입니다.
  • 오차 축소: 다음 오차는 ‘큰 쪽 오차에서 작은 쪽 오차를 뺀 뒤 절반으로 나눈 값’이므로, 항상 이전 오차의 절반 이하입니다.

 

참고로 점화식을 조금 다르게 변형하면

$ x_{n+1}-\sqrt{S} = \frac{(x_n-\sqrt{S})^2}{2x_n} $

으로 변형이 되고, 여기서 $ x_n \ge \sqrt{S} $이므로

$ 0 \le x_{n+1}-\sqrt{S} \le \frac{(x_n-\sqrt{S})^2}{2\sqrt{S}} $

로 정리가 됩니다. 따라서, 실제 오차 축소는 “절반”보다 더 강한 이차적 감소(quadratic convergence)입니다.

 

 

3-5. 뉴턴-랩슨법(Newton-Raphson Method)의 특수한 형태

사실상 현재 어떤 함수에 대해 어떤 지점에서의 근삿값을 알고 싶다고 하면, 가장 빠르고 효율적인 알고리즘이 바로 뉴턴-랩슨법입니다.

그리고 사실 이 바빌로니아식 제곱근 풀이법은 뉴턴-랩슨법의 아주 특수한 형태라고 볼 수 있습니다.

뉴턴 랩슨법은 다음과 같습니다.

$ x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} $

우리는 어떤 수 x가 $ \sqrt{S} $와 같기를 바랍니다.

$ x = \sqrt{S} $

양변 제곱하면

$ x^2 = S $

이항하면

$ x^2 - S = 0 $

딱 이 값을 원하는 거죠. 그리고 이거는 함수로 표현하자면 f(x) = 0인 값을 찾고 싶은거고, 그러면 이제 함수 f(x)는 다음과 같이 정의 됩니다.

$ f(x) = x^2 - S $

여기서 0인 값을 찾는거죠.

그럼 이걸 뉴턴-랩슨법에 대입하면

$ x_{n+1} = x_n - \frac{(x_n)^2-S}{2x_n} $이 되고

정리하면

$ x_{n+1} = \frac{1}{2}\left(x_n+\frac{S}{x_n}\right) $

가 되면서, 바빌로니아식 제곱근 근사법이 짜잔 하고 나타납니다!

 

 

4. 마무리

어떠셨나요..!

조금은 어렵지만, 조금은 재밌는, 무리수로의 한 발짝이었습니다!

반응형

+ Recent posts