{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Université Toulouse 3,\n", "
\n", "L3 ESR et L3 Spé\n", "
\n", "
\n", "Septembre 2018\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Analyse numérique - TP 1\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le but de ce TP est de découvrir (re-découvrir) les bases de Python (pour ceux qui ne les connaissent pas ou les ont oubliées) et surtout les principales bibliothèques Python que nous serons amenés à utiliser pendant l'année. Il s'agit de : \n", "\n", "1. numpy : pour la manipulation de complexes et des tableaux (pour les matrices) \n", "2. numpy.linalg : pour effectuer des opérations d'algèbre linéaire. \n", "3. matplotlib.pylab : pour les représentations graphiques\n", "\n", "Dans une première section nous donnons des rappels sur l'utilisation générale de Python, vous êtes autorisés à passer rapidement dessus si vous vous sentez à l'aise. Dans une deuxième partie nous nous attachons plus particulièrement aux rappels sur ces bibliothèques (vous les avez peut-être déjà utilisées en L1 et/ou L2). Dans la dernière partie vous trouverez les premiers exercices de TP concernant le cours de cette année. \n", "\n", "Je vous conseille vivement de vous envoyer par mail vos fichiers à la fin de chaque séance pour le cas où vous ne pourriez pas les retrouver à la séance suivante." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# 1. Quelques rappels généraux sur l'utilisation de Python\n", "\n", "## 1.1 Opérateurs usuels\n", "\n", "On rappelle dans ce tableau les opérateurs mathématiques classiques sous Python. Attention, je vous rappelle que Python est un langage typé...\n", "\n", "| Opérateur | Opération |\n", "|-|-|\n", "| `=` | Affectation de variable. On peut affecter plusieurs variables en une fois, en regroupant variables et valeurs à affecter dans des conteneurs. Par exemple: `a,b=1,2` ou encore `[x,y]=(0,0)` |\n", "| `+` | Addition, concaténation entre itérables de même type |\n", "| `*` | Multiplication, répétition d'un itérable |\n", "| `-` | Négation, opposé ou soustraction pour les valeurs numériques. Différence pour les ensembles |\n", "| `/` | Division |\n", "| `//` | Division entière |\n", "| `**` | Exposant |\n", "| `%` | Modulo |\n", "| `not` `or` `and` | Opérations booléennes |\n", "| `<` `<=` `==` `!=` `<>` `>=` `>` | Comparaison $<$ $\\leq$ $=$ $\\neq$ $\\neq$ $\\geq$ $>$ |\n", "| `in` | Présence d'une valeur dans un conteneur |\n", "| `not in` | Absence d'une valeur dans un conteneur |\n", "| `is` | Tester si une valeur est d'un type donné |\n", "| $\\vert$ `&` `^` | Opérations bits à bits sur les valeurs numériques. Union, intersection ou différence symétrique pour les ensembles |\n", "\n", "Python propose aussi des opérateurs combinés avec une affectation, dits *in situ*. En voici quelques-uns.\n", "\n", "| Opérateur | Opération |\n", "|-|-|\n", "| `x += y` | `x = x + y` |\n", "| `x *= y` | `x = x * y` |\n", "| `x -= y` | `x = x - y` |\n", "| `x /= y` | `x = x / y` |\n", "| `x //= y` | `x = x // y` |\n", "| `x **= y` | `x = x ** y` |\n", "| `x %= y` | `x = x % y` |\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.2 Fonctions\n", "\n", "### 1.2.a Fonctions de base\n", "\n", "Les fonctions peuvent prendre plusieurs paramètres, séparés par des virgules. Certains paramètres peuvent avoir des valeurs par défaut, il est alors possible de les omettre lors de l'évaluation.\n", "\n", "Pour consulter la rubrique d'aide relative à une fonction, on peut taper son nom suivi ou précédé d'un point d'interrogation. \n", "\n", "Voici une liste de quelques fonctions prédéfinies.\n", "\n", "| Fonction | Usage |\n", "|-|-|\n", "| `all(c)` ou `any(c)` | Indique si respectivement tous ou l'un des éléments du conteneur `c` convertis en booléens valent `True` |\n", "| `input(prompt = '')` | Demande à l'utilisateur d'entrer une valeur avec une invite optionnelle |\n", "| `len(c)` | Renvoie la longueur (`int`) du conteneur `c` |\n", "| `map(f, c)` | Renvoie le conteneur de même type que `c` contenant les valeurs de la fonction `f` appliquée aux éléments de `c` |\n", "| `min(c)` ou `max(c)` | Minimum et maximum d'un conteneur dont les éléments sont comparables entre eux |\n", "| `range(start = 0, stop, step = 1)` | Renvoie une liste contenant les entiers de `min` à `max` exclus par pas de longueur `step` |\n", "| `round(x, n = 0)` | Renvoie l'arrondi de la valeur numérique `x` sous flottante à (au plus) `n` chiffres décimaux après la virgule |\n", "| `sum(c)` | Renvoie la somme des éléments du conteneur `c` |\n", "| `type(x)` | Renvoie le type de `x` |\n", "\n", "\n", "### 1.2.b Définition de nouvelles fonctions\n", "\n", "Voici un exemple de syntaxe.\n", "\n", "```python\n", "def f(x, y=4, z=5):\n", " # instructions\n", " return valeur\n", "```\n", "\n", "Cette instruction stocke dans la variable `f` une fonction à trois variables `x`, `y` et `z`. \n", "Les variables `y` et `z` ont des valeurs par défaut. Le tableau suivant regroupe différentes manières d'appeler `f` ainsi que les valeurs prises par les paramètres `x`, `y` et `z`. \n", "\n", "| Appel | x | y | z |\n", "|-|-|-|-|\n", "| `f(1, 2, 3)` | 1 | 2 | 3 |\n", "| `f(x=1, y=2, z=3)` | 1 | 2 | 3 |\n", "| `f(1, 2)` | 1 | 2 | 5 |\n", "| `f(1)` | 1 | 4 | 5 |\n", "| `f(1, z=3)` | 1 | 4 | 3 |\n", "\n", "En principe, on doit s'assurer que les instructions composant le corps de la fonction mènent toujours à une instruction `return`, quels que soient les éventuels branchements conditionnels. Dans le cas contraire, on prend le risque que la fonction renvoie `None`. \n", "\n", "La première instruction `return` rencontrée interrompt immédiatement l'exécution de la fonction. On prendra garde à ne pas confondre `print` et `return`, la première se contentant de modifier l'affichage sans renvoyer de valeur." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "None\n" ] } ], "source": [ "def f(x):\n", " if x > 0:\n", " return x\n", "\n", "print f(1)\n", "print f(-1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2.c Les fonctions Lambda\n", "\n", "Les fonctions Lambda permettent de définir plus simplement les fonctions simples se définissant en une seule instruction. Elles peuvent avoir un ou plusieurs arguments et peuvent renvoyer n'importe quel type de données. \n", "Les exemples suivants vous montrerons simplement comment les utiliser. " ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "6\n", "0.826821810432\n", "(2, 4)\n", "2\n", "4\n", "5\n" ] } ], "source": [ "f = lambda x: x**2+1 # définit la fonction x-> x^2+1\n", "print(f(2))\n", "\n", "g=lambda x,y : x*y # définit la fonction (x,y)-> x*y\n", "print(g(2,3))\n", "\n", "from math import sin\n", "h=lambda x: (sin(x)**2) # définit la fonction x-> (sin x)^2\n", "print(h(2))\n", "\n", "k=lambda x:(x,2*x) # définit la fonction x-> (x,2x)\n", "print(k(2))\n", "a,b=k(2) # permet de stocker le résultat de k(2) dans le couple (a,b)\n", "print(a)\n", "print(b)\n", "\n", "applique=lambda u,x : u(x) # applique la fonction u à x \n", "print(applique(f,2))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.2 Structures de contrôle\n", "\n", "La structure syntaxique en Python est déterminée par les niveaux d'indentation du code.\n", "\n", "Les blocs de code relatifs à une structure de contrôle (boucle ou branchement conditionnel) sont introduits par le symbole `:` à la fin de la ligne qui précède et doivent être indentés d'un niveau supplémentaire par rapport au niveau parent. Le retour au niveau d'indentation précédent signale au compilateur la fin du bloc.\n", "\n", "\n", "En principe, on indente de quatre espaces supplémentaires à chaque niveau. Ceux-ci peuvent être obtenus facilement grâce à la touche de tabulation.\n", "\n", "### 1.2.a Branchements conditionnels\n", "\n", "La syntaxe générale est\n", "\n", "```python\n", "if condition1:\n", " instructions\n", "elif condition2:\n", " instructions\n", "elif condition3:\n", " instructions\n", "else:\n", " instructions\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a est negatif\n", "-2\n" ] } ], "source": [ "a=-2\n", "\n", "if a < 0:\n", " print 'a est negatif'\n", "elif a>0:\n", " print 'a est positif'\n", "else:\n", " print 'a est nul'\n", "\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2.b Boucles for (itération)\n", "\n", "La syntaxe générale d'une boucle for est \n", "\n", "```python\n", "for variable in iterable:\n", " instructions\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "156\n", "[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24]\n", "156\n", "True\n" ] } ], "source": [ "n=25\n", "s=0\n", "for k in range(1,n+1):\n", " if k%2==0:\n", " s=s+k\n", "print s\n", "\n", "# verification \n", "pairs=[k for k in range(1,n+1) if k%2==0]\n", "print(pairs)\n", "so=sum(pairs)\n", "print(so)\n", "print(s==so) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2.c Boucles while (itération)\n", "\n", "La syntaxe générale d'une boucle While est \n", "\n", "```python\n", "while condition:\n", " instructions\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Bibliothèques Python\n", "\n", "## 2.1 La bibliothèque `numpy` de calcul scientifique\n", "\n", "La bibliothèque `numpy` introduit le type `ndarray` ainsi que de nombreuses fonctions de calcul flottant notamment. Traditionnellement, on l'importe:\n", "\n", "+ soit directement dans l'environnement courant (`from numpy import *`);\n", "+ soit sous un nom abrégé (`import numpy as np`).\n", "\n", "La bibliothèque `numpy` est spécialisée dans la manipulation des tableaux (array). On l'utilisera essentiellement pour les vecteurs et les matrices\n", "\n", "• Les tableaux `numpy` ne gèrent que les objets de même type\n", "\n", "• La bibliothèque `numpy` propose un grand nombre de routines pour un accès rapide aux données (ex. recherche, extraction), pour les manipulations diverses (ex. tri), pour les calculs (ex. calcul statistique et scientifique, calcul élément par élément, calcul matriciel)\n", "\n", "• Les tableaux `numpy` sont plus performants (rapidité, gestion de la volumétrie) que les itérables usuel de Python (listes, tuples...)\n", "\n", "• Les tableaux `numpy` sont sous-jacents à de nombreux packages dédiés au calcul scientifique sous Python.\n", "\n", "• Une matrice est un tableau (array) à 2 dimensions (lignes et colonnes), un vecteur est un tableau (array) avec une seule ligne\n", "\n", "• À la différence d'autres langages classiques, la plupart des opérateurs $(+, *, **, etc.)$ agissent élément par élément sur les tableaux.\n", "\n", "Pour plus d'infos sur cette bibliothèque : \n", "http://docs.scipy.org/doc/numpy/reference/index.html\n", "\n", "### 2.1.a Les vecteurs \n", "\n", "On utilise pour créer des vecteurs `numpy` les matrices avec une seule ligne... Attention à une chose : la numérotation pour l'indexation se fait à partir de 0, c'est-à -dire que le premier élément est numéroté 0 et non 1. \n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5 4 3 2 1 0]\n", "\n", "6\n" ] } ], "source": [ "# Création de vecteurs : \n", "from numpy import *\n", "\n", "T1 = array([5, 4, 3, 2, 1, 0])\n", "print(T1)\n", "print(type(T1)) # type ndarray \n", "print(len(T1))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "[5 4]\n", "[0 3 2 3 2 5]\n", "[ True True True False True False]\n", "[5 4 3 3]\n", "[-5 -4 -3 2 -3 0]\n" ] } ], "source": [ "# Indexation, accès\n", "T1 = array([5, 4, 3, 2, 3, 0])\n", "print(T1[2]) # attention l'indice 2 correspond au 3eme élément (num à partir de 0)\n", "print(T1[:2]) #accès aux éléments 0 et 1 (2 est exclu)\n", "print(T1[T1])\n", "print(T1>2) # crée la liste des booléens T1[k]>2 \n", "print(T1[T1 > 2]) # extrait de T1 ses éléments strict. plus grands que 2\n", "T1[T1 > 2] *= -1 # multiplie par -1 les éléments strict. plus grands que 2 du vecteur\n", "print(T1)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3 4 5 6 7 8 9]\n", "[10 8 6 4 2]\n", "[0 1 2 3 4 5 6 7 8 9]\n", "[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]\n", "[ 0.2 0.5 0.8 1.1]\n", "[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]\n" ] } ], "source": [ "# Création de vecteurs de valeurs particuliers : \n", "#suite arithmétique \n", "a=arange(1,10)\n", "b=arange(start=10,stop=0,step=-2)\n", "c=arange(10)\n", "print(a)\n", "print(b)\n", "print(c)\n", "\n", "\n", "#subdivision uniforme de [a,b] de pas h ATTENTION b n'est pas inclus !!\n", "c=arange(0,1,0.1)\n", "d=arange(start=0.2,stop=1.2,step=0.3)\n", "print(c)\n", "print(d)\n", "c=arange(0,1,0.1)\n", "print(c)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 2.5 5. 7.5 10. ]\n" ] } ], "source": [ "# subdivision uniforme de [a,b] à n éléments \n", "# ATTENTION b EST INCLUS CETTE FOIS !!!!\n", "a=linspace(0,10,5)\n", "print(a)\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1. 1. 1. 1. 1.]\n", "[ 3.2 3.2 3.2 3.2 3.2]\n" ] } ], "source": [ "# vecteur de 1...\n", "a=ones(5)\n", "print(a)\n", "b=full(5,3.2) # crée un vecteur de 5 éléments égaux à 3.2\n", "print(b)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3 4]\n", "[2 3]\n", "[5 3]\n", "[1 5 3 4]\n" ] } ], "source": [ "# ATTENTION Duplication !!!\n", "t1 = array([1, 2, 3, 4])\n", "t2 = t1[1:3] # Pas de duplication, toute modification de t2 aura un effet sur t1\n", "print(t1)\n", "print(t2)\n", "t2[0] = 5\n", "print(t2)\n", "print(t1)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3 4]\n", "[2 3]\n", "[5 3]\n", "[1 5 3 4]\n" ] } ], "source": [ "t1 = array([1, 2, 3, 4])\n", "t2=copy(t1)\n", "t2 = t1[1:3] # Pas de duplication, toute modification de t2 aura un effet sur t1\n", "print(t1)\n", "print(t2)\n", "t2[0] = 5\n", "print(t2)\n", "print(t1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1.b Les matrices \n" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0 1]\n", " [2 3]\n", " [4 5]]\n", "[[0 1]\n", " [2 3]\n", " [4 5]]\n", "\n", "3\n", "[0 1]\n", "5\n", "[2 3]\n", "(3, 2)\n" ] } ], "source": [ "T2 = array([[0, 1], # Il est possible de passer à la ligne avant de fermer des crochets ou parenthèses\n", " [2, 3], # ça permet de rendre le code plus lisible \n", " [4, 5]])\n", "print(T2)\n", "T3 = array([[0, 1],[2, 3],[4, 5]])\n", "print(T3)\n", "print(type(T2))\n", "print(len(T2))\n", "print(T2[0])\n", "print(T2[2, 1])\n", "print(T2[1, :])\n", "# demander la taille de la matrice\n", "print(T2.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La bibliothèque `numpy` fournit des fonctions pour créer et gérer facilement des tableaux à plusieurs dimensions.\n", "\n", "| Fonction | Usage |\n", "|-|-|\n", "| `arange(start=0, stop, step=1)` | Similaire à `range`, mais renvoie un tableau et les arguments peuvent être de type flottant |\n", "| `linspace(start, stop, n=50)` | Renvoie un tableau à `n` valeurs uniformément réparties entre `start` et `stop` (bornes incluses) |\n", "| `array(c)` | Crée un tableau à partir du conteneur `c`. Le type des éléments peut aussi être choisi. |\n", "| `zeros(shape)` `ones(shape)` | Crée un tableau de la forme désirée, rempli de zéros ou de uns. Le type des éléments peut aussi être choisi. |\n", "| `identity(n)` | Crée une matrice identité de taille $n\\times n$ |\n", "| `diag(A)` | Diagonale d'une matrice (si `A` est bidimensionnel) ou matrice diagonale (si `A` est monodimensionnel) |\n", "| `dot(A, B)` | Produit matriciel |\n", "| `reshape(T, shape)` | Renvoie le tableau obtenu en réarrangeant le tableau selon une nouvelle forme |\n", "| `concatenate(l)` | \"Concatène\" une liste de tableaux entre eux |\n", "| `roll(a, shift)` | Effectue une permutation circulaire des éléments d'un tableau en décalant les éléments vers la droite (les derniers reviennent à gauche) |\n", "| `meshgrid(range(m), range(n))` | Renvoie deux matrices $m\\times n$, la première contenant les indices des lignes, la seconde ceux des colonnes. Utile pour créer une matrice à partir de son terme général |\n", "| `fromfunction(f, shape)` | Crée un tableau à partir d'une fonction |\n", "| `fromfile(filename, dtype)` | Création depuis un fichier. L'inconvénient par rapport à `tofile` est qu'il faut préciser le type des éléments (`dtype`) et la forme est perdue (le tableau obtenu n'aura qu'une seule dimension, comme s'il avait subi `flatten()`) |\n", "\n", "Attention, la produit matriciel ou les puissances des matrices ne s'obtiennent pas avec les multiplication et l'exponenciation classique (ces opérations se fonct élément par élément)." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 0]\n", " [0 1]]\n", "[[1 2]\n", " [3 4]]\n", "[[1 0]\n", " [0 4]]\n", "[[1 2]\n", " [3 4]]\n" ] } ], "source": [ "A = identity(2, int)\n", "B = array([[1, 2], [3, 4]])\n", "print(A)\n", "print(B)\n", "print(A * B)\n", "print(dot(A, B))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1.c Fonctions introduites par `numpy`\n", "\n", "La bibliothèque `numpy` introduit ou redéfinit un grand nombre de fonctions numériques. Celles-ci peuvent agir sur des valeurs numériques individuelles, ou sur des tableaux (ou listes) élément par élément. En voici quelques-unes.\n", "\n", "| Fonction | Usage |\n", "|-|-|\n", "| `numpy.abs` `conj` `real` `imag` `angle` | Module, conjugué, partie réelle, partie imaginaire, argument |\n", "| `cos` `sin` `tan` `sinh` `cosh` `tanh` | |\n", "| `arccos` `arcsin` `arctan` `arcsinh` `arccosh` `arctanh` | |\n", "| `exp` `log` | |\n", "| `numpy.round` `floor` `ceil` | Arrondi au plus proche, arrondi inférieur, arrondi supérieur |\n", "\n", "Elle introduit également de nombreuses fonctions spécifiques aux tableaux. En voici une petite liste.\n", "\n", "| Fonction | Usage |\n", "|-|-|\n", "| `sum` `prod` | Somme et produit des éléments |\n", "| `numpy.min` `numpy.max` `mean` `median` `std` | Minimum, maximum, moyenne, médiane, écart-type |\n", "| `cumprod` `cumsum` | Produit ou somme cumulés |\n", "| `argmin` `argmax` `argsort` | Indice du minimum, du maximum, tableau d'indices permettant de trier le tableau |\n", "| `convolve` | Convolution discrète |\n", "\n", "Mentionnons encore quelques constantes utiles: `pi`, `e`, `inf`, `nan`, etc.\n", "\n", "\n", "**Attention**: importer `numpy` dans l'espace de base sans préfixe (`from numpy import *`) ne remplace pas les fonctions prédéfinies de Python (`min`, `max`, `abs`...). On devra donc les préfixer si on souhaite utiliser la version `numpy`. Cela n'a en général pas d'importance, sauf pour `min`, `max` et `round`.\n" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "5\n" ] } ], "source": [ "t = array([[1, 2, 3, 4],[2,3,1,5]])\n", "\n", "print(numpy.max(t))\n", "print(t.max())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1.d Fonctions introduites par `numpy.linalg`\n", "\n", "| Fonction | Usage |\n", "|-|-|\n", "| `dot(A, B)` | Produit matriciel |\n", "| `matrix_power(M, n)` | Exposant matriciel |\n", "| `norm(x)` | Norme (euclidienne par défaut) d'un vecteur |\n", "| `det(A)` `tr(A)` | Déterminant et trace |\n", "| `eig(A)` `eigvals(A)` | Vecteurs et valeurs propres |\n", "| `matrix_rank(A)` | Rang d'une matrice |\n", "| `solve(A, b)` | Résolution du système linéaire $Ax=b$ |\n", "| `inv(A)` | Inversion matricielle |\n", "| `cholesky(A)` | Décomposition de Cholesky |\n", "| `qr(A)` | Décomposition QR |\n", "\n", "D'autres fonctions sont décrites sur http://docs.scipy.org/doc/numpy/reference/routines.linalg.html." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(879.99999999999977, 99)\n", "[ 104.33603014 -4.54479131 1.02294627 -1.8141851 ]\n", "[[ 0.08851383 0.5100893 0.43683788 0.179836 ]\n", " [ 0.27543406 0.27501112 -0.43784015 -0.40940659]\n", " [ 0.5366094 0.25224171 -0.57398719 0.76267732]\n", " [ 0.79268641 -0.77495284 0.53666319 -0.46729923]]\n", "[[ 104.33603014 -0. -0. -0. ]\n", " [ 0. -4.54479131 0. -0. ]\n", " [ -0. -0. 1.02294627 0. ]\n", " [ -0. -0. 0. -1.8141851 ]]\n", "[ 1. 2. 3. 4.]\n", "[-0.03636364 -0.17272727 0.09545455 0.15909091]\n" ] } ], "source": [ "from numpy.linalg import *\n", "\n", "A = array([[2, 3, 5, 7],\n", " [11, 13, 17, 19],\n", " [23, 29, 31, 37],\n", " [41, 43, 47, 53]])\n", "\n", "print(det(A),trace(A))\n", "eigenvalues, eigenvectors = eig(A)\n", "print(eigenvalues)\n", "print(eigenvectors)\n", "# On calcule inv(P).A.P\n", "print(numpy.round(dot(dot(inv(eigenvectors), A), eigenvectors), 10))\n", "v = solve(A, [1, 2, 3, 4])\n", "print(dot(A, v))\n", "print(v)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.2 La bibliothèque `Matplotlib.pyplot`\n", "\n", "La bibliothèque `matplotlib` (et sa sous-bibliothèque pyplot) sert essentiellement à afficher des graphismes. Son utilisation ressemble beaucoup à celle de Matlab. Traditionnellement, on l'importe:\n", "\n", "+ soit directement dans l'environnement courant (`from matplotlib.pyplot import *`);\n", "+ soit sous un nom abrégé (`import matplotlib.pyplot as plt`).\n", "\n", "Dans ce qui suit, on suppose qu'on utilise le backend `inline`, propre aux notebooks. Si on utilise un autre backend, il pourra être nécessaire d'ajouter `show()` à la fin des commandes pour faire apparaitre la fenêtre qui contient le dessin.\n", "\n", "Voici une courte liste de commandes possibles.\n", "\n", "| Commande | Effet |\n", "|-|-|\n", "| plot(y) | Affiche les points dont les ordonnées sont dans `y` |\n", "| plot(x, y) | Affiche les points de coordonnées $(x_k,y_k)$ |\n", "| matshow(a) | Affiche une matrice |\n", "| imshow(a) | Idem, mais avec plus d'options (et la possibilité de faire des sous-figures) |\n", "| hist(y, bins=10) | Affiche un histogramme de la répartition des valeurs des $y_k$. On peut choisir le nombre de barres, voire leurs bornes |\n", "| figure() | Commence une nouvelle figure (si on ne l'a pas fait, cette fonction est appelée implicitement dès qu'on commence à afficher quelque chose) |\n", "| figure(figsize=(a,b)) | Idem, mais permet d'imposer une taille (en pouces) à la figure |\n", "| subplot(lines, columns, index) | Indique qu'on va commencer une sous-figure |\n", "| suptitle(\"titre\") | Afficher un titre au-dessus de la figure. Attention aux caractères accentués (précéder la chaîne du préfixe `u`). Il est possible de mettre du LaTeX entre dollars `$` |\n", "| legend() | Afficher les légendes (s'il y en a) |\n", "| axis([xmin, xmax, ymin, ymax]) | Définit explicitement la taille des axes. Par défaut, ceux-ci s'adaptent automatiquement à la taille du contenu de la figure |\n", "| axis(\"scaled\") | Indique que le repère doit être orthonormé (pas de distorsion à l'affichage). À utiliser **après** `plot(...)` car son utilisation désactive l'ajustement automatique des axes |\n", "| axis(\"off\") | Ne pas afficher les axes |\n", "| loglog() | Passer en échelle log-log |\n", "\n", "La fonction `plot` (la plus utilisée) peut prendre une grande variété de paramètres supplémentaires pour contrôler l'aspect des courbes tracées. Par défaut, les points sont reliés par des segments. Voici quelques paramètres optionnels possibles:\n", "\n", "- `linestyle=s`, avec `s` qui vaut par exemple\n", " - `\"solid\"` ou `\"-\"` (lignes pleines),\n", " - `\"dashed\"` ou `\"--\"` (tirets),\n", " - `\"dotted\"` ou `\":\"` (pointillés),\n", " - `\"\"` (pas de lignes);\n", "- `color=c`, avec `c` qui vaut par exemple `\"red\"`, `\"green\"`, `\"blue\"` etc.\n", "- `marker=m`, avec `m` qui vaut par exemple\n", " - `\"\"` (pas de marqueur);\n", " - `\",\"` (petits points),\n", " - `\".\"` (gros points),\n", " - `\"+\"` ou `\"x\"` (croix),\n", " - `\"*\"` (étoiles),\n", " - `\"o\"` (cercles),\n", " - `\"s\"` (carrés);\n", "- `markersize=s` pour contrôler la taille des marqueurs;\n", "- `legend=l` où `l` est une chaîne de caractères pour donner un titre à la courbe. Celui-ci n'apparaitra que si l'on utilise `legend()` par la suite. Mêmes remarques que pour `suptitle`.\n", "\n", "On peut aussi utiliser l'écriture `plot(x, y, \"style\")` où `style` est donné sous forme abrégée, par exemple:\n", "\n", "- `\"y-x\"` pour des croix reliées par des lignes jaunes;\n", "- `\"g:*\"` pour des étoiles reliées par des pointillés verts;\n", "- `\"bo\"` pour des cercles bleus sans lignes;\n", "- `\"c-\"` pour des lignes cyans sans marqueur.\n", "\n", "Une vaste liste de fonctions supplémentaires et d'exemples illustrés peut se trouver à la page http://matplotlib.org/index.html" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: pylab import has clobbered these variables: ['draw_if_interactive']\n", "`%matplotlib` prevents importing * from pylab and numpy\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n80Kq9/qcBMU8QTG78dnIz8fXtq68xMx5uyOWUhtz86ynWeqeVJkW8+dza8sEyzDMnEsHHVRMby1f\nHnsl1aQyb97paZaUuvFhyM/n1tauXGLmvI27PkdpW9SSXTGPnY2Pg/x8tDZm5bN1OWpJ/V6fk6CY\nR/LKK9JVV6Xbjc9Gfj5cm7vyUpdnznPIy0tty82zyMw3bpQ++tHi7ZSy8XGQn+/Q5qx8ti6ec97m\nXZ+jpJCbdyIzH+zGTzkl/W58GPLzHXLoyktdnDlv867PUdoUtbS2mJfZ+He+k242Pg7y80IOWfmg\nLs6c5xSxlCjmNcqhG5+N/DyvrrzUpRdCc9j1OUybcvNWZeZtzsbH0dX8PKesfFCXZs7bdq/PScTO\nzbPKzHPsxofpan6eY1cudWvmPMeIpdSWqCX5Yp5LNj6OLubnuWXls3UlamnbvT4nQTGvqCvd+Gxd\ny89z7cpLXZg5z2nX5zBtyc2TLOZd6saH6cr557l35VI3zjnPadfnMG053zyp//xd7caH6UJ+nntX\nXsp95jznvLzUhqglmWmW3CdVppHz/UNznWAZZfny4h6hxx8feyVh5bjrc5iY9wVtzTQL3fhoOefn\nXenKS7m+EJrjrs9h2pCbR+3M6cbHk9v8ede6cinfmfPTTy+K+XnnxV5J/WLNmzfamZvZiWb2hJlt\nMLNPz/d4uvHJ5Jafd60rl/KcOc911+coqefmlYu5me0i6WpJJ0g6VNJpZnbQqMd3fVJlGjnNn3dh\ngmWU3KKWHO71OYnsi7mkd0na6O6b3H2bpFskfWjYA+nGp5dLft7FrryU28x5F6ZYBqWem4co5vtI\nemrg/c39j70G3Xg1bZ8/73JXLuU3c57zrs9hUp83X9jkkx1zzGqtWVO83ev11Ov1mnz6LFxySVHU\nL720eGG0TbrclZfOOks66STpi19s94vZue/6HKWMWup8EXRmZkYzU+Q5ladZzOzdkla7+4n99y+W\n5O7+97MeV9udhrqmjfPnXZxgGSWHmfMvf1l64gnpmmtir6RZMebNm5xmeVDS28xsPzN7vaRTJf0g\nwHUxQhvzc7ryHXJ4IbRreXkp5dw8yJy5mZ0o6Ssqvjlc6+5/N+QxdOaBtWX+nK58Z22fOe/Krs9R\nmp43b3TO3N3vdPcD3f3twwo56tGW+XO68p21fea8K7s+R0l1RJGZkhZrw/x51ydYRmlz1NLViKWU\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib.pyplot import *\n", "%pylab inline \n", "# permet d'importer numpy et matplotlib.pyplot\n", "\n", "plot([0,1,-1,2,-2,3,-3])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%pylab inline \n", "# permet d'importer numpy et matplotlib.pyplot\n", "\n", "plot([0,1,-1,2,-2,3,-3])" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Représentation d'une suite\n", "\n", "n = arange(50)\n", "u = (-1) ** n * exp(-n / 20.)\n", "plot(u, \"r+\")" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nIAjzwhGa+D4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Représentation d'un graphe de fonction\n", "\n", "x = linspace(-5 * pi, 5 * pi, 200)\n", "y = sin(x) / x\n", "plot(x, y, \"g\", label='$\\\\frac{\\\\sin x}{x}$') # Ici il faut échapper le caractère \\\n", "legend()\n" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEACAYAAABVtcpZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm8lnP+x/HXp1UqDZXQailLUpFKjE7WypCyZRm7Yuxk\nwjDFT7bB2IZsQ8hOEq3oRKLQomgbEqWNlPY6ne/vj8/JqZxzOqd7ue7l/Xw8rsfZrvu6Pt1d9/W5\nvruFEBARkexULuoAREQkOkoCIiJZTElARCSLKQmIiGQxJQERkSymJCAiksViTgJmVs/MPjSzr81s\nqpldVcx+D5vZbDObbGYtYj2viIjErkIcjpEHXBdCmGxm1YAvzWxkCGHGph3MrBOwdwihsZm1AfoD\nbeNwbhERiUHMJYEQwsIQwuSC71cC04G6W+3WBXi+YJ/xQA0zqxPruUVEJDZxbRMws0ZAC2D8Vn+q\nC/y42c/z+WOiEBGRJItbEiioCnoDuLqgRCAiIikuHm0CmFkFPAG8EEIYXMQu84H6m/1cr+B3RR1L\nkxmJiJRRCMG253XxKgn8F/gmhPBQMX9/BzgXwMzaAstCCIuKO1gIQVsctj59+kQeQyZtej/1fqbq\nFouYSwJmdjhwNjDVzCYBAbgZaOj38/BkCGGomXU2s/8Bq4ALYj2viIjELuYkEEL4BChfiv2uiPVc\nIiISXxoxnMFycnKiDiGj6P2ML72fqcFirU+KNzMLqRaTiEgqMzNCxA3DIiKShpQERESymJKAiEgW\nUxIQEcliSgIiIllMSUBEJIspCYiIZDElARGRLKYkICKSxZQERESymJKAiEgWUxIQEcliSgIiIllM\nSUBEJIspCYiIZDElARGRLKYkICKSxZQERESymJKAiEgWUxIQEcliSgIiIllMSUBEJIspCYiIZDEl\nARGRLFYh6gDEhQDLl8PPP8OKFbBqFaxeXfh1wwbIz4eNGwu/li8PlSptue2wA+y0k281avjXatWg\nnNK9pICNG/06X7ECVq70r5u+X7/er/MNGyAvz7+a+XVeoULhVrmyX9PVqkH16v61Rg3YeWdd59tD\nSSAJ1qyB77+HOXMKt/nzYcmSwu3nn/0GXquWX9hVqxZuO+4IFSv6h6FcucKv+fn+wdl8W73aP1S/\n/ebb8uX+u112gTp1YNdd/WudOrDbbtCwoW+NGvnP+hDJ9sjLgwUL4IcfCrcff4TFi33bdJ0vXVp4\n8958q1bNH2IqVvStQgX/uunYeXmeQPLyYO1aTxqbksjKlbBsmX/dZReoXdu33XeH+vWhQYPCba+9\n/HxSyEIIsR/E7BngL8CiEMJBRfy9PTAY+K7gV2+FEO4o5lghHjFF4ZdfYNq0Lbf//Q9+/dUvwD33\nLNzq1y+8WGvV8m2HHRIT18aNnmQWL4ZFiwq3BQtg7tzCbdkyqFcP9tkH9ttvy61OHX8qk+wVAsyb\nBzNn+jZrVuHXefP8Wt78hluvnj9YbLrOa9eGmjULb+7xtmGDfwY3JZyffvJEtCkpzZ0L333niWLf\nfX3bf39o3hxatPBSc7oyM0II2/UJjVcSOAJYCTxfQhK4PoRwUimOlRZJYPVq+PJLGD8eJkzw7ddf\n4cADC7emTaFJE9hjj/R4wl6zxj8s334L06fDjBmF24YNcNBB0LKlbwcf7B+gRH2gJVpr18LXX8OU\nKTB5sm9TpnipdNMNtEmTwu8bNvQn+VSXn++JYcYMT2DffOP/tmnTvOTQsiW0aQOHH+7XeDr8myAF\nkkBBEA2BISUkgV4hhBNLcZyUTAJr18Knn8Lo0b5NmuQ3+TZtoHVr3/bZJz1u9ttjyRL46iv/d0+c\n6F/nzvX3oG1b/9AcfriXcCS9hOD/l+PG+TU+bpzfHBs3LnxKbtHCv69VK+poEyMvz0s0EyfCZ5/B\nJ5/A7NmeCNq3h+OP9896qj70pEsSeBOYB8wHbgghfFPMcVImCcyfD++9B+++C7m5cMAB0KGDb4cf\n7vX12WzlSn86HDfOPzSffAJVqvh7c8QRcPTR/pSoaqTUEoI/Bb//vl/X48b579q1g8MO868HH5y4\n6sl08dtvnhBGj4YRI7wqqUMH6NQJunTxKtJUkQ5JoBqQH0JYbWadgIdCCE2KOU6kSWDePHj1VXjl\nFa8W6dgR/vIX/7rLLpGFlRZC8KenTz6Bjz/2mwzAscfCccd5UsjUJ8lUt2ABfPCB/5+8/753Ljj2\n2MIHmoYNlay3ZfFif++GDIFhw7x69JRTfKtXL9rYUj4JFLHvHOCQEMLSIv4W+vTp8/vPOTk55OTk\nxCXG4qxc6Tf955/3usGuXaF7d/+AVFD/qe226Ylz1CgYORLGjPGSwYknQrduXpWkG09ihODVd4MH\n+zZnjl/PxxzjN/+999Z7H4u1az2pvvkmvP02tGoF557r1/WOOyb+/Lm5ueTm5v7+82233ZYSSaAR\nngSaFfG3OiGERQXftwZeCyE0KuY4SSsJTJwITz7pT/7t28OFF3rdX+XKSTl91lm/3qse3n4bBg3y\n97lbN0+6hx6aue0pyZKXB2PH+vs7eLDf5Lt0gZNP9qd9PdAkxpo1/n4PGODVR2edBVdc4R0nkiXy\nkoCZvQTkADWBRUAfoBIQQghPmtnlwGXABmANcG0IYXwxx0poEsjPh6FD4V//8qejHj3gggugbt2E\nnVKKEIIn4bfe8oTw229e+jrvPGj2h8cIKU4I3rvlxRfh5Ze9S2bXrn7zb9ZMT/vJNn8+PPGEP1w2\nawbXXAOdOyf+/yHyJBBPiUoCGzf6h+TOO/0J9IYb4LTTUre1P9tMn+43shde8HaD887zJ6rataOO\nLDXNmwcDB/r7tXIlnHOOb/vtF3VkArBuHbz2Gtx3n7e/3HKLl8gSVdpVEihBCF48vvVWH1ret6/X\ni+oJKTVt3Oi9MQYM8Aa49u3h4ov9aap8+aiji1ZenvdWe+wx+OILb5D861+9qkdVaakpP9+v4//7\nP68Ovftu710U7/uPkkAxvvgCrrzSG3H69UvMmy+Js2IFvPEG9O/vPTP+9jdvt6lZM+rIkmvhQnj6\naa9mqF/f34dTT1UXznQSgieDv//dexLdd5+PvYiXWJJARj4//Pwz9OzpvVB69vSRvcmol5P4ql7d\n22vGj/fG+2nTfEBejx7eFTXTzZjhpaADDvBRru++6w3r55yjBJBuzOCkk2DqVO8M0bEjXHWVP+hE\nLeOSwKBB3iBTubLXM59/vorKmaB1a68imjnTh/e3awdnnOEjlzPNuHHesNu+vc/BM2uWlwKaN486\nMolVxYpekvv6a2/LadrUSwhRypjqoGXLvOrns8/guee8nlQy14oV8NRT8MADPmjnjjt8lGs6mzDB\n265mzYLevb1xvEqVqKOSRPrwQ7jkEm+n/Pe/t3+MQdZXB02aBIcc4tUHkycrAWSD6tXhuut8VPcJ\nJ/io7jPO8Btoupk82asKTjnFqwpmzoRLL1UCyAZHHeX3r1WrfMDZV18lP4a0TwLPPedTEvTr570m\nsn0+n2xTuTJcfrm3EbRo4Q8APXp4Q3KqW7jQG7o7dfInwdmzvQ0rXWaulPjYaSfvHn3jjT61yltv\nJff8aZsEQvC+t/36+SRY3btHHZFEqWpVuOkmf4quVs2n8n7sMe9ymmrWr/feIQce6D2dZszwRkI1\n9ma3c8+F4cN9gFm/fn6PS4a0bBPYsMHr0aZP9x4TGlAkW5s2zUsIK1fCf/7j012ngo8+8mu3cWNv\nz2hS5DSKks0WLPCejYcdBg89VLqOLVk1TiAvz0eSbupDruofKU4I8NJLPjq8e3cfLR7V0/aqVXDz\nzX7NPvaY9/4RKc7y5d7W1aSJd4DY1kDJrGkY3rjRe0z89pt3BVUCkJKYwdlne9/sH37whrcpU5If\nx9ix3l6xdKnHogQg21Kjhq9h8P33cNllia0aSqskcO21XlQaNEj1p1J6NWvC6697t8tjjoF7701O\nW0FeHvzjH3D66T5h4QsvaE0KKb2qVX120okTfbqbREmb6qD+/b1+7NNP4U9/iiAwyQhz5/p8Ozvu\n6FVFibopL1zoVVAVK/pEb7vumpjzSOZbvNh7vd1yi9eEFCXjq4PGjvVMOGSIEoDEpmFDH6DTtKmv\nYTBtWvzPMWmSj3DOyfHeHkoAEotdd/VJMHv1Ssw4gpQvCSxf7sPlH33UBwSJxMuLL/qAs1de8UE7\n8fDOO3DRRfD44z7Jm0i8DBzoD8OTJnk36M1ldO+gc8/1urHHH48wKMlYo0f7SONHH/W6+1i88ILP\nEvnOO17KEIm3887z2pCHHtry9xmbBD74wGdRnDZNPYEkcb76ypcVffBBTwjbo39/74I6YkRylxWU\n7PLLLz7I8K23fBzBJhnZJrBhA1x9tQ+oUQKQRDroIBg50kdqvv562V8/cKCP8BwzRglAEqtmTb8n\nXnll/LqNpmwSePZZXy/15JOjjkSyQbNm3oh7+eU+lXNpDRsG11/vr91zz8TFJ7LJGWd4Anjzzfgc\nLyWrgzZsCOy7Lzz/vGYEleQaOtSrIMeNg0aNSt531iy/Pt95Z8uiuUiijRjhNSXffOPTSmRcddBr\nr0HdukoAknydO/ugsm7dvEqyOGvWwGmnwe23KwFI8h13nE81PnJk7MdKySTwxBNePysShauu8qrI\nu+4qfp9rrvGxBpdemry4RDYx83aBRx+Nw7FSsTqoVq3A/PmaV12iM28etGwJ77//x2UdJ0yArl19\nCujq1aOJT2TNGthjD78Od9stw6qDTj9dCUCiVa8e3HOPT/u8+XNSCD5y8/bblQAkWlWq+IL1gwfH\ndpyUTAIaGSyp4PzzfebP8eMLfzd4MPz6q/9NJGrdusW+EllKVgetXBk0NkBSwr/+5YMVBwzw4nfz\n5vDIIz64TCRqS5d6L7YVKzJ0xLBI1JYs8VXAvv0W7rgD5s/33msiqWL//WHGjO1PAhXiHZBIJqld\n26sne/SAzz5LzCyOIrFo29Ybh7eXkoDINlx2GRxxhA8kq1kz6mhEttS4cWyvj0vDsJk9Y2aLzKzY\n5yQze9jMZpvZZDNrEY/ziiRDu3ZeAujUKepIRP5or71ie328egc9CxTbVGZmnYC9QwiNgZ5A/zid\nVyThzHxuIZFUVLdubK+PSxIIIYwFfi1hly7A8wX7jgdqmFmdeJxbRCSbbb3ATFkla5xAXeDHzX6e\nX/A7ERGJQUlzXJVGSjYM9+3b9/fvc3JyyMnJiSwWEZFUk5ubS25uLuDdlmMRt3ECZtYQGBJCOKiI\nv/UHRocQXi34eQbQPoSwqIh9NU5ARKSUJk2Cgw9OjbmDrGAryjvAuQBm1hZYVlQCEBGRslm1KrbX\nx6U6yMxeAnKAmmb2A9AHqASEEMKTIYShZtbZzP4HrAIuiMd5RUSy3YIFsb0+LkkghHBWKfa5Ih7n\nEhGRQt9/H9vrU3IWURERKZ3vvovt9UoCIiJpbMqU2F6fkrOI5ucHbLvauUVEskdeHtSoAatXp0bv\noLiZNSvqCEREUt+0aVC/fmzHSMkkMGZM1BGIiKS+UaPg6KNjO0ZKJoHhw6OOQEQk9Q0f7usMxyIl\n2wSqVw8sXAg77hh1NCIiqWn5cqhXz8cJVK+eYW0Chx4KI0ZEHYWISOp66y2vCkqXWUTL5PTTYeDA\nqKMQEUldAwfC2WfHfpyUrA5avjzQoAHMnAl1tOqAiMgW5s2Dgw7yGUSrVAGzDKsO2mkn6NoVBgyI\nOhIRkdTz+ONwzjmeAGKVkiWBEAITJni10OzZULFi1FGJiKSGtWuhQQMYOxaaNPHfZVxJAKB1a2jY\nEF57LepIRERSx8CBcMghhQkgVilbEgAYOhRuugkmT0bTSIhI1tuwAfbbD559Fo48svD3GVkSAOjU\nCcqVg0GDoo5ERCR6L74IjRptmQBildIlAYBhw+Daa32OjAopuSKyiEjirV8P++//x1IAZHBJAHxI\n9G67wXPPRR2JiEh0HnkEDjggvqUASIOSAMCECXDyyTB9uk+bKiKSTZYs8QQwdizsu+8f/x5LSSAt\nkgDARRdB9erw4IMRBCUiEqGePX1MQHH3v6xIAkuWQNOmPnVq8+YRBCYiEoGxY33M1Ndfw847F71P\nRrcJbFK7NtxxB/To4avpiIhkunXr4JJLvD2guAQQq7RJAgAXX+wz5t13X9SRiIgk3p13+riAbt0S\nd460qQ7aZO5caNUKRo+GAw9MYmAiIkk0fjycdBJMmgR77FHyvllRHbRJw4Zw113w1796UUlEJNOs\nXOkTxD322LYTQKzSriQAEAKcdpq/OQ8/nKTARESS5OKLIT8f/vvf0u0fS0kgLcfgmsHTT0PLltCh\ng087LSKSCQYMgI8/hi++SM750rIksMmmOrNx42DvvRMcmIhIgk2aBMcdB2PG+OCw0sqqNoHNtWkD\nffpAly6wYkXU0YiIbL9ffvFeQP/5T9kSQKzikgTMrKOZzTCzWWbWu4i/tzezZWY2sWC7JR7nBbjs\nMjj8cG9Eyc+P11FFRJJn40ZfL7hbNx8YlkwxVweZWTlgFnA08BPwOdA9hDBjs33aA9eHEE4qxfFK\nXR20yfr1cMwxPrHSHXeU6aUiIpG77jqvCho1avtmS466Ybg1MDuEMLcgmFeALsCMrfZL2LIwlSrB\nG2/4amRNm8KZZybqTCIi8fXIIz5l/rhx0UyXH4/qoLrAj5v9PK/gd1s7zMwmm9l7Zhb3Gq9dd4Uh\nQ+Caa+CDD+J9dBGR+Bs82Mc9DR2auGkhtiVZeedLoEEIYbWZdQLeBopdIbNv376/f5+Tk0NOTk6p\nTtKsma9JfNppMGKEdyEVEUlFEyb4eIBhw2DPPcv22tzcXHJzc+MSRzzaBNoCfUMIHQt+vhEIIYR7\nSnjNHOCQEMLSIv5W5jaBrb35Jlx1lfe13WuvmA4lIhJ3M2b4GKcnn4QTT4z9eFG3CXwO7GNmDYEF\nQHdgi1p5M6sTQlhU8H1rPPn8IQHEyymn+NTTxx/v07DWqZOoM4mIlM1338Gxx8Ldd8cnAcQq5iQQ\nQthoZlcAI/E2hmdCCNPNrKf/OTwJnGpmlwEbgDXAGbGed1suvRQWL4ajj/bJ5mrXTvQZRURK9uOP\nfk+6+WY477yoo3FpPWJ4W0KAW2+Fd96BDz+EWrXiclgRkTJbtMi7sffoAddfH99jR10dlLLM4P/+\nzwdiHH20J4KaNaOOSkSyzeLFPpbp7LPjnwBildbTRpSGmS/M0LGj/ycsTVhLhIjIH82fD+3b+2jg\nW2+NOpo/yvgkAJ4I7r7bk0CHDrBwYdQRiUg2+P57TwDnnw+33eb3olST0dVBmzODe++F6tXhz3/2\n4dmNGkUdlYhkqtmz/cGzVy+48sqooyle1iQB8ETwz3/Cn/7kiWDEiOTO1ici2WHaNO+ifvvtcNFF\nUUdTsqxKAptcdZUP0T7qKJ9q4tBDo45IRDLFmDE+E+iDD6bHPGZZ0SZQlL/+1UfrnXCClwhERGK1\nadqal15KjwQAWZwEwFcle+stH7Tx1FNRRyMi6ezf//YpoUeN8i7p6SKjB4uV1qxZXiI49VTo1w/K\nZXVqFJGyyM+HG27wieCGDYOGDZMfQyyDxZQECvz8sy9TWb8+PPcc7LBD0kMQkTSzcqWvarh0Kbz9\nNuyySzRxZO0aw/FUq1bhOgTHHOMj/EREijN3ri9tu8suXgUUVQKIlZLAZnbYwRt0OnTwVcomTow6\nIhFJRWPHQtu2PgjsmWegcuWoI9p+qg4qxhtv+CL2Dz0EZ50VdTQikiqefRZ694bnn/fpaFKB2gQS\nZOpUOPlkn/Pj7ruhfPmoIxKRqKxf7w3A773n44v23z/qiAqpTSBBmjXzJeAmTYLOnTX5nEi2mj/f\nq4m//RY+/zy1EkCslAS2oWZNGD7cE8Ihh3hSEJHskZvrswp07uxrk0S1IHyiqDqoDAYNgp49fTrY\nK65IzRkBRSQ+QoD77oP774cXXvAlIVOV2gSS6NtvfVj4PvvA00/DTjtFHZGIxNuvv8LFF/tykG+8\nAQ0aRB1RydQmkER77w3jxnmf4FatYMqUqCMSkXj69FNo2RLq1oWPP079BBArJYHtsMMO0L8/9Onj\nA8sefdSLjiKSvjZu9FUIu3aFhx/2LZ37/5eWqoNiNHu2jyPYbTf473+hdu2oIxKRslqwwGcW3rAB\nBg6EevWijqhsVB0UocaN4ZNP4MADoUULGDky6ohEpCyGDfOef3/+M3z4YfolgFipJBBHo0fDuef6\nghJ33pkdRUmRdLVqlS/9OGyYj/498sioI9p+KgmkiA4dYPJkmDMH2rSBr76KOiIRKcr48d74u3q1\nd+5I5wQQKyWBOKtZE958E665xhuN+/WDvLyooxIR8Dr/f/7Tp42/6y4YMABq1Ig6qmipOiiBfvzR\nF5letswvtkwaai6SbqZP98bfXXf1mT933z3qiOJH1UEpqn59X7/4wgu90en++70bmogkT14e3HOP\nfwYvvtgngMukBBArlQSS5Lvv4IILPAk895yPOBaRxJo61T93O+/s64g3ahR1RIkReUnAzDqa2Qwz\nm2VmvYvZ52Ezm21mk82sRTzOm0722st7D516qi9G8fDDKhWIJMr69XDbbXDUUb4uyMiRmZsAYhVz\nScDMygGzgKOBn4DPge4hhBmb7dMJuCKEcIKZtQEeCiG0LeZ4GVkS2NzMmXDJJX6hPv20jzEQkfj4\n8kt/+m/Y0Ef2160bdUSJF3VJoDUwO4QwN4SwAXgF6LLVPl2A5wFCCOOBGmZWJw7nTkv77uvT015w\ngXcrvfVWWLs26qhE0tvatXDTTT7lc+/ePu1zNiSAWMUjCdQFftzs53kFvytpn/lF7JNVypXzaamn\nTIFvvvHRxh99FHVUIulp9Gho3tyncfnqKzj7bE31XloVog6gKH379v39+5ycHHJyciKLJdH22MPH\nFQwa5HMQnXCC92T405+ijkwk9S1ZAtdfD2PGwCOPwEknRR1RcuTm5pKbmxuXY8WjTaAt0DeE0LHg\n5xuBEEK4Z7N9+gOjQwivFvw8A2gfQlhUxPEyvk2gOMuXw403ejH24Yd9bWM9zYj8UX6+T9j4j394\n3/++faFataijik6ki8qYWXlgJt4wvACYAJwZQpi+2T6dgcsLGobbAg9mc8Pwtowd61VFDRr40426\nk4oU+vpruPRSH/37xBNeDZTtIm0YDiFsBK4ARgJfA6+EEKabWU8z61Gwz1Bgjpn9D3gC+Fus581k\nRxzhcxAddZR3J+3TB9asiToqkWitXu0Nvzk5XnX6ySdKAPGgwWIpbt48uPZamDjRSwWdO0cdkUhy\nhQDvvgtXX+0TM/77375+hxTSGsNZYMQIuPJKaNoUHnzQ+0CLZLpZs/zmP2eOt5Mdd1zUEaWmqMcJ\nSBIcf7wPgT/kEN/uussHm4lkohUrvK9/u3Zw9NHe7VMJIDGUBNJI5cpwyy3w+ee+GPaBB3oxWQUn\nyRQhwEsv+Yy7Cxb4g0+vXlCpUtSRZS5VB6Wx4cO9vaBhQ68n1VTVks6mTPEqz5Ur4dFHvRQgpaPq\noCzVsaMXkzt18pWRrrkGfv016qhEymbpUrj8cq/uOftsL+kqASSPkkCaq1jRG86++cbnTtlvP580\nSzOUSqrLy/NrdVMJdvp0Hx9Tvny0cWUbVQdlmMmTC0sEDz3kfapFUsmmLp+9e3tXzwce8LmzZPup\ni6hsIQSfj6hXL2jVCv71L9hzz6ijEvGqnhtugJ9/hnvv9apMTY0SO7UJyBbMfPGa6dP9CevQQ32k\n5fLlUUcm2WrOHDjzTDj5ZDjnHC+xdu6sBJAKlAQyWJUq3qV0yhRYtMjXMfjPf3zOFZFkWLrUZ/ls\n1crr/mfN8nV+K6Tk/MXZSUkgC9St6zMujhgBb7/t4wsGD9b4Akmcdevg/vu9o8KqVT7p2z//CVWr\nRh2ZbE1tAlkmBE8GvXpBzZr+QW3VKuqoJFPk58Orr8LNN0OzZr42hsavJJ4ahqXM8vLguef86eyo\no6BfP81HJLEZM8YfLgDuuw/at482nmyihmEpswoVvG521ixfr+Dgg31BGzUeS1lNn+4rep1/Plx3\nHYwfrwSQTpQEsly1ar4q09Sp3m2vSRMfsq/GY9mWhQt9cZcjj/Sb/owZ3gOonO4qaUX/XQL4WsdP\nPw2jRsGQIT5l9aBBajyWP1q1Cm6/3a+RqlVh5kzvAVS5ctSRyfZQm4AUacQIH9Sz004+2Oyww6KO\nSKKWlwfPPuslxyOPhDvv1CDEVKGGYUmIjRvhxRfh1luhdWtfw6Bx46ijkmQLAYYO9Wkeatb0Rt9D\nD406KtmcGoYlIcqXh/PO8+J+q1ZeGrjySliyJOrIJFkmTvRFXXr18if/3FwlgEyjJCDbVKWK9xya\nMcMTw/77+w1h9eqoI5NEmTvXp3c44QQ44wzvOHDSSZrmIRMpCUip1arl6xuPH+9TUTRp4iORNW11\n5li2DP7+d+8yvPfe3oW4Z09N85DJlASkzPbe20eFvvmmDzhr0cLrjNWUk77Wr/cE36SJT0M+dSrc\ndhtUrx51ZJJoahiWmITgXUp79/ZupvfeC4ccEnVUUlohwOuv+yyz++3n0zwceGDUUUlZqXeQRC4v\nz6uG+vaFDh18GopGjaKOSkoydqw3+K5f7z1+jjoq6ohke6l3kESuQgXo0cPrkJs08dJAr14+lbCk\nlpkzoWtXX8/3iivgiy+UALKZkoDEVbVq0KePTx28cqVXMdx/v69/LNFavNgXdD/iCO/uO3Om9wDS\nNA/ZTf/9khC77eaLiI8ZAx9/7Mlg4ECfaliSa/Vqr5474ACoWNEnfPv732GHHaKOTFKB2gQkKT76\nyKehyMvzaShU/ZB4+fk+4vsf/4C2beHuu71nl2SeyBqGzWxn4FWgIfA9cHoI4Q+TEZvZ98ByIB/Y\nEEJoXcIxlQQyVAjwxhveE6VJE++J0qxZ1FFlptxcn9StYkV44AFo1y7qiCSRomwYvhF4P4SwL/Ah\ncFMx++UDOSGEliUlAMlsZnDaafDNN9CpExxzDFx0EcyfH3VkmWPWLF/M/YILvOT16adKAFKyWJNA\nF2BAwffNwxovAAAJV0lEQVQDgJOL2c/icC7JEJUq+RxEs2ZBnTpw0EFeZfHbb1FHlr5++QWuuspv\n+O3aeb1/9+6a5kG2LdYb864hhEUAIYSFwK7F7BeAUWb2uZldEuM5JUPUqOFzEE2ZAj/9pAVttse6\ndd7Hf7/9vA1Ajb5SVttsEzCzUUCdzX+F39RvAZ4LIeyy2b6/hBBqFnGM3UMIC8ysNjAKuCKEMLaY\n86lNIEt99ZVXYfzwAzz0EBx3XNQRpa4QfNGfG27wXj/33qsF3bNZLG0C25wWKoRwbAknXmRmdUII\ni8xsN2BxMcdYUPB1iZkNAloDRSYBgL59+/7+fU5ODjk5OdsKUzLAQQfB8OHw3nvwt7/59AUPPAB7\n7RV1ZKll+nSv+lmwAJ580qd6luySm5tLbm5uXI4Va++ge4ClIYR7zKw3sHMI4cat9tkRKBdCWGlm\nVYGRwG0hhJHFHFMlAWHdOk8A99/v69jedJMvZZjNfvvNl3UcMABuucUTZcWKUUclqSDK3kH3AMea\n2UzgaODugoB2N7N3C/apA4w1s0nAZ8CQ4hKAyCaVK/uNf/JkmDPH67xfeSU7ZyrNz4fnn/f3YOlS\nmDYNrr5aCUDiQ4PFJC2MHes9iqpXh0cegebNo44oOSZO9H/3+vXeaN6mTdQRSSrSBHKS8Y44wic6\nO+ssOPZY7wGzalXUUSXO8uU+z0/nzt7nf/x4JQBJDCUBSRvly3v7wNSpMG+ejzYePjzqqOJv0CBo\n2tS7yk6fDhdfrEneJHFUHSRpa/hwbxxt08ZXxapTZ9uvSWU//eRTO3/9NTz1FBx5ZNQRSbpQdZBk\npY4dvZG0QQMvFTz9dHo2HOfn+4yrzZt7CWDKFCUASR6VBCQjTJni8xDVquXJoF69qCMqnW+/9Tr/\nDRv86V9LO8r2UElAsl7z5oWTpR18sHepTOVniRB8oFfbtr7K19ixSgASDZUEJONMmgTnnecjjZ9+\n2ksHqWThQm/sXbAAXnjBp30QiYVKAiKbadkSPv/cJ6Rr2dIXtEkVQ4dCixYe16efKgFI9FQSkIw2\nbBhceCFcdplPV12+fDRx5OXBrbf6Sl8vv+zjHkTiJbKVxRJBSUDi7aef4Oyz/fuXX/b1j5N9/u7d\noUoVTwK1ayf3/JL5VB0kUoI99oD334c//9nHFEyenLxzjxkDhxzi02IPG6YEIKlHJQHJKq+95tMx\nPPEEdOuW2HO98IKv8ztwoE91IZIoCV1PQCSTnH669xrq2tWnZLj55vgvwRgC3HabT/mcm6vGX0lt\nKglIVvrpJ1+Q/cADvb9+hTg9Dq1bB5dcAjNmwJAh6T+VhaQHtQmIlNEee8Do0T4RXffufvOO1Zo1\ncNJJsGKFlwCUACQdKAlI1qpa1Z/WQ4BTTvE5+7fX6tVw4ok+MO3112HHHeMXp0giqTpIst6GDXDa\nab5S18svl71qaP16+MtfvOvps89GNxZBspfGCYjEaN06r8qpX98ncittY3F+Ppx7LqxcCW++qQQg\n0VCbgEiMKleGt97y1csefLD0r7vlFvjuO3jpJSUASU/qIipSoGpVGDzYZ/Y84AA4/viS9x8yxMcA\nfPml2gAkfak6SGQrH33k4wmmTi1+hO8PP8Chh/pSkO3aJTc+ka2pTUAkznr1gvnzvaF4ayFA+/Zw\nwgnQu3fyYxPZmtoEROLs9tu9feDtt//4tzfe8LEAN9yQ/LhE4k0lAZFijBnjPX++/baw2+j69d5e\n0L8/HHNMtPGJbKKSgEgCtG/vI4uHDi383eOPQ+PGSgCSOVQSECnBgAHwyis+DfTChXDQQfDBB9Cs\nWdSRiRRSw7BIgqxZ4wPIJkyAq6/2JNCvX9RRiWxJSUAkga67zhelKV8exo+HSpWijkhkS5G1CZjZ\nqWY2zcw2mtnBJezX0cxmmNksM1OnOkkrl14K33/vi8QoAUimibVheCrQFRhT3A5mVg54FDgeaAqc\naWb7xXheKYXc3NyoQ8gITZrAkiXw88+5UYeSUXR9poaYkkAIYWYIYTZQUjGkNTA7hDA3hLABeAXo\nEst5pXT0IYufypX1fsab3s/UkIwuonWBHzf7eV7B70REJGLbnEDOzEYBm6+RZEAA/hFCGJKowERE\nJPHi0jvIzEYD14cQJhbxt7ZA3xBCx4KfbwRCCOGeYo6lrkEiImW0vb2D4jmVdHEBfA7sY2YNgQVA\nd+DM4g6yvf8QEREpu1i7iJ5sZj8CbYF3zWxYwe93N7N3AUIIG4ErgJHA18ArIYTpsYUtIiLxkHKD\nxUREJHkinUBOg83iy8x2NrORZjbTzEaYWY1i9vvezKaY2SQzm5DsOFNdaa43M3vYzGab2WQza5Hs\nGNPFtt5LM2tvZsvMbGLBdksUcaYLM3vGzBaZ2Vcl7FOmazPqWUQ12Cy+bgTeDyHsC3wI3FTMfvlA\nTgihZQihddKiSwOlud7MrBOwdwihMdAT6J/0QNNAGT67H4UQDi7Y7khqkOnnWfz9LNL2XJuRJgEN\nNou7LsCAgu8HACcXs58R/QNAqirN9dYFeB4ghDAeqGFmdZCtlfazq84gpRRCGAv8WsIuZb420+FG\noMFmpbdrCGERQAhhIbBrMfsFYJSZfW5mlyQtuvRQmutt633mF7GPlP6ze1hB1cV7ZnZAckLLWGW+\nNuPZRbRIGmwWXyW8n0XVpRbX6n94CGGBmdXGk8H0gicMkWT7EmgQQlhdUJXxNtAk4piySsKTQAjh\n2BgPMR9osNnP9Qp+l5VKej8LGozqhBAWmdluwOJijrGg4OsSMxuEF9uVBFxprrf5QP1t7COleC9D\nCCs3+36YmT1mZruEEJYmKcZMU+ZrM5Wqg7Y52MzMKuGDzd5JXlhp5R3g/ILvzwMGb72Dme1oZtUK\nvq8KHAdMS1aAaaA019s7wLnw+4j4ZZuq4WQL23wvN6+vNrPWeLd1JYCSGcXfL8t8bSa8JFASMzsZ\neASohQ82mxxC6GRmuwNPhRD+EkLYaGabBpuVA57RYLNi3QO8ZmYXAnOB08EH71HwfuJVSYMKpueo\nAAwMIYyMKuBUU9z1ZmY9/c/hyRDCUDPrbGb/A1YBF0QZc6oqzXsJnGpmlwEbgDXAGdFFnPrM7CUg\nB6hpZj8AfYBKxHBtarCYiEgWS6XqIBERSTIlARGRLKYkICKSxZQERESymJKAiEgWUxIQEcliSgIi\nIllMSUBEJIv9PyQb/yZcrITVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Représentation d'une courbe paramétrée\n", "\n", "t = linspace(0, 2 * pi, 500)\n", "x = cos(t)\n", "y = sin(t) + sqrt(abs(cos(t)))\n", "plot(x, y)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Echelle logarithmique\n", "\n", "figure(figsize=(13,5))\n", "\n", "t = linspace(0, 2, 100)\n", "x = 2 ** t\n", "y = 1 / x ** 3\n", "\n", "subplot(1, 2, 1)\n", "title('Echelle lineaire') # Pour les chaîne avec caractères accentués, mettre un préfixe u avant le guillemets\n", "plot(x, y)\n", "\n", "subplot(1, 2, 2)\n", "title('Echelle logaritmique')\n", "plot(log(x), log(y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Et maintenant à vous de 'jouer'\n", "\n", "### Exercice 1 (Petits systèmes, conditionnement et stabilité)\n", "\n", "On considère les sytèmes linéaires perturbés suivants, étudiés en TD: \n", "$$\n", "A=\\left (\n", "\\begin{array}{cc}\n", "7 & 10 \\\\\n", "5 & 7\n", "\\end{array}\n", "\\right ), \\quad Y_{1}= \n", "\\left (\n", "\\begin{array}{c}\n", "10 \\\\\n", "7\n", "\\end{array}\n", "\\right ) \\quad \\textrm{et} \\quad Y_{2}=\n", "\\left ( \n", "\\begin{array}{cc}\n", "10,1 \\\\\n", "6,9\n", "\\end{array}\n", "\\right ).\n", "$$\n", "\n", "Résoudre les équations $AX=Y1$ et $AX=Y2$ à l'aide de la commande solve de la librairie `numpy.linalg`. Calculer le conditionnement de $A$ et conclure. \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice 2 (Normes subordonnées)\n", "\n", "On considère la matrice $A=\\left(\\begin{array}{cccc}2 & 1 & 1 & 0 \\\\4 & 3 & 3 & 1 \\\\8 & 7 & 9 & 5 \\\\6 & 7 & 9 & 8\\end{array}\\right)$. En utilisant la commande `norm`, calculer ses normes $\\|\\|_1$, $\\|\\|_2$ et $\\|\\|_{\\infty}$ et retrouver en calculant les membres de droite (de manière la plus concise possible à partir des fonctions pré-programmée de Python) les formules suivantes vues en cours et TD:\n", "- $\\|A\\|_{\\infty}=\\max_{i\\in\\{1,...,N\\}}\\sum_{j=1}^{N} |a_{i,j}|$\n", "- $\\|A\\|_{1}=\\max_{j\\in\\{1,...,N\\}}\\sum_{i=1}^{N} |a_{i,j}|$\n", "- $\\|A\\|_{2}=(\\rho(A^{T}A))^{\\frac{1}{2}}$\n" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [], "source": [ "? norm" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }