2019년 9월 14일 토요일

파이썬 SymPy 기호수학 - 7. 퓨리어 급수와 변환

파이썬 Sympy 기호수학 - 7. 퓨리어 급수와 변환

SymPy 사용법

SymPy 라이브러리를 불러오고, 기호 변수를 선언한다. 출력을 LaTex 수식으로 나타내고, 맷플롯립 모듈을 불러온다.

In [1]:
from sympy import *
          
x, y, z, t = symbols('x y z t')
f, g, h = symbols('f, g, h', cls=Function)

init_printing()
%matplotlib inline 

퓨리어 급수

주기가 $2 \pi$인 함수 $f(x)$를 퓨리어 급수로 나타내면

$$ f(x) = a_0 + \sum_{n=1}^{\infty} ( a_n \cos nx + b_n \sin nx ) $$

$$ \begin{eqnarray} a_0 &=& \frac 1 {2\pi} \int_{-\pi}^{\pi} f(x) dx \\ a_n &=& \frac 1 {\pi} \int_{-\pi}^{\pi} f(x) \cos nx dx \\ b_n &=& \frac 1 {\pi} \int_{-\pi}^{\pi} f(x) \sin nx dx \end{eqnarray} $$

[예제] Heaviside 계단 함수를 퓨리어 급수로 표현하기

In [2]:
Heaviside(x)
Out[2]:
$\displaystyle \theta\left(x\right)$
In [3]:
plot( Heaviside(x) )
Out[3]:
<sympy.plotting.plot.Plot at 0x222f62525c0>

Heaviside 계단 함수를 $(-\pi,\pi) $ 구간의 주기 함수로서 퓨리어 급수를 전개한다.

In [4]:
fourier_series( Heaviside(x), (x,-pi,pi) )
Out[4]:
$\displaystyle \frac{2 \sin{\left(x \right)}}{\pi} + \frac{2 \sin{\left(3 x \right)}}{3 \pi} + \frac{1}{2} + \ldots$

처음 4개의 항을 취하여 그래프로 나타내보면

In [5]:
s = _
s.truncate(4)
Out[5]:
$\displaystyle \frac{2 \sin{\left(x \right)}}{\pi} + \frac{2 \sin{\left(3 x \right)}}{3 \pi} + \frac{2 \sin{\left(5 x \right)}}{5 \pi} + \frac{1}{2}$
In [6]:
plot( s.truncate(4), (x,-2*pi,2*pi) )
Out[6]:
<sympy.plotting.plot.Plot at 0x222f6743b70>

10개의 항을 취하면, 계단함수에 더욱 가까워진다.

In [7]:
plot( s.truncate(10), (x,-2*pi,2*pi) )
Out[7]:
<sympy.plotting.plot.Plot at 0x222f65a3da0>

[예제] 함수 $f(x)=x$ 를 $(-\pi,\pi) $ 구간의 주기 함수로서 퓨리어 급수를 전개한다.

In [8]:
s = fourier_series( x, (x,-pi,pi) )
s
Out[8]:
$\displaystyle 2 \sin{\left(x \right)} - \sin{\left(2 x \right)} + \frac{2 \sin{\left(3 x \right)}}{3} + \ldots$
In [9]:
plot( s.truncate(10), (x,-2*pi,2*pi) )
Out[9]:
<sympy.plotting.plot.Plot at 0x222f79b4c18>

퓨리어 변환

함수 $f(x)$ 의 퓨리어 변환 $\hat f(w)$는 다음과 같이 정의된다. [Kreyszig]

$$ \begin{eqnarray} \hat f(w) &=& \frac 1 {\sqrt{2\pi}} \int _{-\infty} ^{\infty} f(x) e ^{-i w x} dx \\ f(x) &=& \frac 1 {\sqrt{2\pi}} \int _{-\infty} ^{\infty} \hat f(w) e ^{iwx} dw \end{eqnarray} $$

