{"cells":[{"metadata":{},"cell_type":"markdown","source":"<div class=\"alert alert-success\" style=\"border-left: 15px solid #3c763d;\">\n    <b>Principe d'un notebook comme celui-ci :</b> \n    <ul>\n    <li>Les cellules de code sont toutes à exécuter, soit avec le bouton en haut, soit avec ctrl+entrée ou maj+entrée.</li>\n    <li>Vous pouvez aussi éditer les textes (comme celui-ci) si vous en avez envie, ajouter des cellules, etc.</li>\n    <li>Pensez à enregistrer pour pouvoir retrouver votre travail.</li>\n</ul>\n</div>\n\n<br>\n\n<h1>Méthode d'Euler</h1>\n<h2>pour la résolution des équations différentielles du 1<sup>er</sup> ordre</h2>\n"},{"metadata":{},"cell_type":"markdown","source":"<h2>1 - Résoudre l'équation dans le cas de la charge du condensateur</h2>\n\nOn suit encore l'exemple de la charge du condensateur, comme dans la fiche de cours.\n\nOn veut donc résoudre \n$$\\dfrac{\\text{d}u}{\\text{d}t} = -\\dfrac{u}{\\tau} + \\dfrac{E}{\\tau}, ~~~~~~~\\text{CI : } u(t=0)=u_0$$\n\n\n<b>q1 -</b> Compléter le script ci-dessous, puis l'exécuter."},{"metadata":{"trusted":false},"cell_type":"code","source":"import matplotlib.pyplot as plt  # pour les graphiques\nimport numpy as np               # pour les tableaux numpy\nfrom math import *               # pour les fonctions mathématiques, * signifie qu'on importe tout\n\nR = 1e3\nC = 1e-9\ntau = R*C        # calcul de tau = R*C\nu0 = 0           # valeur initiale de u(t)\nE = 10           # valeur de la tension imposée par le générateur pour t>0\n\ntmax = 5*tau     # durée de la simulation\ndt = tau/10      # pas de temps, assez court \nN = int(tmax/dt) # calcul du nombre total d'itérations nécessaires\n\n#------- Méthode d'Euler -------#\n# Initialisation des listes :\nliste_t = [0]\nliste_u = [u0]\nt = 0\nu = u0\n\nfor i in range(N):\n    # on dispose des variables de l'itération précédente : t et u\n    # et on calcule leurs nouvelles valeurs :\n    u =      # A COMPLETER\n    t =      # A COMPLETER\n    \n    # On ajoute ces nouvelles valeurs à chaque liste :\n             # A COMPLETER\n             # A COMPLETER","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Une fois exécuté, et si tout va bien, le code ci-dessus permet de remplir les listes liste_t et liste_u avec les valeurs de t et de u.\n\nEssayez de les afficher en exécutant :"},{"metadata":{"trusted":false},"cell_type":"code","source":"print(liste_t)\nprint(liste_u)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<b>q2 -</b> L'affichage ci-dessus n'est pas pratique. Nous allons donc faire un tracé graphique. Compléter les instructions ci-dessous pour pouvoir tracer u en fonction de t."},{"metadata":{"trusted":false},"cell_type":"code","source":"#------- Tracé graphique -------#\nplt.figure()\nplt.plot(A COMPLÉTER, 'o')     # on trace (le 'o' fait en sorte que ce soit des ronds)\nplt.xlabel('t (s)')            # légende de l'axe des abscisses\nplt.ylabel('u (V)')            # légende de l'axe des ordonnées\nplt.grid()                     # ajoute une grille\nplt.show()                     # affiche le graphe","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<b>q3 -</b>/ Faire les changements nécessaires dans les cellules précédentes pour que la simulation dure $10\\tau$. \n\n<b>q4 -</b>/ Faire les changements nécessaires dans les cellules précédentes pour que la condition initiale soit $u_0=2$ V. \n\nOn reviendra ensuite au cas où fin$=5\\tau$ et $u_0=0$."},{"metadata":{},"cell_type":"markdown","source":"<h2>2 - Comparaison avec la solution théorique</h2>\n\nOn souhaite ensuite tester la précision de la méthode d'Euler. \n\nLe cas étudié ici est simple et on connait la solution théorique : \n$$u_\\text{théo}(t) = (u_0-E)\\text{e}^{-t/\\tau} + E.$$\n\nL'objectif du code ci-dessous est de calculer cette solution théorique et de la mettre dans une liste :\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"#------- Calcul de la solution théorique, pour comparaison -------#\n# Initialisation des listes :\nt_theo = np.linspace(0,tmax,100)  # contiendra des instants t où u_theo est calculé\nu_theo = [(u0-E)*exp(-t/tau) + E for t in t_theo]  # calcul de u","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<b>q4 -</b> Comprendre ce que fait ce morceau de code.\n\n<b>q5 -</b> Ci-dessous, compléter le code pour qu'il trace à la fois la solution numérique (celle calculée avec la méthode d'Euler) et la solution théorique."},{"metadata":{"trusted":false},"cell_type":"code","source":"#------- Tracé graphique -------#\nplt.figure()\n\nplt.plot(À COMPLÉTER,'o',label='solution numérique (méthode d\\'Euler)')\nplt.plot(À COMPLÉTER, label='solution théorique')\n\nplt.xlabel('t (s)')      # légende de l'axe des abscisses\nplt.ylabel('u (V)')      # légende de l'axe des ordonnées\nplt.grid()               # ajoute une grille\nplt.legend()             # affiche la légende\nplt.show()               # affiche le graphe","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<b>q6 -</b> La solution théorique et la solution numérique sont-elles en bon accord ? \n       \n<b>q7 -</b> Copier ci-dessous tous les morceaux de code qui permettent de calculer la solution numérique, la solution théorique, et de les tracer (pour que tout soit fait en une seule exécution, ce sera plus pratique). \n\nPuis changer le pas de temps dt : prendre $dt = \\tau/2$, $dt=\\tau$, etc. \n       Que constatez-vous ? À partir de quelle valeur le pas de temps est-il assez petit pour avoir un bon accord ?"},{"metadata":{"trusted":false},"cell_type":"code","source":"\n\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"Vos réponses : \n\n\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h2>3 - Test avec une autre équation différentielle</h2>\n\nOn souhaite maintenant étudier une autre équation différentielle, pour laquelle il est moins simple \nde connaître une solution analytique : \n$$\\dfrac{\\text{d}u}{\\text{d}t} = a\\times(E-u)^2, ~~~~~~~\\text{CI : } u(t=0)=u_0,$$\navec $a=10^6\\,\\mathrm{s^{-1}\\cdot V^{-1}}$ un paramètre.\n\n\n<b>q8 - </b>Ci dessous, recopier les morceaux de code nécessaires à la résolution de cette équation et au tracé de la solution. On prendra $dt=10^{-8}$ s et  $t_\\text{max}=10^{-6}$ s."},{"metadata":{"trusted":false},"cell_type":"code","source":"\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h2>4 - Et encore une autre</h2>\n\nEnfin, on s'intéresse à nouveau à la première équation, mais cette fois avec un générateur de tension variable :\n$$\\dfrac{\\text{d}u}{\\text{d}t} = -\\dfrac{u}{\\tau} + \\dfrac{E(t)}{\\tau}, ~~~~~~~\\text{CI : } u(t=0)=u_0$$\navec $E(t) = E_0\\sin(\\omega t)$ ($E_0=10$\\,V et $\\omega = 5\\times10^6$\\,rad/s). \n\n<b>q9 - </b>Ci dessous, recopier les morceaux de code nécessaires à la résolution de cette équation et au tracé de la solution. "},{"metadata":{"trusted":false},"cell_type":"code","source":"\n\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"}},"nbformat":4,"nbformat_minor":2}