{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Chapitre 17\n", "## Exercice 38 p 361 : Simulation de la propagation d’une onde sinusoïdale\n", "Enoncé" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from matplotlib import animation as anim" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", " **Préliminaire à lire absolument** " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour accèder aux outils de figure interactive et aux animations dans un calepin **JupyterLab**, il est nécessaire d'introduire en début de programme la commande 'magique': \n", "\n", "```python\n", "%matplotlib widget \n", "```\n", "\n", "après avoir installé l'extension disponible __[ici](https://github.com/matplotlib/jupyter-matplotlib)__ lorsque cette extension n'est pas automatiquement accessible sous la version JupyterLab installée.\n", "\n", "**Remarque importante :**\n", "Cette commande magique **ne fonctionne pas** dans l'environnement **Colaboratory**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Une alternative à l'outil précédent pour visualiser une animation dans un calepin **JupyterLab** consiste à introduire en début de programme les 2 lignes d'instructions suivantes :\n", "\n", "```python\n", "from matplotlib import rc\n", "rc('animation', html='jshtml')\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Il faudra dans ce cas : \n", "$\\quad$ - retirer les `#` devant ces 2 lignes et mettre un `#` devant la commande magique `%matplotlib widget` ; \n", "$\\quad$ - appeler l'animation par son nom en toute fin de programme (en retirant le `#` devant le nom `animation` de la dernière ligne de la dernière cellule) ; \n", "$\\quad$ - faire preuve de patience (le temps pour la machine de faire tous les calculs) après l'éxécution de la dernière cellule pour visualiser l'animation.\n", "\n", "**Remarque importante :**\n", "Cette méthode est celle à utiliser dans l'environnement **Colaboratory**. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib widget\n", "\n", "#from matplotlib import rc\n", "#rc('animation', html='jshtml')\n", "\n", "x = np.linspace(0,4,256) # Domaine des abcisses (en m)\n", "delta_t = 0.01 # Intervalle de temps (en s)\n", "\n", "# Initialisation de la figure\n", "figure = plt.figure('Propagation d\\'une onde sinsusoïdale')\n", "plt.axis([0,4,-3,3])\n", "plt.xlabel('$x$ (en m)')\n", "plt.ylabel('$y$ (en m)')\n", "\n", "# Initialisation du graphe tracé mis à jour au fur et à mesure\n", "courbe, = plt.plot([],[],'g-',lw=1.5) # Graphe sans point\n", "\n", "# Création de la fonction 'onde' appelée à chaque nouvelle image i\n", "def onde(i): \n", " t = i*delta_t\n", " y = 2*np.cos((2*np.pi/0.85)*(x-2.3*t))\n", " courbe.set_data(x,y) # Mise à jour du graphe\n", " return courbe,\n", "\n", "# Animation de la figure affichant onde(i), à chaque image i, pour i\n", "# entier de 0 à 255 avec un délai entre 2 images égal à interval en ms\n", "animation = anim.FuncAnimation(figure, onde,frames=256,\n", " interval=delta_t*1000, repeat=False)\n", "\n", "#animation" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }