SymPy 사용법¶
SymPy 라이브러리를 불러오고, 기호 변수를 선언한다. 출력을 LaTex 수식으로 나타내고, 맷플롯립 모듈을 불러온다.
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π인 함수 f(x)를 퓨리어 급수로 나타내면
f(x)=a0+∞∑n=1(ancosnx+bnsinnx)
a0=12π∫π−πf(x)dxan=1π∫π−πf(x)cosnxdxbn=1π∫π−πf(x)sinnxdx[예제] Heaviside 계단 함수를 퓨리어 급수로 표현하기
Heaviside(x)
plot( Heaviside(x) )
Heaviside 계단 함수를 (−π,π) 구간의 주기 함수로서 퓨리어 급수를 전개한다.
fourier_series( Heaviside(x), (x,-pi,pi) )
처음 4개의 항을 취하여 그래프로 나타내보면
s = _
s.truncate(4)
plot( s.truncate(4), (x,-2*pi,2*pi) )
10개의 항을 취하면, 계단함수에 더욱 가까워진다.
plot( s.truncate(10), (x,-2*pi,2*pi) )
[예제] 함수 f(x)=x 를 (−π,π) 구간의 주기 함수로서 퓨리어 급수를 전개한다.
s = fourier_series( x, (x,-pi,pi) )
s
plot( s.truncate(10), (x,-2*pi,2*pi) )
퓨리어 변환¶
함수 f(x) 의 퓨리어 변환 ˆf(w)는 다음과 같이 정의된다. [Kreyszig]
ˆf(w)=1√2π∫∞−∞f(x)e−iwxdxf(x)=1√2π∫∞−∞ˆf(w)eiwxdwSymPy에서 퓨리어 변환 F(k)는 다음과 같이 정의된다. [Wikipedia]
F(k)=∫∞−∞f(x)e−2πikxdxf(x)=∫∞−∞F(k)e2πikxdk퓨리어 변환에 관한 표현들이 서로 조금 다름에 유의하고, 두 정의를 비교하면 다음과 같다.
w=2πkˆf(w)=1√2πF(k)
k, w = symbols('k w')
a = Symbol('a', positive=True)
Gaussian 함수 e−ax2a>0
Fk = fourier_transform( exp(-a*x**2), x, k )
Fk
퓨리어 변환 ˆf(w) 로 나타내면
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
지수함수 (좌우대칭) e−a|x|a>0
Fk = fourier_transform( exp(-a*abs(x)), x, k )
Fk
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
지수함수 (양의 축) e−axθ(x)a>0,x>0
Fk = fourier_transform( exp(-a*x)*Heaviside(x), x, k )
Fk
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
델타함수 δ(x)
Fk = fourier_transform( DiracDelta(x), x, k )
Fk
fw = Fk.subs( k, w/(2*pi) ) / sqrt(2*pi)
fw
fourier_transform( 1, x, k )
상수 1의 퓨리어 변환은 델타함수 δ(k)이다.
SymPy에서 현재 지원되지 않고 있다.
[참고] 다른 형태의 표기법도 흔히 사용된다.
함수 f(x) 의 퓨리어 변환은 다음과 같이 정의된다. [Boas]
F(α)=12π∫∞−∞f(x)e−iαxdxf(x)=∫∞−∞F(α)eiαxdα함수 f(x) 의 퓨리어 변환은 다음과 같이 정의된다. [Arfken]
g(ω)=1√2π∫∞−∞f(x)eiωxdxf(x)=1√2π∫∞−∞g(ω)e−iωxdω