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.14.0
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.14.0
_laplace_trabsform_expansion.py
laplace_tranform_() is the expanded version of laplace_transform()
subs_() is the modified function of sub() method
a, b = sympy.symbols("a, b", positive=True, constant=True)
n, m = sympy.symbols("n, m", positive=True, constant=True, integer=True)
t, tau, tau1, tau2 = sympy.symbols("t, tau, tau1, tau2", positive=True)
y = sympy.Function("y")
f = sympy.Function("f")
g = sympy.Function("g")
s = sympy.symbols("s")
Y = sympy.Function("Y")
F = sympy.Function("F")
G = sympy.Function("G")
Ly = laplace_transform_(y(t), t, s)
Lf = laplace_transform_(f(t), t, s)
Lg = laplace_transform_(g(t), t, s)eq = 1
Leq = laplace_transform_(eq, t, s)
Leq\(\displaystyle \frac{1}{s}\)
eq = t
Leq = laplace_transform_(eq, t, s)
Leq\(\displaystyle \frac{1}{s^{2}}\)
eq = sympy.exp(-3 *t)
Leq = laplace_transform_(eq, t, s)
Leq\(\displaystyle \frac{1}{s + 3}\)
eq = 2 *sympy.Heaviside(t -3)
Leq = laplace_transform_(eq, t, s)
Leq\(\displaystyle \frac{2 e^{- 3 s}}{s}\)
eq = sympy.sin(2 *t)**2
Leq = laplace_transform_(eq, t, s)
Leq\(\displaystyle \frac{2}{s^{2} + 4} + \frac{1}{s}\)
Leq = 1 / s**3
eq = inverse_laplace_transform(Leq, s, t)
eq\(\displaystyle \frac{t^{2}}{2}\)
Leq = (-2 *s +6) / (s**2 + 4)
eq = inverse_laplace_transform(Leq, s, t)
eq\(\displaystyle 3 \sin{\left(2 t \right)} - 2 \cos{\left(2 t \right)}\)
eq = y(t).diff(t, 2) +2 *y(t).diff(t) +10 *y(t)
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)}\)
Leq = subs_(laplace_transform_(eq, t, s), Ly, Y(s))
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 }}\)
ics = {y(0): 1, y(t).diff(t).subs(t, 0): 1}
Leq = Leq.subs(ics)
Leq\(\displaystyle s^{2} Y{\left(s \right)} + 2 s Y{\left(s \right)} - s + 10 Y{\left(s \right)} - 3\)
sol = sympy.solve(Leq, Y(s))[0]
sol\(\displaystyle \frac{s + 3}{s^{2} + 2 s + 10}\)
eq = sympy.integrate(g(tau1), (tau1, 0, t)) +sympy.integrate(sympy.integrate(f(tau2), (tau2, 0, tau1)), (tau1, 0, t))
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}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq = subs_(Leq, Lg, G(s))
Leq\(\displaystyle \frac{G{\left(s \right)}}{s} + \frac{F{\left(s \right)}}{s^{2}}\)
eq = sympy.integrate(f(tau)*g(t -tau), (tau, 0, t)) +sympy.integrate(f(t -tau)*g(tau), (tau, 0, t))
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\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq = subs_(Leq, Lg, G(s))
Leq\(\displaystyle 2 F{\left(s \right)} G{\left(s \right)}\)
eq = y(t) *sympy.exp(-a *t)
eq\(\displaystyle y{\left(t \right)} e^{- a t}\)
Leq = subs_(laplace_transform_(eq, t, s), Ly, Y(s))
Leq\(\displaystyle Y{\left(a + s \right)}\)
eq = f(t -a) *sympy.Heaviside(t -a)
eq\(\displaystyle f{\left(- a + t \right)} \theta\left(- a + t\right)\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq\(\displaystyle F{\left(s \right)} e^{- a s}\)
eq = g(t) *sympy.Heaviside(t -a)
eq\(\displaystyle g{\left(t \right)} \theta\left(- a + t\right)\)
Leq = laplace_transform_(eq, t, s)
Leq\(\displaystyle \mathcal{L}_{t}\left[g{\left(a + t \right)}\right]\left(s\right) e^{- a s}\)
eq = sympy.cos(t) *sympy.Heaviside(t -pi)
eq\(\displaystyle \cos{\left(t \right)} \theta\left(t - \pi\right)\)
Leq = laplace_transform_(eq, t, s)
Leq\(\displaystyle - \frac{s e^{- \pi s}}{s^{2} + 1}\)
eq = 3 *f(t) *t**m *t**n
eq\(\displaystyle 3 t^{m} t^{n} f{\left(t \right)}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq\(\displaystyle 3 \left(-1\right)^{n} \sum_{k_{1}=0}^{n} \frac{n! \frac{d^{k_{1}}}{d s^{k_{1}}} \left(-1\right)^{m} \frac{d^{m + \max\left(0, - k_{1} + n\right)}}{d s^{m + \max\left(0, - k_{1} + n\right)}} \mathcal{L}_{t}\left[f{\left(t \right)}\right]\left(s\right)}{k_{1}! \left(- k_{1} + n\right)!}\)
eq = t**n *t**m *f(t)*sympy.exp(-2*t)
eq\(\displaystyle t^{m} t^{n} f{\left(t \right)} e^{- 2 t}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq\(\displaystyle \left(-1\right)^{n} \sum_{k_{1}=0}^{n} \frac{n! \frac{d^{k_{1}}}{d s^{k_{1}}} \left(-1\right)^{m} \left. \frac{d^{m + \max\left(0, - k_{1} + n\right)}}{d s^{m + \max\left(0, - k_{1} + n\right)}} \mathcal{L}_{t}\left[f{\left(t \right)}\right]\left(s\right) \right|_{\substack{ s=s + 2 }}}{k_{1}! \left(- k_{1} + n\right)!}\)
eq = t**n *sympy.diff(f(t), t, t)
eq\(\displaystyle t^{n} \frac{d^{2}}{d t^{2}} f{\left(t \right)}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
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)\)
eq = t *sympy.integrate(f(tau), (tau, 0, t))
eq\(\displaystyle t \int\limits_{0}^{t} f{\left(\tau \right)}\, d\tau\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq.doit()\(\displaystyle - \frac{\frac{d}{d s} F{\left(s \right)}}{s} + \frac{F{\left(s \right)}}{s^{2}}\)
eq = t *f(t) *sympy.exp(-t)
eq\(\displaystyle t f{\left(t \right)} e^{- t}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq\(\displaystyle - \left. \frac{d}{d s} F{\left(s \right)} \right|_{\substack{ s=s + 1 }}\)
eq = t *sympy.diff(f(t), t) *sympy.exp(-4*t)
eq\(\displaystyle t e^{- 4 t} \frac{d}{d t} f{\left(t \right)}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
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)}\)
eq = sympy.exp(-a*t) *sympy.diff(f(t), t, t)
eq\(\displaystyle e^{- a t} \frac{d^{2}}{d t^{2}} f{\left(t \right)}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
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 }}\)
eq = sympy.exp(-4*t) *sympy.integrate(f(tau), (tau, 0, t))
eq\(\displaystyle e^{- 4 t} \int\limits_{0}^{t} f{\left(\tau \right)}\, d\tau\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
Leq\(\displaystyle \frac{F{\left(s + 4 \right)}}{s + 4}\)
eq = f(3*a*t)
eq\(\displaystyle f{\left(3 a t \right)}\)
Leq = subs_(laplace_transform_(eq, t, s), Lf, F(s))
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 \]
\(~\)
t = sympy.symbols('t', positive=True)
y = sympy.Function('y')
s = sympy.symbols('s', real=True)
Y = sympy.Function('Y')
Ly = laplace_transform_(y(t), t, s) ode = y(t).diff(t, 2) +2 *y(t).diff(t) +10 *y(t) -2 *sympy.sin(3*t)
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)}\)
Lode = subs_(laplace_transform_(ode, t, s), Ly, Y(s))
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}\)
ics = {y(0): 1, y(t).diff(t).subs(t, 0): 0}
Lode = Lode.subs(ics)
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}\)
Ysol = sympy.solve(Lode, Y(s))
Ysol[0]\(\displaystyle \frac{s^{3} + 2 s^{2} + 9 s + 24}{s^{4} + 2 s^{3} + 19 s^{2} + 18 s + 90}\)
Yp = sympy.apart(Ysol[0])
Yp\(\displaystyle - \frac{6 \left(2 s - 1\right)}{37 \left(s^{2} + 9\right)} + \frac{49 s + 92}{37 \left(s^{2} + 2 s + 10\right)}\)
ysol = sympy.inverse_laplace_transform(Yp.args[0], s, t) +sympy.inverse_laplace_transform(Yp.args[1], s, t)
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\]
\(~\)
s, t = sympy.symbols('s, t', positive=True)
y = sympy.Function('y')
Y = sympy.Function('Y')
Ly = laplace_transform_(y(t), t, s)
ode = t *y(t).diff(t, 2) +y(t).diff(t) +t *y(t)
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)}\)
\(~\)
ics={y(0): 1, y(t).diff(t).subs(t, 0): 0}
Lode = subs_(laplace_transform_(ode, t, s).subs(ics), Ly, Y(s))
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)}\)
sol = sympy.dsolve(Lode, Y(s), hint='separable')
sol\(\displaystyle Y{\left(s \right)} = \frac{C_{1}}{\sqrt{s^{2} + 1}}\)
y = inverse_laplace_transform(sol.rhs, s, t)
y\(\displaystyle C_{1} J_{0}\left(t\right)\)
c = sympy.Eq(y.subs(t, 0), 1)
c\(\displaystyle C_{1} = 1\)
y = y.subs(c.lhs, c.rhs)
y\(\displaystyle J_{0}\left(t\right)\)