Skip to content

CallumJHays/mathpad

Repository files navigation

mathpad

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.

Quickstart

  1. Install using package manager of choice. For example, pip:
pip install mathpad
  1. Import and use the library in python:
Code Display
from mathpad import *

v = 5 * m / s

mph = "mph" * miles / hour
eqn = mph == v.eval()

Alt text

Documentation

Currently the only in-depth documentation is Walkthrough.ipynb. You can access it on the JupyterLite Sandbox Site here.

Showcase

Feature Example Display
Units
m

m / s ** 2

feet.in_units(cm)

(V * A).in_units(watt)

Alt text

Values
v = 2.5 * m / s

c = m(5)

Alt text

Symbols
t = "t" * seconds

y = "\\hat{y}_1" * volts

Alt text

Symbolic Functions
a = "a(t)" * m / s ** 2

Alt text

Equations
eqn = (v == a * t)

Alt text

Solving
sln, = solve([eqn], solve_for=[a])

sln[a]

Alt text

Algebra
simplify(e ** (1j * pi))

expand((t + 1)(t + 2))

factor(t**2 + 3 * t * s + 2)

subs((t + 1)(t + 2), { t: 5 })

Alt text

Calculus
diff(a, wrt=t, order=1)


integral(a, wrt=t, between=(0, 10))

Alt text

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)

Alt text

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

Alt text

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

Credits

This package was created with Cookiecutter and the browniebroke/cookiecutter-pypackage project template.