Python implementation of solvers for differential algebraic equation's (DAEs) that should be added to scipy one day.
Project description
scipy_dae - solving differential algebraic equations in Python
Python implementation of solvers for differential algebraic equation's (DAEs) that should be added to scipy one day. See the GitHub repository.
Currently, two different methods are implemented.
- Implicit backward differentiation formula (BDF) of variable order with quasi-constant step-size and stability/ accuracy enhancement using numerical differentiation formula (NDF).
- Implicit Radau IIA methods of order 2s - 1 with arbitrary number of odd stages.
More information about both methods are given in the specific class documentation.
Basic usage
The Robertson problem of semi-stable chemical reaction is a simple system of differential algebraic equations of index 1. It demosntrates the basic usage of the package.
import numpy as np
import matplotlib.pyplot as plt
from scipy_dae.integrate import solve_dae
def F(t, y, yp):
"""Define implicit system of differential algebraic equations."""
y1, y2, y3 = y
y1p, y2p, y3p = yp
F = np.zeros(3, dtype=y.dtype)
F[0] = y1p - (-0.04 * y1 + 1e4 * y2 * y3)
F[1] = y2p - (0.04 * y1 - 1e4 * y2 * y3 - 3e7 * y2**2)
F[2] = y1 + y2 + y3 - 1 # algebraic equation
return F
# time span
t0 = 0
t1 = 1e7
t_span = (t0, t1)
t_eval = np.logspace(-6, 7, num=1000)
# initial conditions
y0 = np.array([1, 0, 0], dtype=float)
yp0 = np.array([-0.04, 0.04, 0], dtype=float)
# solver options
method = "Radau"
# method = "BDF" # alternative solver
atol = rtol = 1e-6
# solve DAE system
sol = solve_dae(F, t_span, y0, yp0, atol=atol, rtol=rtol, method=method, t_eval=t_eval)
t = sol.t
y = sol.y
# visualization
fig, ax = plt.subplots()
ax.set_xlabel("t")
ax.plot(t, y[0], label="y1")
ax.plot(t, y[1] * 1e4, label="y2 * 1e4")
ax.plot(t, y[2], label="y3")
ax.set_xscale("log")
ax.legend()
ax.grid()
plt.show()
Advanced usage
More examples are given in the examples directory, which includes
- Van der Pol oscillator
- Robertson problem
- Cartesian pendulum
- Cartesian pendulum (recursive)
- Particle on circular track
- Jay's nonlinear index 2 DAE
Install
An editable developer mode can be installed via
python -m pip install -e .[dev]
The tests can be started using
python -m pytest --cov
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
Built Distribution
File details
Details for the file scipy_dae-0.0.2.tar.gz
.
File metadata
- Download URL: scipy_dae-0.0.2.tar.gz
- Upload date:
- Size: 34.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fd9dafe7a39d68bca5941cd2bd95f459050fcc0bbe87316981caa69a931abe96 |
|
MD5 | 3fea2c24a9d8ec691fa68a034dbfdee1 |
|
BLAKE2b-256 | 480cbdc07693de775d1910589cc0237e25776c85c57b1c2f2605c28c40d84064 |
File details
Details for the file scipy_dae-0.0.2-py3-none-any.whl
.
File metadata
- Download URL: scipy_dae-0.0.2-py3-none-any.whl
- Upload date:
- Size: 44.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aba3e0580b52a7c640cf21d2c23785027362a83aae16e4a41da151ea837ad23c |
|
MD5 | 104d0a8fd51f8a8f6df55e7ea6fa00f9 |
|
BLAKE2b-256 | dc3cd2e1e36d9db8b19a15ee618ba858d843f787cbb54585c08c000e3a00b2b7 |