0% ont trouvé ce document utile (0 vote)
0 vues6 pages

Cours Simulation Numérique

Ce document présente une introduction à la manipulation de vecteurs et matrices en Python à l'aide de la bibliothèque Numpy. Il couvre des concepts tels que la création de tableaux, la sélection de sous-matrices, les opérations sur les matrices, ainsi que le traçage de courbes avec Matplotlib. Des exercices pratiques sont également fournis pour illustrer l'application des concepts abordés, notamment la construction de fractales et la création de réseaux routiers.

Transféré par

ademboulehmi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues6 pages

Cours Simulation Numérique

Ce document présente une introduction à la manipulation de vecteurs et matrices en Python à l'aide de la bibliothèque Numpy. Il couvre des concepts tels que la création de tableaux, la sélection de sous-matrices, les opérations sur les matrices, ainsi que le traçage de courbes avec Matplotlib. Des exercices pratiques sont également fournis pour illustrer l'application des concepts abordés, notamment la construction de fractales et la création de réseaux routiers.

Transféré par

ademboulehmi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

IPEI EL MANAR Module VII : Simulation numérique en Python(partie1) Année universitaire :

Manipulation de vecteurs et matrices

Durant ce chapitre on utilisera des bibliothèques nécessaires. On les charge une seule fois par les commandes :
Import numpy as np
Import [Link] as plt

I. Vecteurs, matrices et tableaux :

La bibliothèque Numpy ajoute le type array qui est similaire à une liste (list) avec la condition supplémentaire que
tous les éléments sont du même type. Ce sera donc un tableau d’entiers, de flottants voire de booléens.
La commande array permet de convertir une liste en un tableau. Le deuxième argument est optionnel et spécifie le
type des éléments du tableau.

>>>a = [Link]([1, 4, 5, 8], float)


>>>type(a)
<type ’[Link]’>
Un tableau peut être multidimensionnel; ici dimension 3
>>>a=[Link]([[[1,2],[1,2]],[[1,2],[1,2]]])
>>>type(a)
<type ’[Link]’>
>>>a[1,1,1] 2
Numpy/Scipy proposent aussi le type mat comme matrice, exclusivement un tableau bidimensionnel.
>>>a=[Link](’[1 2 4 ; 3 4 5.]’)
>>>b= [Link] (’[2. ; 4 ; 6]’)
>>>print a*b
Tout objet array est convertible en type mat et réciproquement (sous la condition que le tableau (array) soit
{uni,bi}-dimensionnel)
>>>a=[Link]([1, 2, 4])
>>> [Link] (a)
Nous limiterons notre étude aux tableaux {uni,bi}-dimensionnels.