SymPy에서 퓨리어 변환 $F(k)$는 다음과 같이 정의된다. [Wikipedia]

$$ F(k) = \int _{-\infty} ^{\infty} f(x) e ^{-2\pi i k x} dx $$$$ f(x) = \int _{-\infty} ^{\infty} F(k) e ^{2\pi i k x} dk $$

퓨리어 변환에 관한 표현들이 서로 조금 다름에 유의하고, 두 정의를 비교하면 다음과 같다.

$$ w = 2 \pi k $$

$$ \hat f(w) = \frac 1 {\sqrt{2\pi}} F(k) $$

In [10]:
k, w = symbols('k w')
a = Symbol('a', positive=True)

Gaussian 함수 $\,\, e^{-a x^2 } \,\, a>0$

In [11]:
Fk = fourier_transform( exp(-a*x**2), x, k )
Fk
Out[11]:
$\displaystyle \frac{\sqrt{\pi} e^{- \frac{\pi^{2} k^{2}}{a}}}{\sqrt{a}}$

퓨리어 변환 $ \hat f(w) $ 로 나타내면

In [12]:
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
Out[12]:
$\displaystyle \frac{\sqrt{2} e^{- \frac{w^{2}}{4 a}}}{2 \sqrt{a}}$

지수함수 (좌우대칭) $\,\, e^{-a |x| } \,\, a>0$

In [13]:
Fk = fourier_transform( exp(-a*abs(x)), x, k )
Fk
Out[13]:
$\displaystyle \frac{2 a}{a^{2} + 4 \pi^{2} k^{2}}$
In [14]:
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
Out[14]:
$\displaystyle \frac{\sqrt{2} a}{\sqrt{\pi} \left(a^{2} + w^{2}\right)}$

지수함수 (양의 축) $\,\, e^{-a x } \theta (x) \,\,\, a>0, x>0$

In [15]:
Fk = fourier_transform( exp(-a*x)*Heaviside(x), x, k )
Fk
Out[15]:
$\displaystyle \frac{1}{a + 2 i \pi k}$
In [16]:
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
Out[16]:
$\displaystyle \frac{\sqrt{2}}{2 \sqrt{\pi} \left(a + i w\right)}$

델타함수 $\delta (x)$

In [17]:
Fk = fourier_transform( DiracDelta(x), x, k )
Fk
Out[17]:
$\displaystyle 1$
In [18]:
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
Out[18]:
$\displaystyle \frac{\sqrt{2}}{2 \sqrt{\pi}}$
In [19]:
fourier_transform( 1, x, k )
Out[19]:
$\displaystyle \mathcal{F}_{x}\left[1\right]\left(k\right)$

상수 1의 퓨리어 변환은 델타함수 $\delta (k)$이다.

SymPy에서 현재 지원되지 않고 있다.

[참고] 다른 형태의 표기법도 흔히 사용된다.

함수 $f(x)$ 의 퓨리어 변환은 다음과 같이 정의된다. [Boas]

$$ F (\alpha) = \frac 1 {2 \pi} \int _{-\infty} ^{\infty} f(x) e ^{-i \alpha x} dx $$$$ f(x) = \int _{-\infty} ^{\infty} F (\alpha) e ^{i \alpha x} d\alpha$$

함수 $f(x)$ 의 퓨리어 변환은 다음과 같이 정의된다. [Arfken]

$$ \begin{eqnarray} g(\omega) &=& \frac 1 {\sqrt{2\pi}} \int _{-\infty} ^{\infty} f(x) e ^{i \omega x} dx \\ f(x) &=& \frac 1 {\sqrt{2\pi}} \int _{-\infty} ^{\infty} g(\omega) e ^{-i \omega x} d \omega \end{eqnarray} $$

Numeric Analysis 4 - Numeric Linear Algebra

Numeric Analysis 4 - Numeric Linear Algebra Numeric Linear Algebra ¶ ...