La page ci-présente existe en version notebook téléchargeable grâce au bouton 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:

  1. Importer les deux bibliothèques numpy et matplotlib.pyplot

  2. Créer deux fonction f_libre et f_echelon prenant deux arguments t et u (correspondant à un instant tk et à uk=u(uk)) et qui renvoie la valeur f(tk,uk) 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 τ comme des variables globales que vous utilisez dans les fonctions.

Click to show
"""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 :

    • f est la fonction du schéma d’Euler définie précédemment

    • t_span est un tuple de élément (t0, tf) donnant l’instant initial et l’instant final de l’intégration.

    • y0 est 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 nommer t_eval = ...) est un vecteur numpy contenant les instants tk 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 tk (donc l’argument de t_eval…)

      • dict['y']: un tableau numpy contenant à chaque ligne la solution yk=y(tk). Comme il n’y a qu’une seule ligne pour une équation différentielle de degré 1, on obtiendra les yk par dict['y'][0]

3.3.2.1. Cas du régime libre#

Exercice B : Avec une boucle for

  1. Définir un vecteur numpy contenant les instants tk.

  2. Utiliser la fonction solve_ivp pour intégrer l’équation dans le cas d’un régime libre puis tracer yk en fonction tk avec les avoir extraits du dictionnaire renvoyé par la fonction.

  3. Le comparer graphiquement à la solution analytique donnée ci-dessous.

On rappelle que la solution analytique est:

y(t)=y0expt/τ

Note : Certaines étapes pourraient être raffinées (création du vecteur temps par exemple).

Click to show
# 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

  1. Définir un vecteur numpy contenant les instants tk.

  2. Utiliser la fonction solve_ivp pour intégrer l’équation dans le cas de la réponse à un échelon de tension puis tracer yk en fonction tk avec les avoir extraits du dictionnaire renvoyé par la fonction.

  3. Le comparer graphiquement à la solution analytique donnée ci-dessous.

On rappelle que la solution analytique est:

y(t)=E(1expt/τ)