55강에서는 급수가 먼저 주어졌습니다. ∑xn이 무엇인지 물었고 답이 1−x1이었습니다.
이제 방향을 뒤집습니다. 함수 ex가 주어졌을 때 그것을 나타내는 멱급수를 찾을 수 있습니까.
놀랍게도 답이 있고, 게다가 계수를 구하는 방법이 대단히 단순합니다. x=0에서의 도함수 값들만 알면 계수가 전부 결정됩니다. 한 점에서의 정보가 함수 전체를 복원한다는 뜻이며, 41강에서 고계도함수를 세워 둔 것이 여기서 쓰입니다.
이 결과가 미적분학에서 차지하는 위치는 특별합니다. 어떤 함수든 다항식의 무한합으로 적을 수 있다면, 모든 함수를 다항식처럼 다룰 수 있습니다. 미분과 적분이 계수의 이동이 되고, 초등함수로 적분되지 않던 것들이 항별 적분으로 계산됩니다. 49강 심화 3에서 손대지 못한 e−x2의 적분이 여기서 해결됩니다.
다만 조심할 것이 있습니다. 테일러 급수가 존재한다고 해서 그것이 원래 함수와 같은 것은 아닙니다. 무한히 매끄러운데도 자신의 테일러 급수와 다른 함수가 실제로 존재하며, 그 반례가 이 강의에서 가장 값진 부분입니다.
문제. 다음의 매클로린 급수와 수렴반경을 구하세요.
(1) ex
(2) sinx
(3) cosx
생각의 실마리. 세 함수 모두 도함수가 규칙적으로 반복됩니다. ex는 미분해도 그대로이고, sin과 cos은 39강에서 본 대로 네 번 미분하면 제자리로 돌아옵니다. 그 주기를 이용하면 f(n)(0)을 일반식으로 쓸 수 있습니다.
풀이. (1) f(n)(x)=ex이므로 모든 n에서 f(n)(0)=1입니다.
ex=n=0∑∞n!xn=1+x+2!x2+3!x3+⋯
55강 문제 2에서 R=∞임을 확인했습니다.
(2) 도함수가 네 개마다 반복됩니다.
n
f(n)(x)
f(n)(0)
0
sinx
0
1
cosx
1
2
−sinx
0
3
−cosx
−1
짝수 항이 모두 사라지고 홀수 항의 부호가 번갈아 나타납니다.
sinx=n=0∑∞(2n+1)!(−1)nx2n+1=x−3!x3+5!x5−⋯
수렴반경은 u=x2으로 치환해 보면 계수가 (2n+1)!1이라 R=∞입니다.
(3) 같은 방식으로 홀수 항이 사라집니다.
cosx=n=0∑∞(2n)!(−1)nx2n=1−2!x2+4!x4−⋯
역시 R=∞입니다.
이 문제에서 배우는 것: 기본 급수 목록.
앞으로 계속 쓸 급수를 모아 둡니다.
함수
매클로린 급수
R
e^
\displaystyle\sum_{n\ge 0}\frac{x^{n}}
∞
sinx
\displaystyle\sum_{n\ge 0}\frac{(-1)^{n}x^{2n+1}}
∞
cosx
\displaystyle\sum_{n\ge 0}\frac{(-1)^{n}x^{2n}}
∞
\dfrac{1}
\displaystyle\sum_{n\ge 0}x^
1
ln(1+x)
\displaystyle\sum_{n\ge 1}\frac{(-1)^{n-1}x^{n}}
1
arctanx
\displaystyle\sum_{n\ge 0}\frac{(-1)^{n}x^{2n+1}}
1
(1+x)^
\displaystyle\sum_{n\ge 0}\binom{\alpha}{n}x^
1
마지막 줄의 이항급수는 심화 1에서 다룹니다. α가 음이 아닌 정수이면 유한합이 되어 20강의 이항정리와 같아집니다.
수렴반경이 ∞인 것과 1인 것으로 나뉘는 이유는 55강 심화 6에서 이미 답했습니다. ex, sin, cos은 복소평면에서도 특이점이 없어 반경이 무한하고, 나머지는 x=1이나 x=−1 또는 x=±i에 특이점이 있어 반경이 1입니다.
sin과 cos의 급수를 나란히 보면 구조가 드러납니다. 홀수 항과 짝수 항으로 정확히 갈라집니다.sin이 홀함수이고 cos이 짝함수라는 사실이 계수에 그대로 나타난 것이며, 두 급수를 합치면 ex의 급수에서 부호만 바뀐 모양이 됩니다. 이 관찰이 58강의 오일러 공식으로 이어지며 심화 3에서 미리 봅니다.
교대급수이므로 오차가 다음 항 이하입니다. 다섯째 자리까지 얻으려면 항이 여덟 개쯤 필요합니다. 값은 0.74682입니다.
(3) f(x)=lnx의 도함수를 x=1에서 계산합니다. f′(x)=x1, f′′(x)=−x21, f′′′(x)=x32이고 일반적으로
f(n)(x)=xn(−1)n−1(n−1)!
이므로 f(n)(1)=(−1)n−1(n−1)!입니다. 계수는
an=n!(−1)n−1(n−1)!=n(−1)n−1
이고
lnx=n=1∑∞n(−1)n−1(x−1)n
입니다. ln(1+u)의 급수에 u=x−1을 넣은 것과 같습니다. x=1.5이면 u=0.5이므로
ln1.5=0.5−20.25+30.125−⋯=0.405465…
입니다.
이 문제에서 배우는 것: 급수의 세 가지 용도.
용도
방법
대체하는 것
극한 계산
분자와 분모를 펼쳐 비교합니다
로피탈 정리(45강)
적분 계산
항별로 적분합니다
원시함수 찾기(50~52강)
함숫값 근사
부분합을 계산합니다
수치적분, 뉴턴법
극한 계산에서 급수가 로피탈보다 나은 점이 분명합니다. 로피탈은 매번 미분하고 부정형인지 확인해야 하는데, 급수는 한 번 펼치면 모든 차수의 정보가 한꺼번에 나옵니다. 게다가 45강 심화 4에서 지적한 순환논법 걱정도 없습니다. 다만 급수를 알고 있어야 쓸 수 있습니다.
(2)의 계산은 04단원에서 남긴 빚을 갚습니다. 49강 심화 3에서 e−x2의 원시함수가 초등함수가 아니라고 했는데, 초등함수로 적을 수 없다는 것과 계산할 수 없다는 것은 다릅니다. 급수는 우리가 아는 함수의 조합이 아니지만 원하는 정밀도로 값을 줍니다.
중심을 옮기는 (3)의 요령도 실용적입니다. 계산할 점에 가까운 곳을 중심으로 잡으면 수렴이 빠릅니다. 55강 문제 5에서 말한 원칙이 여기서 구체적으로 쓰입니다. ln1.5를 ln(1+u)의 급수로 계산할 때 u=0.5이므로 항이 절반씩 줄어들어 충분히 빠릅니다.
입니다. tPn(t)는 다항식이고 e−t2이 그보다 빠르게 0으로 가므로(45강 성장 위계) 극한이 0입니다. h→0−도 같습니다. 따라서 f(n+1)(0)=0입니다. ■
성장 위계가 이 증명 전체를 떠받칩니다. 45강에서 "지수함수가 어떤 거듭제곱보다 빠르다"고 한 것이 여기서 무한히 많은 극한을 한꺼번에 처리합니다.
검산에서 x=0.1일 때 f(x)≈3.7×10−44이고 이를 x10으로 나눠도 3.7×10−34입니다. x=0.01에서는 e−104이 배정밀도에서 아예 0으로 표현됩니다. 함수가 얼마나 평평하게 눌려 있는지가 숫자로 드러납니다.
심화 3.ex의 급수에서 x 자리에 ix를 넣으면 무엇이 나오는지 형식적으로 계산하고, 그 결과가 무엇을 시사하는지 쓰세요.
풀이.i2=−1이므로 거듭제곱이 네 개마다 반복됩니다.
n
i^
0
1
1
i
2
−1
3
−i
ex의 급수에 넣습니다.
eix=n=0∑∞n!(ix)n=1+ix−2!x2−3!ix3+4!x4+⋯
실수부와 허수부로 나눕니다. 짝수 항이 실수이고 홀수 항이 허수입니다.
=(1−2!x2+4!x4−⋯)+i(x−3!x3+5!x5−⋯)
두 괄호가 정확히 cosx와 sinx의 급수입니다.
eix=cosx+isinx
이것이 오일러 공식이며 58강의 주제입니다.
여기서 얻는 통찰이 큽니다. 문제 2에서 sin과 cos의 급수가 홀수 항과 짝수 항으로 정확히 갈라진다고 했는데, 그것이 우연이 아니라 하나의 지수함수가 실수부와 허수부로 나뉜 결과였습니다. 세 함수가 별개가 아니라 복소지수 하나의 세 얼굴입니다.
물론 이 계산은 형식적입니다. 복소수 지수를 아직 정의하지 않았기 때문입니다. 논리의 순서를 바로잡으면 이렇습니다. ez를 급수로 정의하고, 그 정의에서 위 등식이 따라 나옵니다.ex의 급수가 R=∞이므로 복소수에서도 어디서나 수렴하며, 정의로 삼기에 아무 문제가 없습니다.
51강 심화 4에서 ∫eaxsinbxdx의 분모에 a2+b2이 나온 것도 이 공식으로 설명된다고 예고했습니다. 그 빚이 58강에서 갚아집니다.
심화 4. 49강 심화 3에서 초등 원시함수가 없다고 한 e−x2과 xsinx를 급수로 적분하고, 오차를 평가하세요.
풀이.첫째 적분입니다. 문제 3에서 얻은 급수를 항별로 적분합니다.
∫0te−x2dx=n=0∑∞n!(2n+1)(−1)nt2n+1
t=1에서
1−31+101−421+2161−13201+⋯
입니다. 교대급수이고 항의 크기가 감소하므로 54강의 오차 한계를 씁니다. 여섯 항까지 더한 오차는 일곱째 항 93601≈1.07×10−4 이하입니다. 소수 열 자리를 얻으려면 열네 항쯤 필요하며 검산에서 서른 항으로 0.7468241328을 얻습니다.
둘째 적분도 같습니다.
∫0txsinxdx=n=0∑∞(2n+1)!(2n+1)(−1)nt2n+1
t=1에서 1−181+6001−⋯=0.9460830704입니다. 분모에 계승이 있어 훨씬 빨리 수렴하며 다섯 항이면 소수 열 자리에 도달합니다.
이 두 계산이 04단원에 남긴 빚을 갚습니다. 정리하면 이렇습니다.
질문
답
원시함수를 초등함수로 적을 수 있는가
없습니다(49강 심화 3)
원시함수가 존재하는가
존재합니다(제1기본정리)
값을 계산할 수 있는가
급수로 원하는 정밀도까지 가능합니다
"초등함수로 표현 불가"와 "계산 불가"는 전혀 다른 이야기입니다. 오차함수 erf와 적분사인 Si가 표준 함수로 취급되는 것도 이렇게 계산이 확실하기 때문입니다.
일반 원리도 하나 얻습니다. 급수의 수렴반경 안에서는 항별 적분이 언제나 가능하므로, 급수로 적히는 함수는 모두 적분할 수 있습니다. 다만 그 결과가 다시 초등함수인지는 별개의 문제입니다.
심화 5. 급수로 극한을 계산하는 방법을 정리하고, 로피탈로는 까다로운 예에 적용하세요.
풀이. 절차는 단순합니다.
단계
할 일
1
분자와 분모를 각각 급수로 펼칩니다
2
가장 낮은 차수의 항을 찾습니다
3
두 차수를 비교해 극한을 정합니다
3단계에서 분자의 최저 차수가 분모보다 높으면 극한이 0, 같으면 계수의 비, 낮으면 발산입니다.
까다로운 예를 봅니다.
x→0limx3ex−1−x−2x2
로피탈로 하면 세 번 미분해야 하고 매번 부정형을 확인해야 합니다. 급수로 하면
ex−1−x−2x2=6x3+24x4+⋯
이므로 극한이 61입니다. 한 줄입니다.
더 어려운 예도 됩니다.
x→0limx3sinx−xcosx
분자를 펼칩니다.
sinx=x−6x3+⋯,xcosx=x−2x3+⋯
빼면
sinx−xcosx=(−61+21)x3+⋯=3x3+⋯
이므로 극한은 31입니다. 로피탈로 하면 세 번 미분하는 동안 곱의 미분법이 계속 나와 식이 복잡해집니다.
급수 방법의 장점을 정리합니다.
항목
로피탈
급수
반복 확인
매번 부정형인지 봐야 합니다
필요 없습니다
계산량
미분이 누적되어 복잡해집니다
펼치기 한 번입니다
얻는 정보
극한값만
보정항까지
전제
도함수를 알아야 합니다
급수를 알아야 합니다
순환논법 위험
있습니다(45강 심화 4)
없습니다
보정항까지 얻는다는 점이 특히 유용합니다. 문제 5에서 x3sinx−x=−61+120x2−⋯을 얻었는데, 검산에서 x=0.01의 실제 값이 정확히 −61+12010−4과 일치합니다. 극한값뿐 아니라 그 근처에서의 거동까지 알려 줍니다.
이 강의에서는 numpy만 씁니다. 테일러 급수는 검산이 직접적입니다. 부분합과 함숫값을 비교하면 급수가 맞는지 즉시 확인됩니다. 다만 계승은 금방 부동소수점 범위를 넘으므로 n!1을 나눗셈으로 이어 만듭니다.
import numpy as np
def invfact(N):
"""1/n! 을 곱셈만으로 만듭니다. n! 자체는 금방 넘칩니다."""
c = np.ones(N)
for k in range(1, N):
c[k] = c[k-1]/k
return c
IF = invfact(60); n = np.arange(60)
# --- 문제 2: 주요 매클로린 급수 ----------------------------------------
for x in [0.5, 2.0, -1.5]:
print(x, "%.12f" % float(np.sum(IF*x**n)), "%.12f" % np.exp(x))
# 0.5 1.648721270700 1.648721270700
# 2.0 7.389056098931 7.389056098931
# -1.5 0.223130160148 0.223130160148
k = np.arange(30)
for x in [0.5, 2.0]:
s = float(np.sum((-1.0)**k*x**(2*k + 1)*IF[2*k + 1]))
c = float(np.sum((-1.0)**k*x**(2*k)*IF[2*k]))
print(x, "%.12f %.12f" % (s, np.sin(x)), "%.12f %.12f" % (c, np.cos(x)))
# 0.5 0.479425538604 0.479425538604 0.877582561890 0.877582561890
# 2.0 0.909297426826 0.909297426826 -0.416146836547 -0.416146836547
# --- 심화 1: 이항급수 (1+x)^a -------------------------------------------
def binom_series(a, x, N=400):
t = 1.0; s = 1.0
for j in range(1, N):
t *= (a - j + 1)/j*x
s += t
return s
for a, x in [(0.5, 0.5), (-1.0, 0.3), (1/3, 0.8)]:
print(a, x, "%.10f" % binom_series(a, x), "%.10f" % (1 + x)**a)
# 0.5 0.5 1.2247448714 1.2247448714
# -1.0 0.3 0.7692307692 0.7692307692
# 0.3333333333333333 0.8 1.2164403991 1.2164403991
# --- 문제 4: e^{-1/x^2} 은 극단적으로 평평합니다 ------------------------
f = lambda t: np.exp(-1/t**2)
for h in [1e-1, 1e-2, 1e-3]:
print(h, "%.6e" % float(f(h)), "%.6e" % float(f(h)/h**10))
# 0.1 3.720076e-44 3.720076e-34
# 0.01 0.000000e+00 0.000000e+00
# 0.001 0.000000e+00 0.000000e+00
# --- 심화 4: 급수로 적분하기 (초등 원시함수가 없는 두 적분) --------------
m = np.arange(30)
gauss = float(np.sum((-1.0)**m*IF[:30]/(2*m + 1)))
print("%.10f %.10f" % (gauss, 0.7468241328124271))
# 0.7468241328 0.7468241328
si = float(np.sum((-1.0)**m*IF[2*m + 1]/(2*m + 1)))
print("%.10f %.10f" % (si, 0.9460830703671830))
# 0.9460830704 0.9460830704
# --- 심화 5: 급수는 극한값과 보정항을 함께 줍니다 ------------------------
for x in [1e-2, 1e-3]:
print(x, "%.10f" % float((np.sin(x) - x)/x**3), "%.10f" % (-1/6 + x**2/120))
# 0.01 -0.1666658333 -0.1666658333
# 0.001 -0.1666666583 -0.1666666583
# --- 문제 5: 중심을 옮긴 전개 -------------------------------------------
def taylor_ln_at1(x, N=200):
u = x - 1.0
j = np.arange(1, N)
return float(np.sum((-1.0)**(j - 1)*u**j/j))
for x in [1.5, 0.6]:
print(x, "%.10f" % taylor_ln_at1(x), "%.10f" % np.log(x))
# 1.5 0.4054651081 0.4054651081
# 0.6 -0.5108256238 -0.5108256238
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, ex, sin, cos의 급수가 세 값에서 모두 소수 열두 자리까지 일치합니다. x=2처럼 1보다 큰 값에서도 정확한데, 수렴반경이 무한이라는 것이 실제로 확인됩니다.
둘째, 이항급수가 세 경우 모두 맞습니다. 특히 α=−1에서 1.31=0.7692307692가 나오는데, 이는 등비급수와 같은 것이므로 이항급수가 그것을 포함한다는 것을 보여 줍니다.
셋째, e−1/x2의 값이 이 강의에서 가장 인상적입니다. x=0.1에서 3.7×10−44이고, x10으로 나눠도 여전히 3.7×10−34입니다. 어떤 거듭제곱으로 나눠도 0으로 간다는 사실이 눈에 보입니다.x=0.01에서는 e−104이 배정밀도의 최소 표현값보다 작아 정확히 0이 됩니다. 모든 도함수가 0이 되는 이유가 이 극단적인 평평함입니다.
넷째, 심화 4의 두 적분이 소수 열 자리까지 정확합니다. 초등 원시함수가 없는 함수의 정적분을 열 자리까지 계산했습니다.Si(1) 쪽이 분모에 계승이 있어 훨씬 빨리 수렴합니다.
다섯째, 심화 5의 보정항 확인이 정확합니다. x=0.01에서 실제 값 −0.1666658333과 급수가 예측한 −61+120x2이 소수 열 자리까지 같습니다. 급수가 극한값뿐 아니라 그 근처의 거동까지 정확히 예측합니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 부분합이 함숫값과 일치한다고 급수가 수렴함이 증명되지는 않습니다. 특히 문제 4의 반례는 코드로 잡아낼 수 없습니다. e−1/x2의 급수가 0이라는 사실과 함숫값이 3.7×10−44이라는 사실을 나란히 놓으면 다르지만, 10−44과 0을 수치로 구별하는 것은 위태롭습니다. 증명은 심화 2의 귀납법으로 해야 합니다.
다음 57강에서 이 단원을 마칩니다. 이 강의에서 급수가 원함수와 같지 않을 수 있다고 했는데, 그렇다면 언제 같은지를 어떻게 확인합니까. 답은 유한한 항까지만 더한 뒤 남은 부분, 즉 나머지항을 평가하는 것입니다. 51강 심화 3에서 부분적분으로 그 나머지의 적분 표현을 이미 얻었고, 57강에서 평균값 정리로 더 쓰기 쉬운 형태를 만들어 실제 오차 계산에 씁니다.