# ojasrane/ordinary-differential-equations architecture

> Architecture diagram of the GitHub repository ojasrane/ordinary-differential-equations, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ojasrane/ordinary-differential-equations
- Repository: https://github.com/ojasrane/ordinary-differential-equations

## Overview

This educational ODE project takes a user’s equation, interval, step size, and initial or boundary conditions and returns fixed-step numerical solution arrays. Its runtime has separate scalar/second-order and state-vector IVP methods, plus a finite-difference BVP solver whose tridiagonal system is solved with the Thomas algorithm. Example scripts use IVP methods to compute trajectories for animated demonstrations; notebooks explain numerical methods and model results. README documents additional notebook and animation topics beyond the sampled scripts; those links are shown at their supported directory paths.

Main entry points: [`solver/ivp.py`](https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/ivp.py) (Scalar IVP methods), [`analysis`](https://github.com/ojasrane/ordinary-differential-equations/tree/main/analysis) (Method walkthroughs), [`solver/bvp.py`](https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/bvp.py) (Finite-difference BVP), [`animation_scripts/simple_pendulum.py`](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/simple_pendulum.py) (Pendulum demos)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_solvers["Numerical solvers"]
  node_ivp["Scalar IVP methods<br/>[ivp.py]"]
  node_stateivp["State-vector IVP methods<br/>[ivp.py]"]
  node_bvp["Finite-difference BVP<br/>[bvp.py]"]
  node_thomas["Thomas elimination<br/>[bvp.py]"]
end

subgraph group_learning["Learning materials"]
  node_notebooks["Method walkthroughs"]
  node_ivpnotes["IVP derivations"]
  node_bvpnotes["BVP derivation"]
  node_popnotes["Population models"]
  node_erfnotes["Error function"]
end

subgraph group_demos["Animated models"]
  node_demos["Animation examples"]
  node_pendulum["Pendulum demos<br/>[simple_pendulum.py]"]
  node_doublependulum["Double pendulum<br/>[double_pendulum.py]"]
  node_lorenz["Lorenz attractor"]
  node_spring["Spring-mass demos<br/>[spring_mass.py]"]
  node_damped["Damped oscillator<br/>[damped_shm.py]"]
  node_population["Population animation"]
  node_erfanimation["Error animation<br/>[erf.py]"]
end

node_user(("Learner or researcher"))
node_numpy["NumPy"]
node_matplotlib["Matplotlib"]

node_user -->|"provides IVP"| node_ivp
node_user -->|"provides state IVP"| node_stateivp
node_user -->|"provides BVP"| node_bvp
node_ivp -->|"uses arrays"| node_numpy
node_stateivp -->|"uses arrays"| node_numpy
node_bvp -->|"uses arrays"| node_numpy
node_bvp -->|"eliminates diagonals"| node_thomas
node_user -->|"studies methods"| node_notebooks
node_notebooks -->|"includes"| node_ivpnotes
node_notebooks -->|"includes"| node_bvpnotes
node_notebooks -->|"includes"| node_popnotes
node_notebooks -->|"includes"| node_erfnotes
node_user -->|"runs examples"| node_demos
node_pendulum -->|"integrates"| node_ivp
node_doublependulum -->|"integrates"| node_stateivp
node_lorenz -->|"integrates"| node_stateivp
node_spring -->|"integrates"| node_ivp
node_damped -->|"integrates"| node_ivp
node_population -->|"integrates"| node_ivp
node_erfanimation -->|"integrates"| node_ivp
node_pendulum -->|"animates results"| node_matplotlib
node_doublependulum -->|"animates results"| node_matplotlib
node_lorenz -->|"animates results"| node_matplotlib
node_spring -->|"animates results"| node_matplotlib
node_damped -->|"animates results"| node_matplotlib
node_population -->|"animates results"| node_matplotlib
node_erfanimation -->|"animates results"| node_matplotlib

click node_ivp "https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/ivp.py"
click node_stateivp "https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/ivp.py"
click node_bvp "https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/bvp.py"
click node_thomas "https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/bvp.py"
click node_notebooks "https://github.com/ojasrane/ordinary-differential-equations/tree/main/analysis"
click node_ivpnotes "https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/solving_ivp_problems.ipynb"
click node_bvpnotes "https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/solving_bvp_problems_using_fdm.ipynb"
click node_popnotes "https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/population_models.ipynb"
click node_erfnotes "https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/erf_function_using_ode.ipynb"
click node_demos "https://github.com/ojasrane/ordinary-differential-equations/tree/main/animation_scripts"
click node_pendulum "https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/simple_pendulum.py"
click node_doublependulum "https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/double_pendulum.py"
click node_lorenz "https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/lorenz_attractor.py"
click node_spring "https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/spring_mass.py"
click node_damped "https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/damped_shm.py"
click node_population "https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/population_modelling.py"
click node_erfanimation "https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/erf.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_ivp,node_stateivp,node_bvp,node_thomas toneBlue
class node_notebooks,node_ivpnotes,node_bvpnotes,node_popnotes,node_erfnotes toneAmber
class node_demos,node_pendulum,node_doublependulum,node_lorenz,node_spring,node_damped,node_population,node_erfanimation toneMint
class node_user,node_numpy,node_matplotlib toneIndigo
```

## Components

### Numerical solvers

- [Scalar IVP methods](https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/ivp.py): `solver/ivp.py`
- [State-vector IVP methods](https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/ivp.py): `solver/ivp.py`
- [Finite-difference BVP](https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/bvp.py): `solver/bvp.py`
- [Thomas elimination](https://github.com/ojasrane/ordinary-differential-equations/blob/main/solver/bvp.py): `solver/bvp.py`

### Learning materials

- [Method walkthroughs](https://github.com/ojasrane/ordinary-differential-equations/tree/main/analysis): `analysis`
- [IVP derivations](https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/solving_ivp_problems.ipynb): `analysis/solving_ivp_problems.ipynb`
- [BVP derivation](https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/solving_bvp_problems_using_fdm.ipynb): `analysis/solving_bvp_problems_using_fdm.ipynb`
- [Population models](https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/population_models.ipynb): `analysis/population_models.ipynb`
- [Error function](https://github.com/ojasrane/ordinary-differential-equations/blob/main/analysis/erf_function_using_ode.ipynb): `analysis/erf_function_using_ode.ipynb`

### Animated models

- [Animation examples](https://github.com/ojasrane/ordinary-differential-equations/tree/main/animation_scripts): `animation_scripts`
- [Pendulum demos](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/simple_pendulum.py): `animation_scripts/simple_pendulum.py`
- [Double pendulum](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/double_pendulum.py): `animation_scripts/double_pendulum.py`
- [Lorenz attractor](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/lorenz_attractor.py): `animation_scripts/lorenz_attractor.py`
- [Spring-mass demos](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/spring_mass.py): `animation_scripts/spring_mass.py`
- [Damped oscillator](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/damped_shm.py): `animation_scripts/damped_shm.py`
- [Population animation](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/population_modelling.py): `animation_scripts/population_modelling.py`
- [Error animation](https://github.com/ojasrane/ordinary-differential-equations/blob/main/animation_scripts/erf.py): `animation_scripts/erf.py`

### Other components

- **Learner or researcher**
- **NumPy**
- **Matplotlib**

## Connections

- Learner or researcher → Scalar IVP methods: provides IVP
- Learner or researcher → State-vector IVP methods: provides state IVP
- Learner or researcher → Finite-difference BVP: provides BVP
- Scalar IVP methods → NumPy: uses arrays
- State-vector IVP methods → NumPy: uses arrays
- Finite-difference BVP → NumPy: uses arrays
- Finite-difference BVP → Thomas elimination: eliminates diagonals
- Learner or researcher → Method walkthroughs: studies methods
- Method walkthroughs → IVP derivations: includes
- Method walkthroughs → BVP derivation: includes
- Method walkthroughs → Population models: includes
- Method walkthroughs → Error function: includes
- Learner or researcher → Animation examples: runs examples
- Pendulum demos → Scalar IVP methods: integrates
- Double pendulum → State-vector IVP methods: integrates
- Lorenz attractor → State-vector IVP methods: integrates
- Spring-mass demos → Scalar IVP methods: integrates
- Damped oscillator → Scalar IVP methods: integrates
- Population animation → Scalar IVP methods: integrates
- Error animation → Scalar IVP methods: integrates
- Pendulum demos → Matplotlib: animates results
- Double pendulum → Matplotlib: animates results
- Lorenz attractor → Matplotlib: animates results
- Spring-mass demos → Matplotlib: animates results
- Damped oscillator → Matplotlib: animates results
- Population animation → Matplotlib: animates results
- Error animation → Matplotlib: animates results
