SymPyでラプラス変換


先駆者様

Qiitaでは

Python: ラプラス変換(数式通り実装してみた)

という記事がありました。しかしインターネット上を調べてみるとSymPyなる便利なモジュールがあるようなので、それでラプラス変換をしてみましょう。

ラプラス変換

SymPyのラプラス変換機能を用いるためにはlaplace_transform関数を用います。

>>> import sympy as sp
>>> s, t = sp.symbols('s, t')
>>> w = sp.symbols('w', real=True)
>>> sp.laplace_transform(sp.cos(w*t), t, s)
(s/(s**2 + w**2), 0, Eq(Abs(periodic_argument(polar_lift(w)**2, oo)), 0))

上述の最終行の先頭がラプラス変換結果です。ここでは$\cos (wt)$を変数$t$から変数$s$の関数に変換しています。

ラプラス逆変換

$\frac{s}{s^2+w^2}$が逆変換によって$\cos$関数に戻ることも確認してみましょう。そのためにはinverse_laplace_transform関数を用います。変数$s$から変数$t$への変換であることに留意しましょう。

>>> expression = sp.laplace_transform(sp.cos(w*t), t, s)
>>> print(expression)
(s/(s**2 + w**2), 0, Eq(Abs(periodic_argument(polar_lift(w)**2, oo)), 0))
>>> sp.inverse_laplace_transform(expression[0], s, t)
cos(t*w)*Heaviside(t)

となり、無事に$\cos$関数に戻ってくることができました。

結言

なんとなく我が家にラプラス変換の本が転がっていたので、「これをPythonで行うにはどうすればよいのか?」という暇つぶし程度に考えていましたが、結果SymPyの威力を思い知らされた、そんな記事の仕上がりになりました。