>>>[Link](10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


>>>[Link](2, 10, dtype=[Link]) array([ 2., 3., 4., 5., 6., 7., 8., 9.])
>>>[Link](2, 3, 0.1) array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
>>>[Link](3.0) array([ 0., 1., 2.])

>>>[Link](1., 4., 6) linspace(premier,dernier,n) renvoie un array commençant


par premier, se terminant par dernier avec n éléments
régulièrement espacés.
array([ 1. , 1.6, 2.2, 2.8, 3.4, 4. ])
>>>[Link](1, 2, 4) 4 points entre 10**1 et 10**2
>>>[Link](1, 2, 4, base=2) 4 points entre 2**1 et 2**2

Classe : 1ère Année MP, PC, PT Page 1


IPEI EL MANAR Module VII : Simulation numérique en Python(partie1) Année universitaire :

Il est possible de sélectionner une sous matrice, en ne gardant que quelques lignes consécutives et/ou
certaines colonnes consécutives
M[:,:] est une sous matrice intégrale de M avec nouvelle référence
M[:a,:b] est la sous matrice les lignes du début jusqu’à < a > exclu, colonne de début jusqu’à <b>exclu.
M[:,b] la colonne b
M[a,:] la ligne a
M[ ::2, ::3] c’est une sous matrice de M composée par une ligne sur deux et une colonne sur trois.

>>>a=[Link]([1, 2, 3, 4, 5]) En Python modifier une donnée d’une extraction d’un


>>>c=[Link]([1, 2, 3, 4, 5]) tableau entraîne aussi une modification du tableau initial!
>>>b=a[1:3] Si nécessaire la fonction [Link](a) ou [Link]() permet de
>>>b[1]=0 faire une copie d’un tableau a.
>>>a Dans l’instruction [début:fin:pas] deux des arguments
array([1, 2, 0, 4, 5]) # a modifié peuvent être omis : par défaut l’indice de début vaut 0 (le
>>>b=c[1:3].copy()# première méthode 1er élément), l’indice de fin est celui du dernier élément et
>>>b[1]=0 le pas vaut 1.
>>>bb=[Link](c[1:3]) # seconde méthode Un pas négatif inversera l’ordre du tableau et les tableaux
>>>bb[1]=0 étant considérés cycliques la commande a[-2::1] extrait
>>>c l’avant dernier et dernier élément. Pour un tableau
array([1, 2, 3, 4, 5]) # c non modifié bidimensionnel on peut bien sûr jouer avec les deux
indices.
>>>a=[Link]([2,4,6,8],float) Une autre méthode d’extraction consiste à écrire a[b] où b
>>>b=[Link]([0,0,1,3,2,1],int) est un tableau d’entiers qui correspondra aux indices à
>>>a[b] extraire et a un vecteur. Pour les matrices c’est a[b,c] et on
array([ 2., 2., 4., 8., 6., 4.]) prend les indices de ligne dans b, les indices de colonnes
>>>a=[Link](2,2) dans c, successivement.
>>>b=[Link]([0,0,1,1,0],int)
>>>c=[Link]([0,1,1,1,1],int)
>>>a[b,c]
array([ 2., 4., 8., 8., 4.])
>>>a=[Link](16) Numpy propose le redimensionnement d’un tableau avec la
>>>[Link](4,4) fonction reshape. Il faut tout de même respecter une
>>>[Link](2,8) condition : le nombre d’éléments doit être le même!
>>>b=[Link]((4,4),float)+[Link](4,4) Il est possible aussi de transformer un arraybi-dimensionnel
>>>[Link](b,16) en un array unidimensionnel avec reshape ou flatten.
>>>[Link](b,(2,8)) L’instruction [Link]() renvoie une copie de b, ce qui n’est
>>>[Link]() pas le cas de reshape. Ici un exemple avec la syntaxe
[Link](array,dimension)
>>>a=[Link](4).reshape(2,2) Numpy permet d’assembler les vecteurs et les matrices, de
>>>b=4+[Link](4).reshape(2,2) les concaténer. Par défaut l’assemblage se fait selon la 1ère
>>>[Link]((a,b)) dimension (les lignes, donc assemblage vertical). L’option
>>>[Link]((a,b),axis=0) axis=1 assemble “horizontalement”.
>>>[Link]((a,b),axis=1)

Classe : 1ère Année MP, PC, PT Page 2


IPEI EL MANAR Module VII : Simulation numérique en Python(partie1) Année universitaire :

1) Matrices particulières :

[Link](n) ((n,p)) vecteur nul de taille n, matrice nulle de taille n,p


[Link](n) ((n,p)) matrice de taille n (n,p) avec des 1 sur la diagonale et des zéros ailleurs
[Link](n) ((n,p)) vecteur de taille n, matrice de taille n,p remplie de 1
[Link](v) matrice diagonale dont la diagonale est le vecteur v
[Link](v,k) matrice dont la ‘diagonale’ décalée de k est le vecteur v (k est un entier
relatif)
[Link](n) vecteur (taille n), matrice (taille n,p) à coefficients aléatoires uniformes sur
((n,p)) [0,1]

2) Opérations :
c= [Link](16)
A=[Link](4,4)+ [Link]([5,6,4,2])
b= [Link](5,9)

Opération et commande Description


+ additionne terme à terme deux tableaux de même dimension
2.+A renvoie le vecteur/matrice dont tous les éléments sont ceux de a plus 2
* terme à terme deux tableaux de même dimension
2*A renvoie le vecteur/matrice de même dimension dont tous les éléments ont
été multipliés par 2
>>>[Link](A) #nbre d’éléments Renvoie la taille
>>>[Link](b)
>>>len(b) # nbre de lignes
>>>[Link](A) #dimension
>>>A**3 renvoie le vecteur/matrice de même dimension dont tous les éléments sont
>>>[Link](A,3) ceux de A élevés à la puissance 3
1. /A renvoie le vecteur/matrice de même dimension dont tous les éléments sont
ceux l’inverse de l’élément de même indice de A
>>>[Link].matrix_power(A,3) La matrice A puissance 3
>>> f=lambda x: x**2
>>>def F(x):
if x>0:
return 1
elif x==0:
return 0
else:
return -1
>>> f(a)
>>> F(a)
>>> VF=[Link](F)
>>> VF(a)

Classe : 1ère Année MP, PC, PT Page 3


IPEI EL MANAR Module VII : Simulation numérique en Python(partie1) Année universitaire :

II. Traçage de courbes :

On crée une liste d’abscisses et une liste d’ordonnées; les points sont alors placés et reliés par des segments. Le
code est le suivant :

