Skip to main content

Symbolic Laplace transforms & ODE solving with step-by-step output

Project description

LaplaPy: Advanced Symbolic Laplace Transform Analysis

PyPI Version PyPI Downloads GitHub Actions License: MIT


Overview

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.


Features

  1. Forward & Inverse Laplace with automatic ROC determination
  2. ODE Solver: direct transform–solve–invert workflow for linear constant-coefficient equations
  3. Pole-Zero Analysis: identify all poles and zeros symbolically
  4. Stability Assessment: evaluate pole locations in the complex plane
  5. Frequency Response & Bode: generate magnitude/phase plots data for ω ∈ [ω_min, ω_max]
  6. Time-Domain Response: compute response to arbitrary inputs (e.g., steps, impulses, sinusoids)
  7. Causal/Non-Causal Modes: model physical vs. mathematical systems
  8. Step-by-Step Tracing: verbose mode to print every algebraic step (educational)

Installation

From PyPI:

pip install LaplaPy

From source (dev):

git clone https://github.com/4211421036/LaplaPy.git
cd LaplaPy
pip install -e .[dev]

Dependencies: sympy>=1.10, numpy.


Quickstart Examples

1. Basic Laplace Transform

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

2. Inverse Transform

# Recover f(t)
f_recov = op.inverse_laplace()
print("f(t) =", f_recov)    # exp(-3*t) + sin(2*t)

3. Solve ODE

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})

4. System Analysis & Bode Data

# 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)

5. Time-Domain Response

# Response to sin(4t)
r = op.time_domain_response("sin(4*t)")
print(r)

CLI Usage

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

📚 Mathematical Foundations

Laplace Transform Definition

$$ \mathcal{L}{f(t)}(s) = \int_{0^-}^{\infty} e^{-st}f(t),dt $$

Derivative Property

$$ \mathcal{L}{f^{(n)}(t)}(s) = s^nF(s)-\sum_{k=0}^{n-1}s^{n-1-k}f^{(k)}(0^+) $$

Region of Convergence (ROC)

  • For causal signals: $\mathrm{Re}(s) > \max(\mathrm{Re}(\text{poles}))$
  • ROC ensures transform integrals converge and stability criteria

Pole-Zero & Stability

  • Poles: roots of denominator $D(s)=0$
  • Zeros: roots of numerator $N(s)=0$
  • Stability: all poles in left-half complex plane

Frequency Response

$$ H(j\omega)=H(s)\big|_{s=j\omega} =|H(j\omega)|e^{j\angle H(j\omega)} $$


Development & Testing

# Install dev extras
pip install -e .[dev]

# Run test suite
pytest -q

# Lint with ruff
ruff .

# Type-check (mypy)
mypy LaplaPy

License

Distributed under the MIT License. See LICENSE for details.


Citation

@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}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

laplapy-0.2.6.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

laplapy-0.2.6-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file laplapy-0.2.6.tar.gz.

File metadata

  • Download URL: laplapy-0.2.6.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for laplapy-0.2.6.tar.gz
Algorithm Hash digest
SHA256 1b8794dff0cca5497587219fb4682723c0df4e92c591d7fe93e95784d9edaaef
MD5 08d45c8e3fd4d122909de33598903577
BLAKE2b-256 78d59c2d277e6f5c9fc51b82820dce912d129a4f6c64ae4ddb4341742d11a3f5

See more details on using hashes here.

File details

Details for the file laplapy-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: laplapy-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for laplapy-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 c63e71441b8c63c2efe1071b906742a913f8d285bef7cbf48976ece6a83cbf59
MD5 350d17d17820b5680f2d173d9fb07424
BLAKE2b-256 697b75d76f5e6bf9adcc7932fe9fad6433cf6e60724356a4e02da093c66ec1c6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page