LaplaPy is a professional-grade Python library for:
- Symbolic Laplace transforms with rigorous Region of Convergence (ROC) analysis
- Linear ODE solving via Laplace methods, including initial conditions
- Control system analysis: pole-zero maps, stability checks, frequency/time responses
- Educational, step-by-step output modes for teaching and self-study
Designed for engineers, scientists, and researchers in control theory, signal processing, electrical/mechanical systems, and applied mathematics.
- Forward & Inverse Laplace with automatic ROC determination
- ODE Solver: direct transform–solve–invert workflow for linear constant-coefficient equations
- Pole-Zero Analysis: identify all poles and zeros symbolically
- Stability Assessment: evaluate pole locations in the complex plane
- Frequency Response & Bode: generate magnitude/phase plots data for
ω ∈ [ω_min, ω_max] - Time-Domain Response: compute response to arbitrary inputs (e.g., steps, impulses, sinusoids)
- Causal/Non-Causal Modes: model physical vs. mathematical systems
- Step-by-Step Tracing: verbose mode to print every algebraic step (educational)
From PyPI:
pip install LaplaPyFrom source (dev):
git clone https://github.com/4211421036/LaplaPy.git
cd LaplaPy
pip install -e .[dev]Dependencies: sympy>=1.10, numpy.
from LaplaPy import LaplaceOperator, t, s
# f(t) = e^{-3t} + sin(2t)
op = LaplaceOperator("exp(-3*t) + sin(2*t)", show_steps=False)
F_s = op.forward_laplace()
print("F(s) =", F_s) # 1/(s+3) + 2/(s^2+4)
print("ROC:", op.roc) # Re(s) > -3# Recover f(t)
f_recov = op.inverse_laplace()
print("f(t) =", f_recov) # exp(-3*t) + sin(2*t)from sympy import Eq, Function, Derivative, exp
f = Function('f')(t)
ode = Eq(Derivative(f, t, 2) + 3*Derivative(f, t) + 2*f,
exp(-t))
# ICs: f(0)=0, f'(0)=1
sol = LaplaceOperator(0).solve_ode(node,
{f.subs(t,0):0, Derivative(f,t).subs(t,0):1})
print(sol) # (e^{-t} - e^{-2t})# H(s) = (s+1)/(s^2+0.2*s+1)
op = LaplaceOperator("(s+1)/(s**2+0.2*s+1)")
op.forward_laplace()
analysis = op.system_analysis()
# poles, zeros, stability
defp print(analysis)
# Bode data
ω, mag_db, phase = op.bode_plot(w_min=0.1, w_max=100, points=200)# Response to sin(4t)
r = op.time_domain_response("sin(4*t)")
print(r)The LaplaPy console script provides a quick interface:
# Laplace transform + 2nd derivative:
LaplaPy "exp(-2*t)*sin(3*t)" --laplace
# Inverse Laplace:
LaplaPy "1/(s**2+4)" --inverse
# Solve ODE with ICs:
LaplaPy "f''(t)+4*f(t)=exp(-t)" --ode \
--ic "f(0)=0" "f'(0)=1"Flags:
--laplace(-L) : forward transform--inverse(-I): inverse transform--ode(-O) : solve ODE--ic: initial conditions--quiet: suppress verbose steps--causal/--noncausal: choose system causality
- For causal signals:
$\mathrm{Re}(s) > \max(\mathrm{Re}(\text{poles}))$ - ROC ensures transform integrals converge and stability criteria
-
Poles: roots of denominator
$D(s)=0$ -
Zeros: roots of numerator
$N(s)=0$ - Stability: all poles in left-half complex plane
# Install dev extras
pip install -e .[dev]
# Run test suite
pytest -q
# Lint with ruff
ruff .
# Type-check (mypy)
mypy LaplaPyDistributed under the MIT License. See LICENSE for details.
@software{LaplaPy,
author = {GALIH RIDHO UTOMO},
title = {LaplaPy: Advanced Symbolic Laplace Transform Analysis},
year = {2025},
url = {https://github.com/4211421036/LaplaPy},
version = {0.2.2}
}