x=[1,3,4,8]
y=[2,1,5,3]
[Link](x,y) #traçage
[Link](’figure’) # sauvegarde
[Link]() # affichage
On change la couleur et l’épaisseur
du trait, on ajoute un titre et des
étiquettes :
[Link](x,y,color=’red’,linewidth=6)
[Link](’Figure 1’)
[Link](’abscisses’)
[Link](’ordonnées’)
def f(x):
return x**2*[Link](-x**2)
x=[Link](0,3,51)
y=f(x)
[Link](x,y,linewidth=4)
[Link](’Une courbe’)
[Link](’x’)
[Link](’y’)
[Link]([’t^2*exp(-t^2)’])
[Link]([0,3,-0.05,0.6])
[Link]()
def f(x):
return x**2*[Link](-x**2)
def g(x):
return x*[Link](-x**2)
x=[Link](0,3,51)
y=f(x)
z=g(x)
[Link](x,y,linewidth=4)
[Link](x,z,linewidth=4)
[Link]('Une courbe')
[Link]('x')
[Link]('y')
[Link](['t^2*exp(-t^2)','t*exp(-
t^2)'])
[Link]([0,3,-0.05,0.6])
[Link]()

Classe : 1ère Année MP, PC, PT Page 4


IPEI EL MANAR Module VII : Simulation numérique en Python(partie1) Année universitaire :

III. Applications :
Exercice1 (fractal) :
L’idée de base de la construction d’une courbe de Von Koch est la suivante :
On considère dans le plan complexe un segment [A,B] avec A d’affixe 0 et B d’affixe 1 que l’on va transformer en la ligne brisée ci-
dessous où C est d’affixe 1/3, E est d’affixe 2/3 et le triangle CDE est équilatéral.

On itère ensuite cette opération sur chacun des quatre segments de la figure précédente.

En partant de deux complexes quelconques A et B. On souhaite construire les complexes C,D, et E.


On peut Montrer que :
C= 2/3* A + B/3
E= A/3+2/3*B
D = C + (cos(Pi/3) + j sin(Pi/3))*(E − C)

1. Ecrire une fonction récursive VonFract qui prend comme paramètre une liste L de complexes indiquant une liste de
points dans le plan et un entier n. cette fonction retourne la liste de complexes (points) de la courbe de Von Koch
après application de sa méthode n itération sur les segments de la courbe donné par la liste L.

2. Appliquer cette fonction et tracer la courbe résultante sur le segment [AB], A=0 et B=1, avec n=5.

Exercice2 (fractal):
On donne les commandes suivantes qui permettent de tracer un cercle de centre (a,b) et de rayon r.

nbpoints =100
t=np. linspace (0 ,2* [Link] , nbpoints )
x=a+r*[Link](t)
y=b+r*[Link](t)
[Link] (x, y, color =’r’)
[Link] (’equal ’)
[Link] ()

Ecrire une fonction récursive CERFRACT qui prend comme paramètres, les affixes d’un point O dans le plan, r un réel, et n un entier
(nombre d’itération).
Cette fonction doit permettre de tracer un premier cercle de centre O et de rayon r puis deux copies de celui-ci. Ces copies ont subi une
contraction de facteur 2 et sont tangentes extérieurement à "droite" et en " haut" par rapport au premier cercle. Ces deux petits cercles
servent à leur tour de "cercle initial" pour poursuivre les n itération de la fonction.
En appliquant cette fonction pour n=5 on obtient la figure suivante :

Classe : 1ère Année MP, PC, PT Page 5


IPEI EL MANAR Module VII : Simulation numérique en Python(partie1) Année universitaire :

Exercice3:
On souhaite relier N villes (numéroté de 0 à N-1) par un réseau routier de façon qu’il soit possible d’aller de n’importe quelle ville à une
autre.
Le but est de construire un réseau routier à coût minimal. Le coût est défini comme étant la somme des longueurs des routes construites.
Les distances entres les différentes villes sont stockées dans un tableau D à deux dimension de taille N x N.
D [i,j]=d signifie que d est la distance entre les villes i et j.
Le réseau sera représenté par une liste R telque R[k] = [i,j] signifie qu’une route est à construire entre la ville i et la ville j.
La méthode utilisée pour déterminer la liste de routes à construire R est la suivante:
• Relier en premier lieu les deux villes p et q les plus proches entre toutes les villes.
• Relier le reste des villes une à une, de façon à relier à chaque fois une nouvelle ville v tels que :
- v est une ville non encore liée au réseau,
- v est la ville la plus proche à l’une des villes liées.
Travail demandé :
1. Ecrire une fonction python Distances qui permet de saisir le tableau D des distances entres toutes les villes en faisant les
contrôles nécessaires
2. Ecrire une fonction python Routes qui permet de retourner la liste des routes R à construire à partir du tableau D.
NB : utiliser une liste B de booléens de taille N. B[i] = True signifie que la ville i est déjà liée au réseau.
Exemple : [[1,2,165], [1,3,105], [1,4,175],[2,3,160],[2,4,95],[3,4,100] ]
0 165 105 175
pour N=4 et D= !
165 0 160 95 (
105 160 0 100
175 95 100 0
R=[[2,4],[3,4],[1,3]]

Classe : 1ère Année MP, PC, PT Page 6

Vous aimerez peut-être aussi