Quelques représentations graphiques
On utilise ici les bibliothèques classiques, supposées activées dans la suite :
from math import *
from scipy import *
from numpy import *
from matplotlib.pyplot import * # bibliothèque graphique
Partie I. Graphes de fonctions et de courbes paramétrées
Soient xet ydeux listes ou deux tableaux de même longueur net dont les éléments sont des nombres ‡ottants.
plot(x,y) crée le graphe représentant la ligne polygonale reliant les points (xi; yi)0i<n:
Ainsi, plot(([2,1],[2,3]) est le segment reliant les points (2;2) et (1;3). Dans certaines versions de Python
ou au sein d’une procédure, il faut ajouter show() pour a¢ cher e¤ectivement l’image (dans une nouvelle
fenêtre).
Il existe de nombreuses options supplémentaires :
Exemple :
plot([1,1.5,3],[1,3,3])
axis ([0,3,0,5]) # on dé…nit ici les axes (contour du graphe), ici [0;3] [0;5]
show() # on représente dans une fenêtre le graphe dé…ni par les instructions précédentes.
Remarque :
plot([0,2,3],[1,3,3])
plot([1,1.5,3],[1,3,3])
show() # on représente dans une fenêtre la superposition des deux graphes dé…nis précédemment.
1) a) Ecrire une fonction graphe qui étant donnée fet deux réels aet b, représentent le graphe de fsur [a; b]
à l’aide d’une ligne polygonale contenant n= 100 intervalles.
Solution :
def graphe(f,a,b) :
n = 100
x = [a+k*(b-a)/(n-1) for k in range(0,n)]
y = [f(t) for t in x]
return plot(x,y)
Exemple d’utilisation : graphe(sin,0,2*pi) ouvre une fenêtre contenant le tracé de la fonction sin sur [0;2]
en utilisant une subdivision régulière de longueur n= 100.
Remarque : Dans la littérature, au lieu de x = a + (b-a)/(n-1)*array(range(0,n)), la fonction spéciale
linspace est souvent utilisée, sous la forme : x = linspace(a,b,n).
b) Ecrire une fonction polygone qui étant donné un entier nreprésente le polygone régulier à ncôtés inscrits
dans le cercle unité.
Solution :
def polygon(n) :
t = (2*pi/n)*array(range(0,n+1))
x = [cos(i) for i in t] ; y = [sin(i) for i in t]
return plot(x,y)
Si on veut une fonction de type None (ne renvoie pas de valeur, mais on a¢ che le graphe), on peut considérer :
def polygon(n) :
t = (2*pi/n)*array(range(0,n+1))
x = [cos(i) for i in t] ; y = [sin(i) for i in t]
plot(x,y)
show()
2) a) Ecrire une fonction euler qui étant donnée une fonction fde deux variables, et des réels a,b; c,net
représente le graphe sur [a; b]de la solution apporchée de l’équation di¤érentielle y0(x) = f(x; y(x)) avec la
condition initiale y(a) = c:
On utilise la méthode d’Euler avec un pas =ba
n1:
Autrement dit, on considère les suites (xk)0knet (yk)0kndé…nies par (xk=a+k
y0=cet yk+1 =yk+f(xk; yk)
b) Appliquer la fonction précédente à l’équation y0(x) = y(x)avec la condition initiale y(0) = 1 pour évaluer
y(1) en utilisant le pas =1
100 :Modi…er la fonction de sorte qu’elle renvoie y(1), et comparer la valeur avec
e= exp(1):
Solution :
a)
def euler(f,a,b,c,n) :
delta = (b-a)/(n-1)
x = [a+k*delta for k in range(0,n)]
y = [c]*(n)
for k in range(1,n) :
y[k] = y[k]+delta*f(x[k],y[k])
return plot(x,y)
b) On modi…e la fonction de sorte que la valeur renvoyée est la valeur approchée de yen b:
def euler2(f,a,b,c,n) :
delta = (b-a)/n
x = [a+k*delta for k in range(0,n+1)]
y = [c]*(n+1)
for k in range(1,n+1) :
y[k] = y[k]+delta*f(x[k],y[k])
return y[n]
def f(x,y) : y
print(euler2(f,0,1,100)) che 2.704813829421526
print(exp(1)) che 2.71828182846
En modi…ant la valeur de n, on peut noter que plus nest grand, plus l’écart entre la valeur approchée et la
valeur réelle est faible. On peut montrer mathématiquement que l’écart tend vers 0 lorsque ntend vers l’in…ni.
Partie II. Exemples d’images (2D)
1) Représentation d’un nuage de points. On considère deux tableaux réels xet yde même longueur n,
On a vu que plot(x,y) renvoie la ligne polygonale reliant les points (xk; yk), avec 0k < n:
Si on veut ajouter des couleurs ou représenter les points, on ajoute des options.
Par exemple, "ro" représente des cercles ("o") autour de chaque point, coloriés en rouge ("r").
Ainsi, on peut représenter le nuage de points (cercles rouges) par plot(x,y,’ro’).
Si on veut relier ces points, on utilise "-", ce qui donne plot(x,y,"ro-").
Remarque : L’option par défaut est "b-" (lignes bleues).
On peut aussi préciser les axes : axis(a,b,c,d) consiste à se placer dans [a; b][c; d]
On utilise show() pour a¢ cher l’image dé…nie précédemment.
Ainsi, pour représenter dans [0;1] [0;1] la ligne polygonale reliant les points (xk; yk)de sorte à ce que les
points soient marqués de cercles rouges, on considère :
plot(x,y,"ro-")
axis(0,1,0,1)
show()
2) On peut associer à tout tableau matriciel asous forme d’image : Python associe une couleur à chaque réel
selon l’intervalle contenant tous les réels du tableau. On peut imposer une seule couleur, par exemple le gris
(gray), et l’intensité est alors proportionnelle est à la valeur du co cient (relativement aux autres).
a = array([[1,2],[1,3]])
matshow(a,cmap=cm.gray)
Pour obtenir une image lissée, on utilise : imshow(a,cmap=cm.gray)
Pour construire un tableau aléatoire, on peut utiliser :
b = random.rand(4,4) # construit un tableau 44d’éléments aléatoires pris dans [0;1]
3) Représentations des images couleur (selon le codage Rouge-Vert-Bleu) :
Une image couleur est classiquement représentée par un tableau np3de réels compris (généralement
compris entre 0 et 1), où pour chacun des nppixels est donné l’intensité des 3 couleurs (sous forme d’un
triplet de réels appartenant à [0;1]).
Ainsi, une image couleur est codée par un tableau de type (n; m; 3), où nest le nombre de lignes, mle nombre
de colonnes et la couleur de chaque pixel est dé…nie par les trois couleurs fondamentales RGB (rouge-vert-bleu)
codées par des réels (généralement compris entre 0 et 1).
Par exemple,
a = random.rand(10,10,3) # tableau aléatoire représentant une image couleur avec 10 10 pixels.
b = array(a) # on crée une copie du tableau a, qu’on appelle b
for i in range(10) :
for j in range(10) :
b[i,j,1] = 0 ; b[i,j,2] = 0 # on annule dans bles composantes vertes et bleues
imshow(a) # on représente l’image multicolore associée à a
imshow(b) # l’image associée à best rouge (c’est la composante rouge de l’image de a)
4) On peut aisément avec Python récupérer une image au format png et la modi…er.
Pyzo a besoin de savoir dans quel dossier il doit chercher le …chier-image à lire. Pour cela, le plus simple est de
choisir le dossier où se trouve le …chier Python qu’on utilise. Pour indiquer à Python qu’on choisit ce dossier,
exécutez une fois ce …chier (même vide) à l’aide de la commande Exécuter en tant que script du menu Exécuter.
On peut ensuite lire les …chiers images disponibles sur Internet (au format png), dont notamment le fameux
chier lena.png qui est souvent pris comme …chier-image test (pour des raisons historiques et plastiques).
from matplotlib._png import read_png
a = read_png(’lena.png’) # attribue à ale tabkleau des couleurs de l’image du …chier lena
a.shape # renvoie (512;512;3) qui est la taille du tableau a
imshow(a)
show()
Si on veut obtenir l’image uniquement en rouge :
for i in range(512) :
for j in range(512) :
a[i,j,0] = a[i,j,0]+a[i,j,1]+a[i,j,2]
a[i,j,1] = 0 ; a[i,j,2] = 0
imshow(a) # renvoie l’image en rouge
Ne pas confondre avec l’image …ltrée selon la couleur rouge, obtenue en gardant la valeur des a[i,j,0].
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !