{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Etude de l'évolution d'un système chimique (version élève) " ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ":download:`Télécharger le pdf <./suivi_avancement_eleve.pdf>`\n", "\n", ":download:`Télécharger le notebook <./suivi_avancement_eleve.ipynb>`\n", "\n", ":download:`Lancer le notebook sur binder (lent) `" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ce programme permet d'étudier l'évolution des quantités de matière des réactifs et produits d'une réaction dont l'équation est du type :\n", "aA + bB --> cC + dD\n", "où a, b, c et d sont les nombres stoechiométriques respectifs des espèces chimiques A, B, C et D.\n", "\n", "Le programme doit tout d'abord demander les valeurs des nombres stoechiométriques, pour ensuite demander les quantités de matière initiales des réactifs A et B et des produits C et D." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# rattachement des librairies gérant les tracés \n", "# de courbes et certains outils mathématiques \n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Entrée des nombres stoechiométriques**\n", "\n", "Sur le modèle de la ligne de code 2, ajouter les lignes de code nécessaires (lignes 3, 4 et 5) pour entrer les valeurs des nombres stoechiométriques b, c et d." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Nombres stoechiométriques\n", "a=2 #par exemple !! Donc à adapter...\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Affichage de l'équation de la réaction\n", "print(\"l'équation étudiée est du type : \",\n", " a,\" A + \",b,\" B --> \",\n", " c,\" C + \",d,\" D\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Entrée des valeurs de quantités de matière initiales**\n", "\n", "Les valeurs des quantités de matière initiales des réactifs et des produits (exprimées en mole) seront stockées dans des variables notées n_0\n", "\n", "(ex : nA_0 pour l'espèce chimique A).\n", "\n", "Sur le modèle de la ligne de code 2, ajouter les lignes de code nécessaires (lignes 3, 4 et 5) pour entrer les quantités de matière initiales des autres espèces chimiques en jeu.\n", "Attention de bien entrer les valeurs en mol! Vous pourrez par exemple taper 2.5e-3 pour 2,5 mmol" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Quantités de matières initiales\n", "nA_0 = \n", "nB_0 = \n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Initialisation des variables\n", "\n", "# Initialisation de la chaine de caractère correspondant \n", "# au réactif limitant\n", "Rlimitant ='' \n", "\n", "# Avancement initial\n", "x=0 \n", "\n", "# Pas d'avancement (on augmentera progressivement x de la valeur dx)\n", "dx=0.001 \n", "\n", "# Création des listes contenant les quantités de matière \n", "# et initialisation de ces listes avec la valeur initiale \n", "nA=[nA_0] \n", "nB=[nB_0] \n", "nC=[nC_0]\n", "nD=[nD_0]\n", "\n", "# Création et nitialisation de la liste contenant l'avancement\n", "X=[x] " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Calculs des quantités de matière en cours d'avancement**\n", "\n", "Sur le modèle de la ligne 5, écrire les lignes de code 6, 7 et 8 permettant de calculer les quantités de matière du\n", " réactif B, ainsi que des produits C et D.\n", " \n", " NOTE CODAGE : l'instruction \"nA.append(nA_0-a*x)\" permet d'ajouter la valeur indiquée entre parenthèses à la fin de la liste nA.\n", " \n", " **Détermination du réactif limitant**\n", "\n", "Compléter les tests des lignes de code 11 et 12 en choisissant parmi : <0, <=0, >0 et >=0.\n", "\n", "Compléter la ligne de code 13 en choisissant l'opérateur logique adéquat parmi : and (ET logique) et or (OU logique).\n", "\n", "NOTE CODAGE : l'indice -1 permet d'avoir accès à la dernière valeur de la liste.\n", "\n", "**Affichage du nom du réactif limitant et de l'avancement maximal**\n", "\n", "Il sera intéressant de modifier en ligne 18, le nombre de chiffres après la virgule afin de respecter le nombre de chiffres significatifs pour l'avancement x." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Calculs des quantités de matière en cours d'avancement\n", "while nA[-1] > 0 and nB[-1] > 0:\n", " x=x+dx\n", " X.append(x)\n", " nA.append(nA_0-a*x)\n", "\n", " \n", " \n", "\n", "#Détermination du réactif limitant \n", "if nA[-1] : Rlimitant = 'A'\n", "if nB[-1] : Rlimitant = 'B'\n", "if nA[-1]<=0 nB[-1]<=0 : \n", " Rlimitant='A et B : le mélange est stoechiometrique'\n", " \n", "#Affichage des résultats\n", "print('Le réactif limitant est ',Rlimitant,\n", " '\\n Avancement maximum : ','{0:.4f}'.format(x),\n", " 'mol' )\n", "#{0:.4f} permet d’afficher un nombre arrondi à \n", "# 4 chiffres après la virgule (ici)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Affichage des courbes permettant de suivre l'évolution des quantités de matière**\n", "\n", "La ligne de code 2 ci-dessous permet d'afficher le graphe de l'évolution de la quantité de matière de A en fonction de l'avancement X. \n", "\n", "Compléter les lignes 3, 4 et 5 pour afficher les courbes correspondant aux évolutions des quantités de matière des espèces chimiques B, C et D en fonction de l'avancement.\n", "\n", "NOTE CODAGE : la commande plt.plot peut être enrichie de divers arguments (comme ici avec r- = r pour red et - pour ligne) :\n", " \n", "•\tCouleur : r (red), k (black), b (blue), y (yellow), g (green)\n", "\n", "•\tMarqueur : o (gros point), - (ligne), . (pointillé), x (croix), s (square), v (triangle)\n", "\n", "• lw signifie linewidth (largeur de la ligne)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,10))\n", "plt.plot(X,nA,'r-',lw=1,label='nA')\n", " \n", " \n", " \n", "plt.grid()\n", "plt.xlabel('x (mol)')\n", "plt.ylabel('n (mol)')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Modélisation des droites obtenues**\n", "\n", "Les lignes de code suivantes vont permettre de modéliser chacune des 4 droites obtenues sur le graphe ci-dessus.\n", "Ces droites sont de type linéaire ou affine et peuvent être modélisées avec un polynôme de degré 1 : mx+p (où x est à la puissance 1).\n", "Les résultats des quatre modélisations sont ensuite affichés pour analyse.\n", "\n", "Compléter les lignes de code 2, 3 et 4 (sur le modèle de la ligne 1) pour modéliser les courbes concernant l'évolution des quantités de matière des espèces chimiques B, C et D.\n", "\n", "NOTE CODAGE : .0f en lignes 8, 13, 18 et 23 signifie qu'il y aura 1 seul chiffre significatif (pas de chiffre après la virgule), alors que .3f en lignes 9, 14, 19 et 24 signifie qu'il y aura 3 chiffres après la virgule." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Amodel=np.polyfit(X, nA,1)\n", "\n", "\n", "\n", "\n", "print (\"la droite représentant l'évolution de nA\" \n", " \" en fonction de x a pour équation : nA = \",\n", " '{0:.0f}'.format(Amodel[0]),'{:5}'.format(\"x +\"),\n", " \"{0:.3f}\".format(Amodel[1]) )\n", "\n", "print (\"la droite représentant l'évolution de nB\"\n", " \" en fonction de x a pour équation : nB = \",\n", " \"{0:.0f}\".format(Bmodel[0]),'{:5}'.format(\"x +\"),\n", " \"{0:.3f}\".format(Bmodel[1]) )\n", "\n", "print (\"la droite représentant l'évolution de nC\"\n", " \" en fonction de x a pour équation : nC = \",\n", " \"{0:.0f}\".format(Cmodel[0]),'{:5}'.format(\"x +\"),\n", " \"{0:.3f}\".format(Cmodel[1]) )\n", "\n", "print (\"la droite représentant l'évolution de nD\"\n", " \" en fonction de x a pour équation : nD = \",\n", " \"{0:.0f}\".format(Dmodel[0]),'{:5}'.format(\"x +\"),\n", " \"{0:.3f}\".format(Dmodel[1])) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Commenter les équations des courbes modélisées...." ] } ], "metadata": { "celltoolbar": "Format de la Cellule Texte Brut", "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.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }