diff --git a/README.md b/README.md index b1429b6..7f1ad31 100644 --- a/README.md +++ b/README.md @@ -1 +1,86 @@ -# LeGrandChien +# LeGrandChien - Système de Simulation Physique Symbolique + +## Description + +**LeGrandChien** est une bibliothèque Python pour la simulation de systèmes physiques complexes utilisant le calcul symbolique et les équations de Lagrange. Elle permet de définir des systèmes mécaniques (pendules, ressorts, chutes libres) de manière intuitive et de les résoudre numériquement. + +## Caractéristiques + +- **Calcul symbolique** : Manipulation d'expressions mathématiques symboliques (dérivées, différentielles partielles) +- **Équations de Lagrange** : Génération automatique des équations du mouvement +- **Résolution numérique** : Solveur utilisant la méthode de Newton-Raphson pour les systèmes différentiels +- **Compilation JIT** : Optimisation des calculs via compilation dynamique en Python + +## Structure du Projet + +``` +LeGrandChien/ +├── legrandchien.py # Bibliothèque principale +├── double_pendule.py # Exemple : pendule double +├── pendule_a_ressort.py # Exemple : pendule avec ressort +├── double_pendule_a_ressort.py # Exemple : double pendule avec ressorts +└── README.md # Ce fichier +``` + +## Installation + +```bash +# Dépendances requises +pip install numpy matplotlib tqdm +``` + +## API Principale + +### Classes + +#### `Const(value)` +Représente une constante numérique. + +#### `Var(name, degree=0)` +Représente une variable. Le `degree` indique l'ordre de dérivation. +- `Var("x")` : variable x +- `Var("d_x")` ou `x.diff()` : dérivée première +- `Var("d_d_x")` ou `x.diff(2)` : dérivée seconde + +#### `Equation` +Représente une expression mathématique complexe. Supporte les opérations : +- Arithmétiques : `+`, `-`, `*`, `/` +- Trigonométriques : `sin()`, `cos()` +- Calcul : `.diff()`, `.partial(var_name)` + +### Méthodes principales + +- `equation.diff()` : Dérivée totale (par rapport au temps) +- `equation.partial(var_name)` : Dérivée partielle +- `equation.evaluate(dico)` : Évalue l'expression avec un dictionnaire de valeurs +- `equation.solve(init, tmax, dt, progress_bar)` : Résout le système différentiel + +## Exemples d'Exécution + +Des exemples sont disponibles du moins complexes au plus complexes: +- pendule simple +- pendule à ressort +- double pendule +- double pendule à ressort + +Chacun sont découpés en deux parties: +- La formalisation et la résolution du problème +- L'animation du résultat avec matplotlib, indépendant du projet + +## Algorithme de Résolution + +1. **Générer les équations du mouvement** via les équations d'Euler-Lagrange +2. **Résoudre à chaque pas de temps** : + - Itération de Newton-Raphson pour trouver les accélérations + - Intégration d'Euler pour mettre à jour positions et vitesses +3. **Compiler les expressions** en fonctions Python pour optimiser les calculs + +## Limitations et Améliorations Futures + +- Améliorer la précision numérique (Runge-Kutta au lieu d'Euler) +- Support des forces externes et frottements +- Amélioration de l'utilisation des symboles + +## Licence + +Libre d'utilisation