Utilisation de la bibliothèque scipy
Contents
La page ci-présente existe en version notebook téléchargeable grâce au bouton
(choisir le format .ipynb). On rappelle qu’l faut ensuite l’enregistrer dans un répertoire adéquat sur votre ordinateur (capa_num par exemple dans votre répertoire personnel) puis lancer Jupyter Notebook depuis Anaconda pour accéder au notebook, le modifier et exécutez les cellules de code adéquates.
3.3. Utilisation de la bibliothèque scipy#
3.3.1. Définition des fonctions pour le schéma d’Euler#
On va commencer par définir la fonction \(f(t,y)\) pour les deux types d’étude : le régime libre et l’échelon de tension.
Attention : Même si \(f\) ne dépend pas explicitement du temps, on gardera \(t\) comme argument de la fonction car cet argument est nécessaire quand on utilise les fonctions natives de numpy pour intégrer une équation différentielle.
Exercice A
Dans la cellule ci-après, vous devez:
Importer les deux bibliothèques
numpyetmatplotlib.pyplotCréer deux fonction
f_libreetf_echelonprenant deux argumentstetu(correspondant à un instant \(t_k\) et à \(u_k = u(u_k)\)) et qui renvoie la valeur \(f(t_k, u_k)\) pour chaque cas (régime libre et échelon de tension) (u est la tension aux bornes du condensateur comme dans l’étude présentée dans l’exemple). Vous pouvez définir \(R,C\) et \(\tau\) comme des variables globales que vous utilisez dans les fonctions.
"""Ne pas oublier d'importer les bibliothèques scientifiques et d'éxécuter la cellule."""
3.3.2. Solve_ivp#
La fonction solve_ivp appartient à la bibliothèque scipy.integrate, sa signature est la suivante:
solve_ivp(f:callable, t_span:tuple, y0:nd.array, t_eval=t_eval:nd.array) -> dict
Arguments :
fest la fonction du schéma d’Euler définie précédemmentt_spanest un tuple de élément(t0, tf)donnant l’instant initial et l’instant final de l’intégration.y0est un vecteur numpy (ou une liste classique) contenant les conditions initiales. Ceci même quand il n’y a qu’une condition initiale.t_eval(argument optionnel donc impératif de le nommert_eval = ...) est un vecteur numpy contenant les instants \(t_k\) où l’on veut estimer la fonction solution. Même s’il est optionnel, il faudra toujours le donner.
Retour :
Un dictionnaire dont les clés utiles sont:
dict['t']: les instants \(t_k\) (donc l’argument det_eval…)dict['y']: un tableau numpy contenant à chaque ligne la solution \(y_k = y(t_k)\). Comme il n’y a qu’une seule ligne pour une équation différentielle de degré 1, on obtiendra les \(y_k\) pardict['y'][0]
3.3.2.1. Cas du régime libre#
Exercice B : Avec une boucle for
Définir un vecteur numpy contenant les instants \(t_k\).
Utiliser la fonction
solve_ivppour intégrer l’équation dans le cas d’un régime libre puis tracer \(y_k\) en fonction \(t_k\) avec les avoir extraits du dictionnaire renvoyé par la fonction.Le comparer graphiquement à la solution analytique donnée ci-dessous.
On rappelle que la solution analytique est:
Note : Certaines étapes pourraient être raffinées (création du vecteur temps par exemple).
# On rappelle que la fonction f_libre est accessible et que les bibliothèques scientifiques ont été créés.
3.3.2.2. Cas de la réponse à un échelon de tension.#
Exercice C : Avec une boucle for
Définir un vecteur numpy contenant les instants \(t_k\).
Utiliser la fonction
solve_ivppour intégrer l’équation dans le cas de la réponse à un échelon de tension puis tracer \(y_k\) en fonction \(t_k\) avec les avoir extraits du dictionnaire renvoyé par la fonction.Le comparer graphiquement à la solution analytique donnée ci-dessous.
On rappelle que la solution analytique est: