YOGYUI

자연상수 (오일러 수) e 값 구해보기 본문

Data Analysis/General

자연상수 (오일러 수) e 값 구해보기

요겨 2021. 12. 10. 19:34
반응형

얼마전에 서점에 놀러갔다가 재밌어보여서 산 책

박권, 『일어날 일은 일어난다, 동아시아(2021)

학부 때 잠깐 맛볼 수 있는 양자역학에 대한 입문 교양서랄까? 나름 친절하게 풀어써져있긴 하지만, 관련 지식이 전혀 없는 일반인이 보기에는 난해한 수식이 다소 나오긴 한다 (미리 경고하자면, 수식이 진짜 많이 나온다 ㅋㅋ)

물리학이나 전자공학을 전공하는 학부생이라면 2학년 때 전공필수 과목을 다 수강한 후에 겨울방학 때 읽으면 정말 도움이 많이 될 것 같은 책! (나도 학부때 이 책을 읽었더라면... 좀 더 전자장이나 양자역학 수업에서 흥미를 느끼지 않았을까 아쉽다)

 

책에서 다루는 물리학 관련 내용이 워낙에 방대하다보니 (우주의 탄생 및 원자의 구조, 슈뢰딩거 파동 방정식, 광자, 열역학 제1,2법칙, 쿼크, 시간) 나도 중간중간 끊어서 읽어가야해서 진도가 영 나가질 않는다 ㅎㅎ 

 

이 글에서는 책 초반에 나오는 인상적인(?) 구문 하나에 대한 내용을 다뤄보고자 한다 (Latex 연습도 좀 할겸...)


위대한 물리학자 파인먼이 "가장 놀라운 수학 공식"이라고 부른 공식이 있다. 바로 오일러 공식(Euler's formula)이다.
--- 중략 ---
\( e^{i\theta}=\cos{\theta} + i\sin{\theta} \)
--- 중략 ---
먼저, 오일러 공식의 좌변에 있는 \(e\)는 '오일러 수(Euler's number)'라고 한다. 구체적으로, 오일러 수의 값은 2.71828···이다.오일러 수가 중요한 이유는 지수 함수를 정의하기 때문이다.
(책 42페이지)

여기서 말하는 오일러는 수학자 레온하르트 오일러(Leonhard Euler)를 가리킨다

 

오일러 공식은 위 식에 \( \theta=\pi \)를 대입해서 다음과 같이 표현하기도 한다

\(e^{i\pi}+1=0\)

이 식은 파인먼 뿐만 아니라 많은 수학자, 과학자들의 마음을 사로잡았다 (1988년 미국의 The Mathematical Intelligencer라는 수학 잡지에 David Wells라는 수학자가 24개의 유명한 수학 공식들을 대상으로 투표를 2년간 진행했는데, 오일러 공식이 압도적인 선택을 받아 가장 아름다운 수학 공식으로 불리게 되었다)[1]

--- 중략 ---
여기서 r은 변화의 비율이다. 이러한 등비수열을 함수의 형태로 쓰면 다음과 같다.
\( f(x)=r^{x} \)
이것이 다름 아니라 지수 함수다.
(책 43페이지)
---중략---
지수 함수의 변화 비율 \( r \)을 잘 조정하면, 지수 함수와 그것의 미분값이 정확히 같아지도록 조정할 수 있다. 그 변화 비율이 바로 오일러 수 \(e \)다.
(책 46페이지)

오일러 수는 고등학교 수학 시간에는 '자연 상수'로 불렸던 걸로 기억한다

(사실 오일러 수는 다음과 같이 다른 개념을 가리키기도 한다, 나도 정확히 뭐가 맞는 말인지는 모르겠다 -_-)

자세한 수학 역사를 다룰 생각은 없으니, 고등학교 시절로 돌아가서 본문에서 말하는 "지수 함수와 그것의 미분값이 정확히 같아지도록 조정"의 의미를 수식으로 한 번 유도해보자 (순전히 내 호기심으로 시작했다가, 블로그에 쓰면 뭔가 있어보일 것 같아서 끼적끼적 써본다)

