Implémentation basique
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.4. Implémentation basique#
Si vous vous sentez suffisamment à l’aise, vous pouvez passer directement à l’étude approfondie.
3.4.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.4.2. Implémentation du schéma d’Euler#
3.4.2.1. Cas du régime libre#
L’implémentation suivante est à bien comprendre et à savoir refaire sans guide. Elle est la base des intégrations numériques. Dans un premier temps, on prendra \(h= \tau / 1000\) et on prendra les valeurs \(R\) et \(C\) données précédemment.
Exercice B : Avec une boucle for
Ecrire une suite d’instructions qui:
(Préparation) Définit le pas
h, la constante de tempstau, le temps finalt_fet le nombre d’intégrationNà réaliser.(Initialisation) Créer deux listes vide
tkfetukfdans lesquels on stockera les valeurs \(t_k\) et \(u_k\) puis ajouter à ces listes les conditions initiales \(t_0\) et \(u_0\). On prendra \(u_0 = u(t_0) = 1 \rm{V}\) et \(t_0 = 0\).(Boucle) Dans une boucle for, réalise plusieurs fois l’intégration numérique avec le pas
het la fonctionf_libre. A chaque fois, vous devrez calculer la valeur \(u_{k+1}\) que vous stockerez dans la listeukfpuis le nouveau temps \(t_{k+1}\) que vous stockerez dans la listetkf. Bien réfléchir aux bornes de la boucle.(Terminaison) Pour une utilisation plus simples ensuite des listes de valeurs
tkfetukf. Transformer les deux listes en deux vecteursnumpy.
# On rappelle que la fonction f_libre est accessible et que les bibliothèques scientifiques ont été créés.
Exercice C : Avec une boucle while
Ecrire une suite d’instructions qui:
(Préparation) Définit le pas
h, la constante de tempstau, le temps finalt_f.(Initialisation) Créer deux listes vide
tkwetukwdans lesquels on stockera les valeurs \(t_k\) et \(u_k\) puis ajouter à ces listes les conditions initiales \(t_0\) et \(u_0\). On prendra \(u_0 = u(t_0) = 1 \rm{V}\) et \(t_0 = 0\).(Boucle) Dans une boucle while, réalise plusieurs fois l’intégration numérique avec le pas
het la fonctionf_libre. A chaque fois, vous devrez calculer la valeur \(u_{k+1}\) que vous stockerez dans la listeukwpuis le nouveau temps \(t_{k+1}\) que vous stockerez dans la listetkw. Bien réfléchir à la condition de sortie de la boucle.(Terminaison) Pour une utilisation plus simples ensuite des listes de valeurs
tkwetukw. Transformer les deux listes en deux vecteursnumpy.Tracer \(y(t)\) pour chaque intégration (for et while). Tracer sur le même graphique la solution analytique pour comparaison (utilisez les \(t_k\) comme abscisses). N’oubliez pas de légender la figure.
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.4.2.2. Influence du pas d’intégration#
Exercice D :
Reprendre la suite d’instructions précédente (avec for ou while peu importe) pour \(h = \tau / 10\); \(h = \tau / 2\); \(h = \tau\); \(h = 2 * \tau\). Réaliser le tracé \(y(t)\) pour chaque cas ainsi que la comparaison avec la solution analytique.
En déduire comment choisir correctement le pas d’intégration.
3.4.2.3. Cas de la réponse à un échelon de tension.#
Exercice E :
Reprendre la suite d’instructions précédente (avec for ou while peu importe) avec un pas d’intégration correctement et obtenir la solution numérique pour un échelon de tension (\(E = 1V\) et \(y_0 = 0V\)). Le comparer à la solution analytique.
On rappelle que la solution analytique est:
La nécessité de copier-coller le même code pour chaque test montre qu’il serait bien plus efficace de mettre ces instructions dans une fonction qu’on réutiliserait plusieurs fois. C’est l’objectif de la première partie de l’étude complète avant de l’utiliser pour la réponse à une entrée plus complexe : une rampe de tension.