Aller au contenu principal

Scipy - Calcul scientifique

Ce que ce chapitre apporte

  • Comprendre le principe de la résolution numérique (intégration temporelle).
  • Utiliser la fonction odeint de la bibliothèque SciPy.
  • Maîtriser le concept de Vecteur d'État pour résoudre des équations du 2nd ordre (comme F=ma).
  • Simuler des systèmes couplés (mouvement en X et Y simultané).

Les figures s'affichent dans la page. NumPy, Matplotlib et SciPy sont installés dans l'éditeur du navigateur : l'image apparaît sous le code après exécution. On peut aussi recopier ces exemples sur la machine, ils y fonctionnent à l'identique.

Dans le chapitre précédent, on a appris à manipuler des tableaux avec NumPy et à tracer des courbes avec Matplotlib. C'est parfait pour traiter des données existantes.

Mais en mécanique, l'objectif est souvent de prédire l'avenir : savoir où sera un boulet de canon dans 10 secondes ou comment oscillera un pendule. Pour cela, on dispose des lois de Newton (sumvecF=mveca\\sum \\vec{F} = m\\vec{a}), qui sont des équations différentielles.

Résoudre ces équations à la main devient vite impossible dès que les frottements ou des géométries complexes (comme un planeur) entrent en jeu. C'est ici qu'intervient la bibliothèque SciPy.

1. SciPy et le module Integrate

C'est quoi SciPy ?

Alors que NumPy fournit les "briques" (les tableaux), SciPy (Scientific Python) fournit les "outils" pour l'ingénieur : traitement du signal, optimisation, statistiques et, ce qui nous intéresse ici, l'intégration d'équations différentielles.

L'outil que nous allons utiliser est odeint (Ordinary Differential Equation Integrator). C'est le standard industriel pour résoudre des systèmes dynamiques.

main.py
Sortie
>_ Prêt à exécuter…

Comment "pense" odeint ?

Pour utiliser odeint, on doit comprendre que l'ordinateur ne connaît pas la physique. Il ne connaît pas "la gravité" ou "les frottements". Il ne connaît qu'une seule chose : La Pente (la dérivée).

La résolution numérique fonctionne toujours selon le même schéma en 3 étapes :

  • L'État actuel (S) : "Je suis ici, à cette vitesse."
  • La Dérivée (S′) : "Selon les lois de la physique (Newton), je varie de tant."
  • L'Intégration : "Je calcule le point suivant."

La syntaxe

La fonction odeint s'utilise toujours avec 3 arguments principaux.

Syntaxe : Solution = odeint(Modele, Conditions_Initiales, Temps)

  • Modele : C'est le nom de la fonction Python qui contient les équations de Newton (PFD). Elle doit renvoyer les dérivées.
  • Conditions_Initiales : L'état du système à t=0 (Position et Vitesse de départ).
  • Temps : Le tableau NumPy des instants où on veut calculer la position (créé avec linspace).

Le concept du Vecteur d'État (S)

Une équation différentielle mécanique est souvent du 2ème ordre (elle contient une accélération x¨). Or, odeint ne sait résoudre que des équations du 1er ordre (y′=f(y)).

L'astuce consiste à grouper la position et la vitesse dans un seul vecteur appelé Vecteur d'État S.

Pour un mouvement 1D (comme la chute libre), on pose : S=beginbmatrixpositionvitesseendbmatrixS = \\begin{bmatrix} position \\ vitesse \\end{bmatrix}

On doit alors fournir à Python la dérivée de ce vecteur (S′ ou Sp dans le code) : S=fracdSdt=beginbmatrixdotpositiondotvitesseendbmatrix=beginbmatrixvitesseacceˊleˊrationendbmatrixS' = \\frac{dS}{dt} = \\begin{bmatrix} \\dot{position} \\ \\dot{vitesse} \\end{bmatrix} = \\begin{bmatrix} vitesse \\ accélération \\end{bmatrix}

Pourquoi cette astuce ?

Cela transforme un problème d'accélération (complexe) en un système simple :

  • La dérivée de la position → C'est la vitesse (c'est une définition).
  • La dérivée de la vitesse → C'est l'accélération (c'est Newton : ∑F/m).

Cette étape est essentielle pour résoudre des systèmes mécaniques avec odeint.

3. Mise en pratique : Résolution d'une équation simple

Prenons l'exemple du boulet de canon ou d'une chute avec frottement.

Supposons l'équation : dotv=gfrackmv\\dot{v} = -g - \\frac{k}{m}v.

Voici la structure obligatoire d'un script de résolution :

main.py
Sortie
>_ Prêt à exécuter…

4. Résolution du 2nd Ordre (Exemple du Pendule)

Pour le pendule (et le planeur), on a une position et une vitesse. Le vecteur SS a donc deux cases.

L'équation du pendule est : ddottheta=fracgLsin(theta)\\ddot{\\theta} = -\\frac{g}{L}\\sin(\\theta).

main.py
Sortie
>_ Prêt à exécuter…

5. Systèmes complexes (Exemple : Le Planeur)

Pour un planeur, le mouvement se fait en X et en Y. On a donc 4 variables à suivre simultanément : S=[x,y,vx,vy]S = [x, y, v_x, v_y]

La fonction Sp devra donc retourner 4 valeurs : S=[vx,vy,ax,ay]S' = [v_x, v_y, a_x, a_y]

C'est exactement la même logique, mais avec plus de lignes.

Notons sur le Slicing (Rappel)

Quand on récupère la solution S pour le planeur :

  • S[:, 0] sera toutes les positions x(t)
  • S[:, 1] sera toutes les altitudes y(t)

Pour tracer la trajectoire (la forme du vol), on fera donc :
plt.plot(S[:, 0], S[:, 1]) (x en abscisse, y en ordonnée).

main.py
Sortie
>_ Prêt à exécuter…

Vérification

Vérification rapideon peut se reprendre

1.scipy.integrate.quad sert à quoi ?

2.Pour résoudre une équation différentielle du second ordre avec un solveur, que faut-il faire d'abord ?

3.Un solveur rend une solution qui diverge brutalement alors que le problème est physique. La cause la plus probable ?

4.Pourquoi vérifier un résultat numérique sur un cas dont la solution exacte est connue ?