mathpad
is a robust Computer Algebra System (CAS) library built on top of SymPy
, providing a simple and intuitive way to solve engineering, science, and math problems using Python.
- Install using package manager of choice. For example,
pip
:
pip install mathpad
- Import and use the library in
python
:
Code | Display |
from mathpad import *
v = 5 * m / s
mph = "mph" * miles / hour
eqn = mph == v.eval() |
Currently the only in-depth documentation is Walkthrough.ipynb
. You can access it on the JupyterLite Sandbox Site here.
Feature | Example | Display |
Units |
m
m / s ** 2
feet.in_units(cm)
(V * A).in_units(watt) |
|
Values |
v = 2.5 * m / s
c = m(5) |
|
Symbols |
t = "t" * seconds
y = "\\hat{y}_1" * volts |
|
Symbolic Functions |
a = "a(t)" * m / s ** 2 |
|
Equations |
eqn = (v == a * t) |
|
Solving |
sln, = solve([eqn], solve_for=[a])
sln[a] |
|
Algebra |
simplify(e ** (1j * pi))
expand((t + 1)(t + 2))
factor(t**2 + 3 * t * s + 2)
subs((t + 1)(t + 2), { t: 5 }) |
|
Calculus |
diff(a, wrt=t, order=1)
integral(a, wrt=t, between=(0, 10)) |
|
Vectors |
O = R3("O") # 3D frame of reference
v1 = O[1, 2, 3]
x, y, z = ("x", "y", "z") * m
v2 = O[x, y, z]
v3 = "v_3" @ O
v2.cross(v3) |
|
Matrices |
O2 = R2("O2")
A = Mat[O, O2](
[1, 2],
[3, 4],
[5, 6]
)
v2_wrt_O2 = v2 @ A
B = Mat[O2, O]("B")
I = Mat[O2, O2].I |
|
Numpy Compatibility |
y = sin(t)
y_fn = as_numpy_func(y)
y_fn({ t: [1, 2, 3] })
import numpy as np
y_fn({
t: np.arange(
start=0, stop=2 * np.pi, step=np.pi / 12
)
}) |
array([0.84147098, 0.90929743, 0.14112001])
array([0. , 0.25881905, 0.5 , 0.70710678, 0.8660254 , 0.96592583, 1. , 0.96592583, 0.8660254 , 0.70710678, 0.5 , 0.25881905]) |
Code Generation |
generate_c_code(theta, [t]) |
This package was created with Cookiecutter and the browniebroke/cookiecutter-pypackage project template.