import sympy
from sympy import laplace_transform, inverse_laplace_transform, pi
sympy.init_printing()
from IPython.display import display
print("sympy: ", sympy.__version__)
sympy: 1.12
import sympy
from sympy import laplace_transform, inverse_laplace_transform, pi
sympy.init_printing()
from IPython.display import display
print("sympy: ", sympy.__version__)
sympy: 1.12
_laplace_trabsform_expansion.py
laplace_tranform_()
is the expanded version of laplace_transform()
subs_()
is the modified function of sub()
method
= sympy.symbols("a, b", positive=True, constant=True)
a, b = sympy.symbols("n, m", positive=True, constant=True, integer=True)
n, m
= sympy.symbols("t, tau, tau1, tau2", positive=True)
t, tau, tau1, tau2
= sympy.Function("y")
y = sympy.Function("f")
f = sympy.Function("g")
g
= sympy.symbols("s")
s
= sympy.Function("Y")
Y = sympy.Function("F")
F = sympy.Function("G")
G
= laplace_transform_(y(t), t, s)
Ly = laplace_transform_(f(t), t, s)
Lf = laplace_transform_(g(t), t, s) Lg
= 1
eq = laplace_transform_(eq, t, s)
Leq Leq
\(\displaystyle \frac{1}{s}\)
= t
eq = laplace_transform_(eq, t, s)
Leq Leq
\(\displaystyle \frac{1}{s^{2}}\)
= sympy.exp(-3 *t)
eq = laplace_transform_(eq, t, s)
Leq Leq
\(\displaystyle \frac{1}{s + 3}\)
= 2 *sympy.Heaviside(t -3)
eq = laplace_transform_(eq, t, s)
Leq Leq
\(\displaystyle \frac{2 e^{- 3 s}}{s}\)
= sympy.sin(2 *t)**2
eq = laplace_transform_(eq, t, s)
Leq Leq
\(\displaystyle \frac{2}{s^{2} + 4} + \frac{1}{s}\)
= 1 / s**3
Leq = inverse_laplace_transform(Leq, s, t)
eq eq
\(\displaystyle \frac{t^{2}}{2}\)
= (-2 *s +6) / (s**2 + 4)
Leq = inverse_laplace_transform(Leq, s, t)
eq eq
\(\displaystyle 3 \sin{\left(2 t \right)} - 2 \cos{\left(2 t \right)}\)
= y(t).diff(t, 2) +2 *y(t).diff(t) +10 *y(t)
eq eq
\(\displaystyle 10 y{\left(t \right)} + 2 \frac{d}{d t} y{\left(t \right)} + \frac{d^{2}}{d t^{2}} y{\left(t \right)}\)
= subs_(laplace_transform_(eq, t, s), Ly, Y(s))
Leq Leq
\(\displaystyle s^{2} Y{\left(s \right)} + 2 s Y{\left(s \right)} - s y{\left(0 \right)} + 10 Y{\left(s \right)} - 2 y{\left(0 \right)} - \left. \frac{d}{d t} y{\left(t \right)} \right|_{\substack{ t=0 }}\)
= {y(0): 1, y(t).diff(t).subs(t, 0): 1}
ics
= Leq.subs(ics)
Leq Leq
\(\displaystyle s^{2} Y{\left(s \right)} + 2 s Y{\left(s \right)} - s + 10 Y{\left(s \right)} - 3\)
= sympy.solve(Leq, Y(s))[0]
sol sol
\(\displaystyle \frac{s + 3}{s^{2} + 2 s + 10}\)
= sympy.integrate(g(tau1), (tau1, 0, t)) +sympy.integrate(sympy.integrate(f(tau2), (tau2, 0, tau1)), (tau1, 0, t))
eq eq
\(\displaystyle \int\limits_{0}^{t} g{\left(\tau_{1} \right)}\, d\tau_{1} + \int\limits_{0}^{t}\int\limits_{0}^{\tau_{1}} f{\left(\tau_{2} \right)}\, d\tau_{2}\, d\tau_{1}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq = subs_(Leq, Lg, G(s))
Leq Leq
\(\displaystyle \frac{G{\left(s \right)}}{s} + \frac{F{\left(s \right)}}{s^{2}}\)
= sympy.integrate(f(tau)*g(t -tau), (tau, 0, t)) +sympy.integrate(f(t -tau)*g(tau), (tau, 0, t))
eq eq
\(\displaystyle \int\limits_{0}^{t} f{\left(\tau \right)} g{\left(t - \tau \right)}\, d\tau + \int\limits_{0}^{t} f{\left(t - \tau \right)} g{\left(\tau \right)}\, d\tau\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq = subs_(Leq, Lg, G(s))
Leq Leq
\(\displaystyle 2 F{\left(s \right)} G{\left(s \right)}\)
= y(t) *sympy.exp(-a *t)
eq eq
\(\displaystyle y{\left(t \right)} e^{- a t}\)
= subs_(laplace_transform_(eq, t, s), Ly, Y(s))
Leq Leq
\(\displaystyle Y{\left(a + s \right)}\)
= f(t -a) *sympy.Heaviside(t -a)
eq eq
\(\displaystyle f{\left(- a + t \right)} \theta\left(- a + t\right)\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle F{\left(s \right)} e^{- a s}\)
= g(t) *sympy.Heaviside(t -a)
eq eq
\(\displaystyle g{\left(t \right)} \theta\left(- a + t\right)\)
= laplace_transform_(eq, t, s)
Leq Leq
\(\displaystyle \mathcal{L}_{t}\left[g{\left(a + t \right)}\right]\left(s\right) e^{- a s}\)
= sympy.cos(t) *sympy.Heaviside(t -pi)
eq eq
\(\displaystyle \cos{\left(t \right)} \theta\left(t - \pi\right)\)
= laplace_transform_(eq, t, s)
Leq Leq
\(\displaystyle - \frac{s e^{- \pi s}}{s^{2} + 1}\)
= 3 *f(t) *t**m *t**n
eq eq
\(\displaystyle 3 t^{m} t^{n} f{\left(t \right)}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle 3 \left(-1\right)^{m + n} \frac{d^{m + n}}{d s^{m + n}} F{\left(s \right)}\)
= t**n *t**m *f(t)*sympy.exp(-2*t)
eq eq
\(\displaystyle t^{m} t^{n} f{\left(t \right)} e^{- 2 t}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle \left(-1\right)^{m + n} \left. \frac{d^{m + n}}{d s^{m + n}} F{\left(s \right)} \right|_{\substack{ s=s + 2 }}\)
= t**n *sympy.diff(f(t), t, t)
eq eq
\(\displaystyle t^{n} \frac{d^{2}}{d t^{2}} f{\left(t \right)}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle \left(-1\right)^{n} \frac{d^{n}}{d s^{n}} \left(s^{2} F{\left(s \right)} - s f{\left(0 \right)} - \left. \frac{d}{d t} f{\left(t \right)} \right|_{\substack{ t=0 }}\right)\)
= t *sympy.integrate(f(tau), (tau, 0, t))
eq eq
\(\displaystyle t \int\limits_{0}^{t} f{\left(\tau \right)}\, d\tau\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq.doit()
\(\displaystyle - \frac{\frac{d}{d s} F{\left(s \right)}}{s} + \frac{F{\left(s \right)}}{s^{2}}\)
= t *f(t) *sympy.exp(-t)
eq eq
\(\displaystyle t f{\left(t \right)} e^{- t}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle - \left. \frac{d}{d s} F{\left(s \right)} \right|_{\substack{ s=s + 1 }}\)
= t *sympy.diff(f(t), t) *sympy.exp(-4*t)
eq eq
\(\displaystyle t e^{- 4 t} \frac{d}{d t} f{\left(t \right)}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle - \left(s + 4\right) \left. \frac{d}{d s} F{\left(s \right)} \right|_{\substack{ s=s + 4 }} - F{\left(s + 4 \right)}\)
= sympy.exp(-a*t) *sympy.diff(f(t), t, t)
eq eq
\(\displaystyle e^{- a t} \frac{d^{2}}{d t^{2}} f{\left(t \right)}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle \left(a + s\right)^{2} F{\left(a + s \right)} - \left(a + s\right) f{\left(0 \right)} - \left. \frac{d}{d t} f{\left(t \right)} \right|_{\substack{ t=0 }}\)
= sympy.exp(-4*t) *sympy.integrate(f(tau), (tau, 0, t))
eq eq
\(\displaystyle e^{- 4 t} \int\limits_{0}^{t} f{\left(\tau \right)}\, d\tau\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle \frac{F{\left(s + 4 \right)}}{s + 4}\)
= f(3*a*t)
eq eq
\(\displaystyle f{\left(3 a t \right)}\)
= subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq Leq
\(\displaystyle \frac{F{\left(\frac{s}{3 a} \right)}}{3 a}\)
\(~\)
A technique that can be used to solve certain ODE problems is to Laplace transform the ODE, which for many problems results in an algebraic equation that is easier to solve. The solution to the algebraic equation can then be transformed back to the original domain with an inverse Laplace transform, to obtain the solution to the original problem. For example, consider the following differential equation for a driven harmonic oscillator:
\[ \frac{d^2 y}{dt^2} + 2\frac{dy}{dt} +10 y = 2\sin 3t \]
\(~\)
= sympy.symbols('t', positive=True)
t = sympy.Function('y')
y
= sympy.symbols('s', real=True)
s = sympy.Function('Y')
Y
= laplace_transform_(y(t), t, s) Ly
= y(t).diff(t, 2) +2 *y(t).diff(t) +10 *y(t) -2 *sympy.sin(3*t)
ode ode
\(\displaystyle 10 y{\left(t \right)} - 2 \sin{\left(3 t \right)} + 2 \frac{d}{d t} y{\left(t \right)} + \frac{d^{2}}{d t^{2}} y{\left(t \right)}\)
= subs_(laplace_transform_(ode, t, s), Ly, Y(s))
Lode Lode
\(\displaystyle s^{2} Y{\left(s \right)} + 2 s Y{\left(s \right)} - s y{\left(0 \right)} + 10 Y{\left(s \right)} - 2 y{\left(0 \right)} - \left. \frac{d}{d t} y{\left(t \right)} \right|_{\substack{ t=0 }} - \frac{6}{s^{2} + 9}\)
= {y(0): 1, y(t).diff(t).subs(t, 0): 0}
ics = Lode.subs(ics)
Lode Lode
\(\displaystyle s^{2} Y{\left(s \right)} + 2 s Y{\left(s \right)} - s + 10 Y{\left(s \right)} - 2 - \frac{6}{s^{2} + 9}\)
= sympy.solve(Lode, Y(s))
Ysol 0] Ysol[
\(\displaystyle \frac{s^{3} + 2 s^{2} + 9 s + 24}{s^{4} + 2 s^{3} + 19 s^{2} + 18 s + 90}\)
= sympy.apart(Ysol[0])
Yp Yp
\(\displaystyle - \frac{6 \cdot \left(2 s - 1\right)}{37 \left(s^{2} + 9\right)} + \frac{49 s + 92}{37 \left(s^{2} + 2 s + 10\right)}\)
= sympy.inverse_laplace_transform(Yp.args[0], s, t) +sympy.inverse_laplace_transform(Yp.args[1], s, t)
ysol ysol
\(\displaystyle \frac{2 \sin{\left(3 t \right)}}{37} - \frac{12 \cos{\left(3 t \right)}}{37} + \frac{43 e^{- t} \sin{\left(3 t \right)}}{111} + \frac{49 e^{- t} \cos{\left(3 t \right)}}{37}\)
In some instances, the Laplace transform can be used to solve linear differential equations with variable monomial coefficients
\[ty'' + y' +ty =0, \;\;y(0)=1, \;y'(0)=0\]
\(~\)
= sympy.symbols('s, t', positive=True)
s, t
= sympy.Function('y')
y = sympy.Function('Y')
Y = laplace_transform_(y(t), t, s)
Ly
= t *y(t).diff(t, 2) +y(t).diff(t) +t *y(t)
ode ode
\(\displaystyle t y{\left(t \right)} + t \frac{d^{2}}{d t^{2}} y{\left(t \right)} + \frac{d}{d t} y{\left(t \right)}\)
\(~\)
={y(0): 1, y(t).diff(t).subs(t, 0): 0}
ics
= subs_(laplace_transform_(ode, t, s).subs(ics), Ly, Y(s))
Lode Lode.doit().collect(Y(s).diff(s))
\(\displaystyle - s Y{\left(s \right)} + \left(- s^{2} - 1\right) \frac{d}{d s} Y{\left(s \right)}\)
= sympy.dsolve(Lode, Y(s), hint='separable')
sol sol
\(\displaystyle Y{\left(s \right)} = \frac{C_{1}}{\sqrt{s^{2} + 1}}\)
= inverse_laplace_transform(sol.rhs, s, t)
y y
\(\displaystyle C_{1} J_{0}\left(t\right)\)
= sympy.Eq(y.subs(t, 0), 1)
c c
\(\displaystyle C_{1} = 1\)
= y.subs(c.lhs, c.rhs)
y y
\(\displaystyle J_{0}\left(t\right)\)