서론
테일러 다항식은 한 점에서 함수값과 유한 차수까지의 도함수 값을 일치시켜 그 점 근처의 함수를 근사합니다. 이 미분계수로 만든 무한 합이 테일러 급수이며, 전개 중심이 0이면 매클로린 급수라고 합니다. 급수가 수렴하는지와 그 합이 원래 함수와 같은지는 따로 확인해야 합니다.
지수 함수와 삼각 함수의 근사를 예로 들어 계수를 정하는 방법, 등식이 성립하는 조건, 유한 개의 항에서 잘랐을 때의 오차를 설명합니다. 마지막에는 0 근처의 \(\sin x\)를 파이썬으로 근사하는 학습용 예제를 제시합니다.
왜 다항식으로 함수를 근사하는가?
애초에 왜 함수를 다항식( \(a + bx + cx^2 + \dots\) )으로 표현해야 할까요?
flowchart LR
A["전개 중심 근처에서 해석적인 함수"] -->|"수렴 범위 안의 테일러 전개"| B["거듭제곱급수"]
B -->|"유한 항에서 절단"| C["다항식 근사"]
C -->|"기본 사칙연산만"| D["고속 컴퓨터 계산"]
비선형 함수를 다항식으로 근사하면 함수값 계산, 미분, 적분이 쉬워질 수 있습니다. 계수를 정한 뒤에는 덧셈과 곱셈으로 다항식의 값을 계산할 수 있습니다. 다만 어느 범위에서 얼마나 정확한 근사인지는 나머지 항과 수치 계산 오차로 판단해야 합니다.
매클로린 급수의 직관적 이해
먼저 \(x=0\) 근처에서 함수를 근사하는 매클로린 전개를 생각해 봅시다. 함수 \(f\)가 0 근처에서 필요한 차수까지 미분 가능하다고 가정합니다. 유한한 차수 \(n\)을 정하고 다음 다항식 \(P_n\)의 계수를 구합니다.
\[ P_n(x) = c_0 + c_1 x + c_2 x^2 + \dots + c_n x^n \]0에서의 함수값과 각 차수의 도함수 값을 일치시켜 계수를 정합니다. 아래의 이계도함수 조건은 \(n\ge2\)일 때 적용됩니다.
- 함수값 조건: \(P_n(0)=f(0)\)이므로 \(c_0=f(0)\)입니다. 상수항이 0에서의 함수값을 맞춥니다.
- 일계도함수 조건: \(P_n'(0)=f'(0)\)이므로 \(c_1=f'(0)\)입니다. \(P_1(x)=f(0)+f'(0)x\)는 0에서의 접선 근사입니다.
- 이계도함수 조건: \(P_n''(0)=f''(0)\)을 요구합니다. \(P_n''(0)=2c_2\)이므로 \(c_2=f''(0)/2!\)입니다. 고차항이 있는 일반적인 \(P_n\)에서는 \(P_n''(x)\) 전체가 상수 \(2c_2\)인 것은 아닙니다.
- 일반적인 조건: \(k\le n\)에 대해 \(P_n^{(k)}(0)=f^{(k)}(0)\)을 요구하면 \(c_k=f^{(k)}(0)/k!\)로 정해집니다. 중심 근처의 오차는 뒤에서 설명할 나머지 항으로 평가합니다.
매클로린 급수의 공식과 유도
\(f\)가 무한 번 미분 가능하면 이 계수들로 매클로린 급수를 만들 수 있습니다. 그러나 다음처럼 원래 함수 \(f(x)\)와 등호로 연결하려면 그 점에서 급수가 \(f(x)\)로 수렴해야 합니다. 예를 들어 0 근처에서 해석적인 함수라면 적절한 근방 안에서 등식이 성립합니다. 무한 번 미분 가능하다는 조건만으로는 충분하지 않습니다.
\[ f(x) = f(0) + f'(0)x + \frac{f''(0)}{2!}x^2 + \frac{f^{(3)}(0)}{3!}x^3 + \dots \]시그마 표기법을 사용하여 작성하면 다음과 같습니다.
\[ f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(0)}{n!} x^n \]여기서 \(f^{(n)}(0)\)는 함수 \(f(x)\)를 \(n\)번 미분하고 \(x=0\)을 대입하여 얻은 값이며, \(n!\)는 \(n\)의 팩토리얼( \(n \times (n-1) \times \dots \times 1\) )을 나타냅니다.
대표적인 함수의 매클로린 급수
다음 지수 함수, 사인, 코사인 급수는 모든 실수 \(x\)에서 각각의 원래 함수로 수렴합니다. 삼각 함수의 인수는 라디안으로 나타냅니다.
1. 지수 함수 \(e^x\)
지수 함수 \(f(x) = e^x\)는 아무리 여러 번 미분해도 \(e^x\)로 유지됩니다. 따라서 \(x=0\)을 대입하면 모든 차수의 미분 계수가 \(1\)이 됩니다( \(f^{(n)}(0) = 1\) ).
\[ e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \dots = \sum_{n=0}^{\infty} \frac{x^n}{n!} \]2. 삼각 함수 \(\sin x\)와 \(\cos x\)
\(\sin x\)를 반복해서 미분하면 \(\cos x, -\sin x, -\cos x, \sin x, \dots\) 와 같이 주기적으로 변합니다. \(x=0\)을 대입하면 홀수 차수의 미분 계수만 남고 짝수 차수는 \(0\)이 됩니다.
\[ \sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \dots = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n+1)!} x^{2n+1} \]마찬가지로 \(\cos x\)의 경우 짝수 차수의 항만 남습니다.
\[ \cos x = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \dots = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n)!} x^{2n} \]테일러 급수로의 확장
중심을 0에서 \(a\)로 옮기면 테일러 급수가 됩니다. \(f\)가 \(a\) 근처에서 해석적이라면, 급수가 원래 함수를 나타내는 범위 안에서 다음 등식이 성립합니다. 유한 차수까지의 미분 가능성만을 가정하는 근사는 뒤에서 설명할 유한 테일러 다항식과 나머지 항으로 다룹니다.
\[ f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \dots = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n \]이 공식은 \(x=a\)에서 약간 떨어진 위치( \(x = a + \Delta x\) )에서 함수의 값을 예측하고자 할 때 그 힘을 발휘합니다.
테일러 급수의 응용
물리학에서의 선형 근사
물리학에서는 테일러 다항식을 이용한 선형 근사를 자주 사용합니다. 진자의 각도 \(\theta\)를 라디안으로 나타내고 \(|\theta|\ll1\)이라고 가정하면 사인의 일차 근사를 사용할 수 있습니다.
\[ \sin \theta \approx \theta \quad (\theta \text{가 충분히 작을 때}) \]이 근사는 진자의 운동 방정식을 선형화하며, 작은 진폭 근사 안에서 주기가 진폭에 의존하지 않는다는 등시성을 줍니다. 실제 단진자의 주기는 진폭에 따라 달라지므로 큰 진폭의 진동에 같은 근사를 적용할 수는 없습니다.
프로그래밍과 수치 계산
함수의 수치 계산에는 다항식 근사를 비롯한 여러 방법이 사용됩니다. CPython의 math 모듈은 주로 플랫폼의 C 수학 라이브러리를 호출하며, 구체적인 알고리즘은 구현에 따라 다릅니다. 다음은 \(|x|\le1\)과 같이 0 근처에서 적은 수의 항을 더하는 학습용 예제이며, 표준 라이브러리 내부 구현을 재현하는 코드는 아닙니다.
| |
수렴 반지름과 테일러 정리
수렴 반지름 \(R\)은 거듭제곱급수가 수렴하는 범위 \(|x-a|<R\)을 정하는, 중심 \(a\)로부터의 거리를 나타내는 수입니다. 구간 자체의 이름은 아닙니다. \(R=0\)이나 \(R=\infty\)일 수도 있습니다. 끝점 \(|x-a|=R\)은 별도로 조사해야 합니다. 예를 들어 \(\ln(1+x)\)의 매클로린 급수는 수렴 반지름이 1이고, 실수 범위 \(-1<x\le1\)에서 함수와 같습니다. \(x=1\)에서는 조건 수렴하고 \(x=-1\)에서는 발산합니다.
유한 근사에서는 \(a\)와 \(x\)를 잇는 구간에서 \(f\)가 \(C^{n+1}\)급이라고 가정하면 테일러 정리에 의해 다음이 성립합니다.
\[ f(x)=P_{n,a}(x)+R_n(x),\qquad P_{n,a}(x)=\sum_{k=0}^{n}\frac{f^{(k)}(a)}{k!}(x-a)^k \]\[ R_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1} \]여기서 \(\xi\)는 \(a\)와 \(x\) 사이에 있습니다. 구간에서 \(|f^{(n+1)}|\le M\)이면 \(|R_n(x)|\le M|x-a|^{n+1}/(n+1)!\)입니다. 원래 함수와 무한 테일러 급수의 일치를 보이려면, 예를 들어 \(n\to\infty\)일 때 이 나머지가 0으로 가는지 확인할 수 있습니다.
위 코드는 10개 항, 즉 \(x^{19}\)까지 더합니다. 사인의 20차 계수는 0이므로 테일러 정리에 따른 \(x=1\)에서의 절단 오차는 \(1/21!\) 이하로, 약 \(1.96\times10^{-20}\)입니다. 다만 이는 실수에서 정확하게 계산한 유한 합의 오차이며, 파이썬 부동소수점 연산의 반올림 오차는 별개입니다. math.sin의 출력 역시 비교용 부동소수점 값으로, 수학적인 정확한 값 자체는 아닙니다.
매끄럽지만 테일러 급수가 원래 함수를 나타내지 않는 예
\[ g(x)=\begin{cases}e^{-1/x},&x>0,\\0,&x\le0.\end{cases} \]이 함수는 무한 번 미분 가능하며 0에서 모든 차수의 도함수 값이 0입니다. 따라서 0에서의 테일러 급수는 항등적으로 0이고 모든 \(x\)에서 수렴합니다. 그러나 \(x>0\)이면 \(g(x)>0\)이므로 급수의 합이 원래 함수와 같지 않습니다. 급수의 수렴과 원래 함수와의 일치를 구별하는 예입니다.
결론
테일러 다항식은 국소 근사를 만들고, 나머지 항은 그 오차를 평가합니다. 테일러 급수를 등식으로 사용할 때는 수렴 범위와 원래 함수와의 일치를 확인해야 합니다. 이 차이를 이해하면 물리학이나 수치 계산에서 근사를 사용할 때 필요한 정확도와 적용 범위를 판단하기 쉬워집니다.
