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
라플라스 변환¶
함수 $f(t)$ 의 라플라스 변환은 다음과 같이 정의된다.
$$ F(s) = \int _0 ^{\infty} e ^{-st} f(t) dt $$sympy의 라플라스 변환과 역변환 모듈을 도입한다. 변수 $s$ 와 상수들을 선언한다.
from sympy.integrals.transforms import laplace_transform
from sympy.integrals.transforms import inverse_laplace_transform
s = symbols('s')
a, ω = symbols('a ω', constant=True, positive=True)
n = symbols('n', constant=True, integer=True)
$f(t)=1$ 의 라플라스 변환
laplace_transform( 1, t, s )
첫번째 결과가 라플라스 변환이고, 나머지들은 수렴 조건과 관련된 사항들이다.
라플라스 변환만 출력하려면, noconds=True 옵션을 추가한다.
laplace_transform( 1, t, s, noconds=True )
$f(t)=t^a$ 의 라플라스 변환
laplace_transform( t**a, t, s, noconds=True )
$f(t)=t^n$ 의 라플라스 변환
laplace_transform( t**n, t, s, noconds=True )
$f(t)=e^{at}$ 의 라플라스 변환
laplace_transform( exp(a*t), t, s, noconds=True )
Heaviside 계단 함수 $ \theta (t-a) $
Heaviside( t-a )
Heaviside 계단 함수 $ \theta (t-a) $ 의 라플라스 변환
laplace_transform( Heaviside(t-a), t, s, noconds=True )
Dirac 델타 함수 $ \delta (t-a) $
DiracDelta(t-a)
Dirac 델타 함수 $ \delta (t-a) $ 의 라플라스 변환
laplace_transform( DiracDelta(t-a), t, s, noconds=True )
$ \sin \omega t $ 의 라플라스 변환
laplace_transform( sin(ω*t), t, s, noconds=True )
$ \cos \omega t $ 의 라플라스 변환
laplace_transform( cos(ω*t), t, s, noconds=True )
$ \frac 1 s $ 의 역변환은 Heaviside 계단함수
inverse_laplace_transform( 1/s, s, t )
$ \frac 1 {s^2} $ 의 역변환
inverse_laplace_transform( 1/s**2, s, t )
$ \frac 1 {s^n} $ 의 역변환
inverse_laplace_transform( 1/s**n, s, t )
$ e^{-as} $ 의 역변환은 델타함수
inverse_laplace_transform( exp(-a*s), s, t )
inverse_laplace_transform( 1, s, t )
상미분방정식의 초기값 문제의 해를 구한다.
$$ y'' + y' + 9y = 0 , \qquad y(0) = 0.16, \quad y'(0)=0 $$도함수에 대한 라플라스 변환의 공식은 다음과 같다.
공식을 이용하여, 미분 방정식을 $Y(s)$ 에 대한 대수 방정식으로 기술한다.
y0 = 0.16 ; yp0 = 0
Y = Symbol('Y')
Ly = Y
Lyp = s*Y - y0
Lypp = s**2 * Y - s*y0 - yp0
eqn = Eq( Lypp + Lyp + 9*Ly, 0)
eqn
$Y(s)$ 에 대한 방정식을 푼다.
solve( eqn, Y )
nsimplify() 함수를 사용하여, 수식의 숫자들을 유리수로 바꿔주면 역변환이 더 용이하다.
Y = _[0].nsimplify()
Y
역변환을 구한다.
y = inverse_laplace_transform( Y, s, t )
y
결과를 그래프로 그린다.
plot( y, xlim=(0,10) )
<sympy.plotting.plot.Plot at 0x207a94d4a60>
Last updated in 2022.4