Step.1

우선, 가장 간단한 형태의 지수함수를 적어보자

\( y=f(x)=a^{x} \)

여기서 \(a\)는 실수 (real number)

고등학생 때 기억을 되살려서, 도함수를 구해보자 (지수함수의 곱셈 성질이 사용된다)

\( y'=f'(x)= \lim\limits_{h \to 0} \cfrac{a^{x+h} - a^{x}}{h} \)
\( =  \lim\limits_{h \to 0} \cfrac{ {a^x} \cdot {a^h} - a^{x} }{h} \)
\( =  \lim\limits_{h \to 0} \cfrac{ {a^x} ({a^h} - 1) }{h} \)
\( =  a^{x} \cdot \lim\limits_{h \to 0} \cfrac{ {a^h} - 1 }{h} \)
이 때, 도함수에 0을 대입하면 
\( f'(0)=  \lim\limits_{h \to 0} \cfrac{a^{h} - 1}{h} \)
이므로 위 식을 정리하면
\( y' = f'(x) = a^{x} \cdot f'(0) \)
이 된다

이 때, 책에서 언급한 것처럼 미분한 함수가 원함수랑 동일하게 되려면

\( f'(0) =  \lim\limits_{h \to 0} \cfrac{a^{h} - 1}{h} = 1 \)

을 만족하는 \( a \)값을 찾으면 된다

Step.2

위 식은 다음과 같이 간단히 정리할 수 있다

\( \lim\limits_{h \to 0} \cfrac{a^{h} - 1}{h} = 1 \)
\( \lim\limits_{h \to 0} {(a^{h} - 1)} = \lim\limits_{h \to 0} {h} \)
\( \lim\limits_{h \to 0} {a^{h}} = \lim\limits_{h \to 0} {(1+h)} \)
\( \lim\limits_{h \to 0}{a} = a = \lim\limits_{h \to 0} {(1+h)^{\cfrac{1}{h}}} \)
이 때, \( n={{1}\over{h}} \)로 치환하면
\( a= \lim\limits_{n \to \infty} {(1+{\cfrac{1}{n}} )^{n}} \)

결국 위 조건을 만족하는 \(a\)를 오일러 수 \(e\)라고 할 수 있다

\( e= \lim\limits_{n \to \infty} {(1+{\cfrac{1}{n}} )^{n}} \)

 

P.S) 사실 이 식은 오일러가 최초로 고안한 게 아니다

의외로(?) 야콥 베르누이가 은행의 이자 지급 횟수에 따른 이자 지급액의 관계를 파헤치다가 발견한 공식이라고 한다

Step.3

위에서 정의한 오일러 수 \(e\)의 실제값을 얻기 위해서는 이항정리(binomial theorem)를 사용해야 한다

이항정리
\( (x+y)^{r} = \sum\limits_{k=0}^{r}{ \cfrac{r!}{k!(r-k)!} x^{r-k}y^{k} } \)

이제 이항정리 식에 오일러 수를 대입해보자 (\( x=1, r=n, y={1 \over n} \))

\( (1 + \cfrac{1}{n})^{n} = \sum\limits_{k=0}^{n}{ \cfrac{n!}{k!(n-k)!}(\cfrac{1}{n})^k } \)
\( ={\cfrac{n!}{0!n!}}\cdot{1} + {\cfrac{n!}{1!(n-1)!}}\cdot{\cfrac{1}{n}} + {\cfrac{n!}{2!(n-2)!}}\cdot{\cfrac{1}{n^2}} + {\cfrac{n!}{3!(n-3)!}}\cdot{\cfrac{1}{n^3}} + \cdot\cdot\cdot \)
\( = 1 + 1 + \cfrac{n(n-1)}{2!n^2} + \cfrac{n(n-1)(n-2)}{3!n^3} + \cdot\cdot\cdot \)
우변의 각 요소들의 분자와 분모에 있는 \(n\)의 최대차수는 동일하기 때문에 양변에 극한을 취하면
\( \lim\limits_{n \to \infty }{(1 + \cfrac{1}{n})^{n}} = 1 + 1 + \cfrac{1}{2!} + \cfrac{1}{3!} + \cdot\cdot\cdot \)
와 같이 정리할 수 있다

오일러가 실제로 \(e\)값을 구한 방식도 위와 같은 무한급수 전개방식 (정확히는 무한 연분수, infinite continued fraction)이라고 한다

팩토리얼만 구하면 되기 때문에 위 방식은 실제 값을 구하는 알고리즘도 상당히 간단하다

 

재미삼아 파이썬으로 구현해보자

팩토리얼 값을 구하는 함수는 재귀호출로 구현!

(알고리즘 공부하면 1일차에 무조건 구현해보게 되는...ㅋㅋㅋ)

def factorial(n: int):
    if n <= 0:
        return 1
    return n * factorial(n - 1)
In [1]: factorial(1)
Out[1]: 1
In [2]: factorial(2)
Out[2]: 2
In [3]: factorial(3)
Out[3]: 6
In [4]: factorial(4)
Out[4]: 24
In [5]: factorial(5)
Out[5]: 120
In [6]: factorial(6)
Out[6]: 720
In [7]: factorial(7)
Out[7]: 5040
In [8]: factorial(8)
Out[8]: 40320

이제 오일러 수를 구하는 함수도 구해보자 (몇차항까지 구할 것인지 인자로 받아서)

import sys
sys.setrecursionlimit(5000)

def getEulerNumber(n: int):
    sums = [1 / factorial(x) for x in range(n)]
    return sum(sums)
In [9]: getEulerNumber(1)
Out[9]: 1.0
In [10]: getEulerNumber(2)
Out[10]: 2.0
In [11]: getEulerNumber(3)
Out[11]: 2.5
In [12]: getEulerNumber(4)
Out[12]: 2.6666666666666665
In [13]: getEulerNumber(5)
Out[13]: 2.708333333333333
In [14]: getEulerNumber(10)
Out[14]: 2.7182815255731922
In [15]: getEulerNumber(100)
Out[15]: 2.7182818284590455
In [16]: getEulerNumber(500)
Out[16]: 2.7182818284590455
In [17]: getEulerNumber(1000)
Out[17]: 2.7182818284590455
In [18]: getEulerNumber(5000)
Out[18]: 2.7182818284590455

 일단 100차를 넘어가면 기본 print형으로 표시되는 수치는 2.7182818284590455로 수렴한다

import numpy as np
In [19]: np.e
Out[19]: 2.718281828459045

Numpy에 사전 정의된 수치와도 일치하는 것을 알 수 있다

 

고등학교 때는 "자연상수라는게 존재한다", "숫자는 2.718xxx인 무리수다" 정도만 짚고 넘어가고 열심히 지수,로그 문제 푸는 테크닉만 배우지, 이 숫자가 무엇을 의미하는지에 대해서는 언급하질 않는다 (대학에서는 뭔가 알려주긴 한 거 같긴 한데 학교생활을 대충해서 그런지 정확히 기억은 안난다 ㅋㅋ)

 

"미분했을 때 자기자신과 같아지는 지수함수의 밑"이라고만 하고 끝내기엔 자연상수가 가진 의미와, 수학/공학에서의 중요도가 매우매우매우 많지만, 일일이 다 쓸순 없으니 오늘 글은 이만~

 

「일어날 일은 일어난다」 완독하면 1번 정도 더 읽은 다음에 재밌는 내용 있으면 블로그에 나름 정리해서 포스팅해볼 생각!

 

[참고]

[1] https://medium.com/however-mathematics/the-most-beautiful-theorem-in-mathematics-eulers-identity-19d89370803e

 

반응형
Comments