255 lines
6.7 KiB
Plaintext
255 lines
6.7 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Listes et fonctions"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Graphique de fonctions\n",
|
||
|
"\n",
|
||
|
"Dans cet échauffement, nous allons calculer les images d'une fonction pour tracer sa représentation graphique.\n",
|
||
|
"\n",
|
||
|
"**Recopier** le programme suivant.\n",
|
||
|
"\n",
|
||
|
"**Modifier** la ligne avec le `print` pour faire apparaitre l'image et l'antécédent à chaque ligne.\n",
|
||
|
"\n",
|
||
|
"**Commenter** chaque ligne avec une attention particulière à la ligne qui commence par `for...`"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"from math import cos, pi\n",
|
||
|
"\n",
|
||
|
"def f(x):\n",
|
||
|
" return cos(x*pi/2)\n",
|
||
|
"\n",
|
||
|
"for x in range(40):\n",
|
||
|
" print(f(x))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Pour tracer le graphique de cette fonction, il faudrait *enregistrer* toutes ces valeurs et donc utiliser des variables. \n",
|
||
|
"\n",
|
||
|
"Mettre plusieurs valeurs dans une seule variable c'est possible, on utilise des `listes` (on les a déjà rencontré plusieurs fois).\n",
|
||
|
"\n",
|
||
|
"**Recopier** ce programme, **commenter** ce programme et retrouver où les listes apparaissent."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"from math import cos, pi\n",
|
||
|
"\n",
|
||
|
"def f(x):\n",
|
||
|
" return cos(x*pi/2)\n",
|
||
|
"\n",
|
||
|
"images = []\n",
|
||
|
"antecedants = []\n",
|
||
|
"\n",
|
||
|
"for x in range(20):\n",
|
||
|
" images.append(f(x))\n",
|
||
|
"\n",
|
||
|
"print(\"Les images sont \", images)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"**Modifier** votre programme pour enregistrer aussi les antecedants et les afficher à la fin \n",
|
||
|
"\n",
|
||
|
"Nous allons maintenant enfin pouvoir tracer le graphique.\n",
|
||
|
"\n",
|
||
|
"**Ajouter** la ligne suivante au début de votre programme."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import matplotlib.pyplot as plt"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"**Ajouter** cette ligne à la fin."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"plt.plot(antecedants, images)\n",
|
||
|
"plt.show()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Vous avez tracer la courbe représentative de de la fonction $f$.\n",
|
||
|
"\n",
|
||
|
"![Représentation graphique de f](./fig/cos_pas1.png)\n",
|
||
|
"\n",
|
||
|
"Dans un nouveau fichier, **tracer** la courbe représentative de la fonction $g$ tel que\n",
|
||
|
"$$ g : x \\mapsto x^2 - 4$$\n",
|
||
|
"\n",
|
||
|
"![Représentation graphique de f](./fig/g_pas1.png)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Précision et controle du tracé\n",
|
||
|
"\n",
|
||
|
"Pour le moment, on sait donner un maximum à l'antécédent $x$ mais on ne peut pas contrôler le minimum ni le pas (l'écart en 2 valeurs de $x$). Or pour tracer précisément la représentation graphique d'une fonction, nous avons besoin de contrôler la fenêtre (minimum et maximum) et le pas."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Boucle `while` (tant que )\n",
|
||
|
"\n",
|
||
|
"Ce type de boucle donne plus de contrôle sur $x$ et nous évite d'utiliser `range` qui est une commande qui n'existe que en Python.\n",
|
||
|
"\n",
|
||
|
"Les 2 programmes ci-dessous font la même chose."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"for x in range(10):\n",
|
||
|
" print(x)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"x = 0\n",
|
||
|
"while x < 10:\n",
|
||
|
" print(x)\n",
|
||
|
" x = x + 1"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"**Commenter** le programme avec le `while`.\n",
|
||
|
"\n",
|
||
|
"Que se passe-t-il si on inverse les 2 dernières lignes?\n",
|
||
|
"\n",
|
||
|
"**Réécrire** le programme suivant en utilisant une boucle `while` et en stockant les antécédents."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Les images sont [0.0, 1.0, 1.2246467991473532e-16, -1.0, -2.4492935982947064e-16, 1.0, 3.6739403974420594e-16, -1.0, -4.898587196589413e-16, 1.0, 6.123233995736766e-16, -1.0, -7.347880794884119e-16, 1.0, 8.572527594031472e-16, -1.0, -9.797174393178826e-16, 1.0, 1.102182119232618e-15, -1.0]\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from math import sin, pi\n",
|
||
|
"\n",
|
||
|
"def h(x):\n",
|
||
|
" return sin(x*pi/2)\n",
|
||
|
"\n",
|
||
|
"images = []\n",
|
||
|
"antecedants = []\n",
|
||
|
"\n",
|
||
|
"for x in range(20):\n",
|
||
|
" images.append(h(x))\n",
|
||
|
" antecedants.append(x)\n",
|
||
|
"\n",
|
||
|
"print(\"Les images sont \", images)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"**Modifier** votre programme pour que les antécédents aillent de -2 à 2.\n",
|
||
|
"\n",
|
||
|
"**Modifier** votre programme pour que les antécédents augmentent avec un pas de 0.5 au lieu de 1.\n",
|
||
|
"\n",
|
||
|
"**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 1. \n",
|
||
|
"\n",
|
||
|
"**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 0.5. \n",
|
||
|
"\n",
|
||
|
"**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 0.1.\n",
|
||
|
"\n",
|
||
|
"En regroupant les 3 programmes écrit précedement, **tracer** sur le même graphique les 3 représentations pour observer l'amélioration de la précision.\n",
|
||
|
"\n",
|
||
|
"*Astuce*: pour tracer 3 graphiques en 1, on fait les `plt.plot(...)` de chaque graphique et uniquement à la fin on lance `plt.show()`.\n",
|
||
|
"\n",
|
||
|
"![Comparaison des pas](./fig/comp_sin.png)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": []
|
||
|
}
|
||
|
],
|
||
|
"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.2"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 2
|
||
|
}
|