|
4 | 4 |
|
5 | 5 | # DifferentialLab |
6 | 6 |
|
7 | | -**Numerical ODE, difference equation, and PDE solver with a graphical interface for scientists, engineers, and students.** |
| 7 | +Numerical ODE, difference-equation, and PDE solver with a desktop GUI for science and engineering workflows. |
8 | 8 |
|
9 | 9 | [](https://www.python.org/) |
10 | 10 | [](license.md) |
11 | 11 | [](https://github.com/DOKOS-TAYOS/DifferentialLab) |
12 | 12 | [](https://github.com/DOKOS-TAYOS/DifferentialLab) |
13 | | -[](https://scipy.org/) |
14 | | -[](https://numpy.org/) |
15 | | -[](https://matplotlib.org/) |
16 | 13 |
|
17 | | -[📖 **Documentation**](docs/index.md) • [🐛 **Report Bug**](https://github.com/DOKOS-TAYOS/DifferentialLab/issues) • [💡 **Request Feature**](https://github.com/DOKOS-TAYOS/DifferentialLab/issues) |
| 14 | +[Documentation](docs/index.md) | |
| 15 | +[Report Bug](https://github.com/DOKOS-TAYOS/DifferentialLab/issues) | |
| 16 | +[Request Feature](https://github.com/DOKOS-TAYOS/DifferentialLab/issues) |
18 | 17 |
|
19 | 18 | </div> |
20 | 19 |
|
21 | | ---- |
22 | | - |
23 | | -## Features |
24 | | - |
25 | | -- **ODEs**: Six methods (RK45, RK23, DOP853, Radau, BDF, LSODA) via SciPy |
26 | | -- **Difference equations**: Recurrence relations (geometric growth, logistic map, Fibonacci, etc.) |
27 | | -- **PDEs**: 2D elliptic solver (Poisson, Laplace) plus general operator-based PDEs with configurable derivative terms |
28 | | -- **Vector ODEs**: Coupled systems with animation, 3D phase-space trajectories, and surface visualization |
29 | | -- **Unified f-notation**: Write equations using `f[0]` (function), `f[1]` (first derivative), `f[i,k]` (component i, derivative k for vector ODEs) |
30 | | -- **Predefined equations**: Harmonic oscillator, pendulum, Van der Pol, Lorenz, Lotka-Volterra, Duffing, Schrödinger, and more |
31 | | -- **Complex Problems** *(experimental)*: Special cases with custom UIs (e.g. coupled harmonic oscillators). Still in development; may contain bugs. |
32 | | -- **Function transforms**: Fourier (FFT), Laplace, Taylor series, Hilbert, Z-transform |
33 | | -- **Custom equations**: Write any ODE, difference equation, or PDE in Python syntax |
34 | | -- **Interactive result tabs**: Select derivatives to plot, choose phase-space axes, switch visualization modes without re-solving |
35 | | -- **Professional plots**: Solution curves, phase portraits (2D/3D), surface/contour, vector animation |
36 | | -- **Statistics**: Mean, max/min, period, energy, RMS, residual error metrics |
37 | | -- **Export**: CSV, JSON, PNG/JPG/PDF, MP4 animation |
38 | | -- **Configurable** via `.env` file or in-app Configuration dialog |
39 | | -- **Desktop GUI** built with Tkinter/ttk |
| 20 | +## What It Solves |
| 21 | + |
| 22 | +- ODEs with SciPy integrators (`RK45`, `RK23`, `DOP853`, `Radau`, `BDF`, `LSODA`) |
| 23 | +- Difference equations (recurrence systems) |
| 24 | +- PDEs (elliptic 2D solver and operator-based PDE workflows) |
| 25 | +- Vector ODE systems with dedicated visualization modes |
| 26 | +- Function transforms (Fourier, Laplace, Taylor, Hilbert, Z-transform) |
| 27 | + |
| 28 | +## Core Features |
| 29 | + |
| 30 | +- Predefined equation catalog loaded from YAML (`config/equations/*.yaml`) |
| 31 | +- Custom equation parsing with safe AST validation |
| 32 | +- Unified `f[...]` notation (`f[0]`, `f[1]`, `f[i,k]`) |
| 33 | +- Interactive result dialogs (derivative selection, phase-space selection, dynamic redraw) |
| 34 | +- Export to CSV, JSON, static figures, and MP4 animations |
| 35 | +- Configurable UI/plot/solver behavior via `.env` or in-app configuration dialog |
| 36 | + |
| 37 | +## Complex Problems (Plugin Mode) |
| 38 | + |
| 39 | +`Complex Problems` is a plugin-style subsystem for specialized models with custom UI, solver, and result dialogs. |
| 40 | + |
| 41 | +Current modules: |
| 42 | + |
| 43 | +- `coupled_oscillators` (1D coupled oscillators and FPUT variants) |
| 44 | +- `membrane_2d` (2D coupled nonlinear membrane) |
| 45 | +- `nonlinear_waves` (NLSE and KdV) |
| 46 | +- `schrodinger_td` (time-dependent Schrodinger in 1D/2D) |
| 47 | +- `antenna_radiation` (far-field patterns and antenna metrics) |
| 48 | +- `aerodynamics_2d` (2D incompressible obstacle flow approximations) |
| 49 | +- `pipe_flow` (steady and transient 1D pipe-flow models) |
40 | 50 |
|
41 | 51 | ## Requirements |
42 | 52 |
|
43 | | -- Python 3.12 or higher |
44 | | -- Windows 10/11, macOS 10.14+, or Linux |
45 | | -- 4 GB RAM minimum |
| 53 | +- Python `>=3.12` |
| 54 | +- Windows 10/11, macOS, or Linux |
| 55 | +- Tkinter available in the Python runtime (GUI requirement) |
46 | 56 |
|
47 | 57 | ## Quick Start |
48 | 58 |
|
49 | | -### Installation (first-time setup) |
| 59 | +### First-time setup |
50 | 60 |
|
51 | | -**Windows:** |
52 | | -``` |
| 61 | +Windows: |
| 62 | + |
| 63 | +```bat |
53 | 64 | install.bat |
54 | 65 | ``` |
55 | 66 |
|
56 | | -**Linux/macOS:** |
| 67 | +Linux/macOS: |
| 68 | + |
57 | 69 | ```bash |
58 | 70 | chmod +x install.sh |
59 | 71 | ./install.sh |
60 | 72 | ``` |
61 | 73 |
|
62 | | -This clones the repository (if needed) and runs setup. |
| 74 | +### Existing clone |
63 | 75 |
|
64 | | -### Manual setup (existing clone) |
| 76 | +Windows: |
65 | 77 |
|
66 | | -1. Create virtual environment and install dependencies: |
67 | | -```bash |
68 | | -# Windows |
| 78 | +```bat |
69 | 79 | bin\setup.bat |
70 | | - |
71 | | -# Linux/macOS |
72 | | -chmod +x bin/setup.sh |
73 | | -./bin/setup.sh |
| 80 | +bin\run.bat |
74 | 81 | ``` |
75 | 82 |
|
76 | | -2. Run the application: |
77 | | -```bash |
78 | | -# Windows |
79 | | -bin\run.bat |
| 83 | +Linux/macOS: |
80 | 84 |
|
81 | | -# Linux/macOS |
| 85 | +```bash |
| 86 | +chmod +x bin/setup.sh bin/run.sh |
| 87 | +./bin/setup.sh |
82 | 88 | ./bin/run.sh |
83 | 89 | ``` |
84 | 90 |
|
85 | | -Or run directly: |
| 91 | +Direct run: |
| 92 | + |
86 | 93 | ```bash |
87 | 94 | python src/main_program.py |
88 | 95 | ``` |
89 | 96 |
|
90 | | -## Configuration |
91 | | - |
92 | | -Copy `.env.example` to `.env` and customize, or use the in-app **Configuration** dialog. |
| 97 | +Installed console entry point: |
93 | 98 |
|
94 | | -Available settings: |
95 | | -- UI theme (colors, fonts, padding, tooltips) |
96 | | -- Plot style (line, markers, fonts, phase-space, 3D/contour, animation) |
97 | | -- Solver defaults (method, tolerances) |
98 | | -- Logging and update check |
| 99 | +```bash |
| 100 | +differential-lab |
| 101 | +``` |
99 | 102 |
|
100 | 103 | ## Documentation |
101 | 104 |
|
102 | | -Full documentation is built with [Sphinx](https://www.sphinx-doc.org/) and hosted on Read the Docs. |
| 105 | +- [Documentation Home](docs/index.md) |
| 106 | +- [Getting Started](docs/getting-started.md) |
| 107 | +- [User Guide](docs/user-guide.md) |
| 108 | +- [Complex Problems Guide](docs/complex-problems.md) |
| 109 | +- [Configuration Reference](docs/configuration.md) |
| 110 | +- [Architecture](docs/architecture.md) |
| 111 | +- [Developer Guide](docs/developer-guide.md) |
| 112 | +- [Testing](docs/testing.md) |
| 113 | +- [API Reference](docs/api/index.md) |
103 | 114 |
|
104 | | -To build the docs locally: |
| 115 | +To build docs locally: |
105 | 116 |
|
106 | 117 | ```bash |
107 | 118 | pip install -e ".[docs]" |
108 | 119 | cd docs |
109 | | -make html # Linux/macOS |
110 | | -make.bat html # Windows |
| 120 | +make html # Linux/macOS |
| 121 | +make.bat html # Windows |
111 | 122 | ``` |
112 | 123 |
|
113 | | -The output will be in `docs/_build/html/`. |
| 124 | +Output directory: `docs/_build/html/`. |
114 | 125 |
|
115 | | -Documentation contents: |
116 | | -- **Getting Started** — installation, setup, first run |
117 | | -- **User Guide** — walk-through of the complete workflow |
118 | | -- **Configuration Reference** — every `.env` setting explained |
119 | | -- **Architecture** — module structure and design decisions |
120 | | -- **API Reference** — auto-generated from source docstrings |
| 126 | +## Development |
121 | 127 |
|
122 | | -## Dependencies |
| 128 | +Install development dependencies: |
123 | 129 |
|
124 | | -| Package | Version | Purpose | |
125 | | -|----------------|-------------|-----------------------------| |
126 | | -| NumPy | >= 2.0 | Numerical computations | |
127 | | -| Matplotlib | >= 3.10 | Plotting and visualization | |
128 | | -| SciPy | >= 1.15 | ODE solving engine | |
129 | | -| python-dotenv | >= 1.0 | Environment configuration | |
130 | | -| PyYAML | >= 6.0 | Equation definitions | |
| 130 | +```bash |
| 131 | +pip install -e ".[dev]" |
| 132 | +``` |
131 | 133 |
|
132 | | -## License |
| 134 | +Run tests: |
133 | 135 |
|
134 | | -MIT License. See [license.md](license.md). |
| 136 | +```bash |
| 137 | +pytest |
| 138 | +``` |
135 | 139 |
|
136 | | -Third-party licenses: see [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md). |
| 140 | +Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md). |
137 | 141 |
|
138 | | -## Author |
| 142 | +## License |
| 143 | + |
| 144 | +MIT License. See [license.md](license.md). |
139 | 145 |
|
140 | | -**Alejandro Mata Ali** |
| 146 | +Third-party licenses: [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md). |
0 commit comments