2. N. TLATLI/INAT Programmation numérique Page 2
COURS PROGRAMMATION EN MATLAB
Plan :
I- Introduction à la résolution des systèmes linéaires Ax=b
a. Cas de l’écoulement souterrain
b. Formulation discrète
c. Méthodes de résolution directes
d. Méthodes de résolution itératives
II- Prise en main de MatLab
III- Les fonctions sous MatLab
IV- Les boucles
V- Les tests
VI- Lecture et écriture au clavier et dans un fichier
VII- Représentation graphique sous Matlab
VIII- Programmation de quelquesalgorithmes
3. N. TLATLI/INAT Programmation numérique Page 3
I : INTRODUCTION A LA RESOLUTION DES SYSTEMES LINEAIRES
1- Cas de l’écoulement souterrain (problème continu):
L’écoulement d’un fluide incompressible dans un milieu poreux saturé (Ω) est régi par
l’équation aux dérivées partielles suivante :
H
.( H) dansSS K Q
t
∂
= ∇ ∇ + Ω
∂
(1)
Avec H : la charge hydraulique
K : la conductivité hydraulique
Ss : l’emmagasinement spécifique
Q : le terme source
∇: l’opérateur nabla
Il est à noter que cette équation est déduite de l’équation de la conservation de la masse à
laquelle on a ajouté la loi de comportement de Darcy. Cette loi exprime le fait que la vitesse
d’écoulement laminaire du fluide est proportionnelle au gradient de la charge hydraulique :
Hq u K= = − ∇ (2)
Si on se met dans le cas bi-dimentionnel, stationnaire, d’un aquifère homogène et isotrope
d’épaisseur e alors l’équation (1) s’écrit :
2 2
2 2
H H
( ) dansT Q
x y
∂ ∂
+ = − Ω
∂ ∂
(3)
où T=K*e la transmissivité hydraulique.
Pour résoudre l’équation aux dérivée partielle (EDP) (3) on a besoin de la compléter par des
conditions aux limites (CL) sur la : frontière du domaine. On distingue trois types de CL :
- condition de Dirichlet : H=H0
- condition de Neumann : -T.∇H.n = u0
- condition mixte : : -T.∇H.n = α(H-H0) + u0 (α = 0 condition de Neumann, α tend vers
∝ condition Dirichlet)
Considérons par exemple le problème de Dirichlet suivant :
2 2
2 2
H H
dansf
x y
H g sur
∂ ∂
+ = Ω
∂ ∂
= ∂Ω = Γ
(4)
Les cas où on peut exprimer H solution de (4) par une formule intégrale explicite faisant
intervenir les seconds membres f et g, sont assez rares et se limitent à des domaines Ω de
forme très simple. Dans les autres cas on doit chercher une approximation de H en passant
au problème discret. C’est à dire au lieu de chercher la solution H en tout point du domaine Ω,
on la cherche en un nombre fini de points. Ce passage du problème continu au problème
discret s’appelle la discrétisation.
Il existe plusieurs méthodes de discrétisation : la méthode des différences finies, la méthode
des éléments finis, la méthode des volumes finis …
Dans ce qui suit on va utiliser la méthode des différences finies et considérer un domaine Ω
rectangulaire.
4. N. TLATLI/INAT Programmation numérique Page 4
2- Formulation discrète :
On prend comme domaine Ω le rectangle [0,a]x[0,b] sur lequel on définit un
quadrillage en découpant [0,a] en M points intermédiaires tel que 0=x0<x1<x2<….<xM+1=a et
[0,b] en N points intermédiaires tel que 0=y0<y1<y2<….<yN+1=b. On adoptera un découpage à
pas constant soit : ∆x = a/(M+1) et ∆y = b/(N+1)
Donc xi=i. ∆x et yj=j. ∆y avec i compris entre 0 et (M+1) et j entre 0 et (N+1).
xi0
Yj
xM+1 = a
YN+1 =b
Figure 1 : Maillage
Les points Pij du maillage ont pour coordonnées (xi,yj) et on cherche la solution H du
système (4) en ces points. Pour cela il faut re-écrire le système (4) aux points Pij.
La méthode des différences finies consiste à approcher les dérivées d’une fonction par des
combinaisons des valeurs de cette fonction aux points Pij du maillage :
Soit φ(t) une fonction continue de t qui prend les valeurs φi-1, φi et φi+1 aux points ti-1, ti et ti+1
équidistants et espacés de p= ti-1 - ti, alors d’après la formule de Taylor nous pouvons écrire :
] ]
2
' ''
1( ) ( ) ( ) ( ) avec 0,1
2
i i i i
p
t t p t t pθ θ+φ = φ + φ + φ + ∈
Donc en supposant p assez petit et ''
φ pas trop grand nous pouvons approcher '
φ (ti) par :
' 21( ) ( )
( ) ( )i i
i
t t
t p
p
θ+φ − φ
φ + c’est une approximation centrée avant
Nous pouvons aussi écrire :
' 21( ) ( )
( ) ( )i i
i
t t
t p
p
θ−φ − φ
φ + c’est une approximation centrée arrière
Ou bien :
' 21 1( ) ( )
( ) ( )
2
i i
i
t t
t p
p
θ+ −φ − φ
φ + c’est une approximation centrée
5. N. TLATLI/INAT Programmation numérique Page 5
Maintenant pour approcher la dérivée seconde de φ aux points ti, nous utilisons des
approximations de φ’ aux points ti+1/2 = (ti+1 - ti)/2 et ti-1/2 = (ti - ti-1)/2 et nous obtenons
successivement les formules de Taylor suivantes :
' 1
1/ 2
' 1 ''
1/ 2 1 1
'' ' '
1/ 2 1/ 2
1/ 2 1/ 2
( ) ( )
( )
( ) ( ) 1 1 1
( ) ( ) ( ) ( )) ( ) ( ))
1
( ) ( ) ( )
i i
i
i i
i i i i i i
i i i
i i
t t
t
p
t t
t t t t t t
p p p p
t t t
t t
+
+
−
− + −
+ −
+ −
φ − φ
φ
φ − φ
φ ⇒ φ (φ − φ − (φ − φ
φ φ − φ −
d’où :
[ ]'' 2
1 12
1
( ) ( ) 2 ( ) ( ) ( )i i i it t t t p
p
θ+ −φ φ − φ + φ +
Appliquons maintenant cette formule afin d’approximer la première équation du système (4)
aux points Pij à l’intérieur du rectangle :
2 2
1, 1, , 1 , 12 2 2 2
H H 1 1
( H) ( ) 2 H 2 Hij ij i j ij i j i j ij i j
x y x y
+ − + −
∂ ∂
∆ = + Η − Η + + Η − Η + ∂ ∂ ∆ ∆
Cette formule porte le nom de schéma à 5 points car ( H)ij∆ s’exprime en fonction de la
valeur de H en 5 points : Pi+1j Pi-1j Pij Pij-1 Pij+1
Donc le système discret (4) s’écrit:
1, 1, , 1 , 12 2
1 1
2 H 2 H 1 i Met 1 j N
¨ pour (i = 0 ou M +1)et (j = 0ou N +1)
i j ij i j i j ij i j ij
ij ij
f
x y
H g
+ − + −
−
Η − Η + − Η − Η + = ∀ ∆ ∆
=
≤ ≤ ≤ ≤
(5)
En conclusion, il s’agit de résoudre un système linéaire de MxN équations à MxN
inconnues.
Pour écrire ce système d’équations sous forme matricielle, nous devons ranger les inconnues
Hij à l’intérieur du domaine Ω dans un vecteur H de longueur MxN, pour cela il faut
numéroter les points Pij.
Il existe plusieurs manières de numéroter, par exemple nous pouvons numéroter les points par
ordre de j croissant et pour chaque j par ordre de i croissant, ce qui donne :
6. N. TLATLI/INAT Programmation numérique Page 6
Hi,N+1
0 Hi,0
H0,j
b
a
Pij
HM+1,j
Figure 2 : Maillage avec numérotation des points
Ainsi le point Pij aura le numéro : i+(j-1)M
Cette numérotation induit de façon naturelle une décomposition du vecteur H en N blocs de
dimension M, correspondant chacun aux points d’une même ligne du maillage :
H=[(H11,H21,H31,…,HM1), (H12,H22,H32,…,HM2),… (H1N,H2N,H3N,…,HMN)]
à cette décomposition de H correspond une décomposition de la matrice A du système
linéaire, du problème (5), en NxN blocs :
11 12
21 22 23
32 33 34
1
... .... ...
NN NN
A A
A A A
A A A A
A A−
=
Où les blocs Akl sont des matrices de dimension (MxM).
Les Akl non nulles sont définies par :
, 1 , 1 2
,
1
( )
0 ... 0
... 0
0 0
... .... ...
k k k k M
k k
A A I
y
A
β α
α β α
α β α
α β
− +
−
= =
∆
=
avec IM la matrice identité de dimension M et 2 2 2
1 2 2
et
( ) ( ) ( )x x y
α β
−
= = +
∆ ∆ ∆
Dans le cas d’un maillage uniforme tel que ∆x=∆y=p alors :
7. N. TLATLI/INAT Programmation numérique Page 7
, 2
4 1 0 ... 0
1 4 1 ... 0
1
0 1 4 1 0
... .... ...
1 4
k kA
p
−
− −
= − −
−
Quant au vecteur second membre du système linéaire c’est la somme des vecteurs f et g
contenant respectivement les fij aux points internes au domaine voisins des frontières et les gij
intervenant aux points situés sur le bord du domaine.
On a :
1,1 0,1 1,0 1, 0,N 1,N+12 2 2 2
,1 i,0 , i,N+12 2
,1 M+1,1 M,0 , M+1,N M,N+12 2 2 2
1, 0,j , M+1,j2 2
1 1 1 1
H H et H H
( ) ( ) ( ) ( )
1 1
H et H 2 1
( ) ( )
1 1 1 1
H H et H H
( ) ( ) ( ) ( )
1 1
H et H 2 1
( ) ( )
N
i i N
M M N
j M j
g g
x y x y
g g i M
y y
g g
x y x y
g g j N
x x
= + = +
∆ ∆ ∆ ∆
= = ∀ ≤ ≤ −
∆ ∆
= + = +
∆ ∆ ∆ ∆
= = ∀ ≤ ≤ −
∆ ∆
, 0 pour tousles autresi jg =
On aura alors à résoudre AH = F
3- Méthodes de résolution des systèmes linéaires :
On distingue deux classes de méthodes pour résoudre les systèmes matriciels de la
forme Ax=b : les méthodes directes et les méthodes itératives
3-1 Les méthodes directes : Se sont les méthodes qui aboutissent à la solution en un nombre
fini d'opérations. Pour cela elles modifient la structure initiale de la matrice pour la mettre
sous forme de produit de matrices ‘faciles’ à utiliser comme les matrices triangulaires ou
orthogonales. Dans ce qui suit nous présenteront 2 méthodes assez répandues :
a- Factorisation de Cholesky :
Théorème : Soit A une matrice symétrique positive définie positive, alors il existe une unique
matrice L triangulaire inférieure à diagonale réelle positive telle que A=LLT
.
Il est à noter qu’il existe plusieurs algorithmes pour la méthode de Cholesky, nous
présenterons deux d’entre-elles.
8. N. TLATLI/INAT Programmation numérique Page 8
Algorithme du Left-Looking :
(1,1) (1,1)
1
( : 2 : ,1) ( : 2 : ,1)
(1,1)
2 :
( : , ) ( : , )
1: 1
( : , ) ( : , ) ( , )* ( : , )
( , ) ( , )
1
( 1: , ) ( 1: , )
( , )
L A
L i n A i n
L
do k n
L k n k A k n k
do j k
L k n k L k n k L k j L k n j
enddo
L k k A k k
L k n k L k n k
L k k
enddo
=
=
=
=
= −
= −
=
+ = +
Dans cet algorithme la mise à jour d’une colonne est retardée au plus tard possible. En effet
une colonne de la matrice A n’est considérée que lorsque toutes les précédentes de L ont été
constituées. C’est le Cholesky left-looking.
Algorithme du Right-Looking :
_ inf( )
(1,1) (1,1)
1
( : 2 : ,1) ( : 2 : ,1)
(1,1)
1: 1
1:
( : , ) ( : , ) ( , )* ( : , )
( 1, 1) ( 1, 1)
1
( 2 : , 1) ( 2 : , 1)
( 1, 1)
L Triangle A
L L
L i n L i n
L
do j n
do k j n
L k n k L k n k L k j L k n j
enddo
L j j L j j
L j n j L j n j
L j j
enddo
=
=
=
= −
= +
= −
+ + = + +
+ + = + +
+ +
Dés qu’une colonne de L est prête elle ‘corrige’ toutes les colonnes suivantes.
b- Factorisation QR
Théorème : Soit A ∈ ℜnxm
de plein rang, (les vecteurs colonnes ai de A forment un système
libre de ℜn
), avec n>=m
9. N. TLATLI/INAT Programmation numérique Page 9
Alors il existe un unique couple (Q,R) : Q ∈ ℜnxm
et R ∈ ℜmxm
avec
QT
Q = Im et R est triangulaire supérieure à diagonale positive
telle que A = Q.R
Algorithme de Gram-Schmidt Classique:
1 1 1
1 1
1 1
,
1
,
1
,
,
¨
1
1 :
1 : 1
1
T
j i j i
i
i i j i j
j
i i i
i i
i i
r a
q a
r
d o i m
d o j i
r q a
e n d d o
w a r q
r w
q w
r
e n d d o
−
=
=
=
=
= −
=
= −
=
=
∑
Dans le cas où les vecteurs colonnes ai de A = (a1, a2, … am) sont presque liés ou bien sont de
normes très proches, le comportement numérique de l’algorithme de Gram-Schmidt classique
est très mauvais. On adopte alors l’algorithme de Gram-Schmidt modifié :
Algorithme de Gram-Schmidt Modifié:
,
,
,
,
1
,
1
1 :
1
1 :
i i i
i i
i i
T
i j i j
j j i j i
i
i i j i j
j
d o i m
r a
q a
r
d o j i m
r q a
a a r q
e n d d o
w a r q
e n d d o
−
=
=
=
=
= +
=
= −
= −
∑
Dans cet algorithme, dés qu’un vecteur qi vient d’être calculé n retire aux aj suivants (j>i) sa
contribution.
10. N. TLATLI/INAT Programmation numérique Page 10
3-2 Les méthodes itératives : Une méthode itérative engendre une suite de vecteurs qui doit
tendre vers la solution.
On définit :
x la solution recherchée du système Ax=b
r=b-Ax le résidus associé à x
e=x-x l’erreur associée à x
r=b-Ax = Ax-Ax = A(x-x) = Ae
a- Les méthodes itératives linéaires : Ces méthodes sont basées sur une décomposition de
la matrice A de la forme :
A=M-N avec M une matrice inversible
Nous cherchons alors une suite (xk) qui converge vers x solution de Ax=b.
L’itération définie à partir de x0 est :
1
1
1
1
1
1
1
1
1 1
( )
inversible
d'autrepart
( )
( ) ( )
k k
k k k k
k k k
k k k
k k k
k
k k
k k k k
x x b
x x b x b x
x x r
x x r
x x b x x
x x
x x x x
e e e e
+
+
+
−
+
+
+
−
+ +
= + ⇒
= + = + − ⇒
= + ⇒
= +
= + = +
= + − ⇒
− = − ⇒
= ⇒ =
M N
M M - A M A
M M M
M
M N N A
N M N
M N
M N M N
Notons par D la matrice contenant la diagonale de A et des zéros ailleurs, U la matrice
triangulaire supérieure formée par les termes de A situés au-dessus de la diagonale et L la
matrice triangulaire inférieure formée par les termes de A situés au-dessous de la diagonale.
Alors soient les différentes méthodes itératives linéaires suivantes :
Méthode de Jacobi : M=D et N=-(L+U)
Méthode de Gauss-Seidel : M=D+L et N=-U
Dans les méthodes de Jacobi et de Gauss-Seidel, le passage d’un vecteur xk de la suite au
suivant se fait en corrigeant successivement une composante de ce vecteur. Ces corrections
s’effectuent en annulant une composante du résidu.
b- Les méthodes du gradient :
Se sont des méthodes de descente dont le principe est de déterminer un vecteur pk et un
scalaire αk tels que : xk+1 = xk + pk αk
avec l’objectif de minimiser une fonctionnelle.
Dans le cas de la méthode du Gradient Conjugué, il faut que la matrice A soit
symétrique, définie positive. Dans ce cas, la solution x est celle qui réalise le minimum de la
fonctionnelle J définie par : J (x)=(Ax/x) -2(b/x)
En effet J est quadratique, définie positive, elle admet donc un unique minimum obtenu en
annulant son gradient ∇J.
Or ∇J = 2(Ax-b) = -2r(x) = 2(b-Ax) = 2(A(x-x).
11. N. TLATLI/INAT Programmation numérique Page 11
Algorithme du Gradient Conjugué :
0
0 0
0 0
2
1
1
1 2
2
1 1
* :
* :
0 '
k
k T
k k
k k k k
k k k k
k
k
k
k k k k
Initialisation
Choisir x
Calculer r b x
poser p r
Itérations
k jusqu àconvergence do
r
p p
x x p
r r p
r
r
p r p
enddo
α
α
α
β
β
+
+
+
+ +
= −
=
=
=
= +
= −
=
= −
A
A
A
12. N. TLATLI/INAT Programmation numérique Page 12
II : PRISE EN MAIN DE MATLAB
1-Introduction :
MatLab est un logiciel de calcul interactif. Il permet de réaliser des simulations
numériques basées sur des algorithmes d’analyse numérique. Il peut être utilisé pour la
résolution d’équations différentielles, d’équations aux dérivées partielles, de systèmes
linéaires …
MatLab pour ‘Matrix Laboratory’ est un logiciel conçu pour fournir un environnement de
calcul numérique de haut niveau. Il est particulièrement performant pour le calcul matriciel
car sa structure de données interne est basée sur les matrices. Il dispose également de grandes
capacités graphiques.
Son fonctionnement repose sur un langage de programmation interprété qui permet un
développement très rapide. Pour des applications nécessitant un temps de calcul élevé, un
langage compilé tel que C++ ou Fortran est mieux adapté.
L’interface MatLab se compose d’une fenêtre principale divisée en 3 sous-fenêtres :
a- En haut à gauche : il y’a une fenêtre contenant 2 onglets : Launch Pad et workspace.
L’onglet Launch Pad est visible par défaut, il s’agit d’une interface pour obtenir des
informations et des démonstrations sur les composantes de MatLab. Le Workspace
permet de gérer les variables misent en jeux par l’utilisateur.
b- En bas à gauche : il y’a une fenêtre contenant 2 onglets : Command History et Current
Directory. L’onglet Command History est visible par défaut, il indique les dernières
commandes effectuées par l’utilisateur. Le Current Directory gère l’emplacement des
fichiers.
c- Sur la droite il y’a une grande fenêtre Command Window qui est la fenêtre d’interface
avec MatLab.
La principale caractéristique de la fenêtre de commande sont les caractères >> en début de
ligne constituant le prompt de MatLab. C’est après ces caractères que l’utilisateur peut taper
les commandes qui seront exécutées par le logiciel après avoir tapé sur la touche entrer.
Le résultat de l’exécution s’inscrit alors dans la fenêtre ou bien est représenté graphiquement
dans une nouvelle fenêtre spécifique.
Pour entrer une suite complexe d’instructions, on les tape au préalable dans un fichier en
utilisant l’éditeur intégré. Ce fichier est appelé Script. Une fois le script enregistré on peut
l’exécuter en tapant son nom dans la fenêtre de commande.
Il est à noter que le historique des instructions entrées depuis le début de la session sur la ligne
de commande est accessible par la touche ↑.
Si nous voulons que MatLab ignore complètement ce que nous tapons cad ne l’exécute pas et
ne l’affiche pas, il faut le faire précéder par le caractère %. Ceci est utile pour commenter les
scripts.
Utilisation de l’aide en ligne : L’apprentissage du bon maniement de l’aide du logiciel
est indispensable. Etant le grand nombre d’instructions utilisables, il est hors de question de
mémoriser chacune d’elles avec la syntaxe correspondante. L’aide en ligne permet de
retrouver toutes les informations utiles, elle est activée en allant dans le menu Help →
MatLab.
Une nouvelle fenêtre partagée en 2 s’ouvre : à droite est affichée l’aide demandée, sur la
gauche les différentes manières de faire la demande d’aide :
13. N. TLATLI/INAT Programmation numérique Page 13
- Contents : la table de matière de l’aide. En cliquant sur un chapitre de l’arborescence,
son contenu est affiché dans la fenêtre de droite.
- Index : L’indexe de l’aide en ligne, qui répertorie toutes les commandes MatLab et
permet d’accéder à leur mode d’emploi spécifique.
- Search : un moteur de recherche dans lequel on peut taper le nom de la commande si
on la connait
- Favorites : donne la liste des chapitres stockés dans les favoris. Pour ajouter un
chapitre dans cette liste, il faut se positionner dessus à partir de contents et cliquer sur
le bouton de droite de la souris
Une aide importante se présente sous la forme de programmes de démonstration, auxquels on
peut y accéder à partir de Contents → Begin, puis en cliquant sur demos dans la sous-fenêtre
de droite ou bien en tapant demos directement dans la fenêtre de commande.
2- Types de données :
Plusieurs types de données sont disponibles dans MatLab. Les types traditionnels que
l’on retrouve dans tous les langages de programmation : les types numériques (single, double,
…), caractère char, les tableaux de réels, les types composés : cell, structure, ainsi que les
types définis par l’utilisateur comme les fonctions inline.
Cependant le type privilégié de MatLab est celui des tableaux à une ou deux dimensions qui
correspondent aux vecteurs et aux matrices.
a- Vecteurs : Pour définir un vecteur, la syntaxe est l’une des suivantes :
>> v=[2 ;3 ;4] ou bien [2 ↵↵↵↵ 3 ↵↵↵↵ 4] %vecteur colonne
>> v=[2 ,3 ,4] ou bien [2 3 4] %vecteur ligne
Les opérations possibles entre les vecteurs sont celles classiques :+, -. En plus dans
MatLab existe les ‘point opérations’ qui se font terme par terme : .+, .-, .*, ./, .^
Un message d’erreur est affiché si une opération impossible est tentée, comme
l’addition de 2 vecteurs de taille différente.
Pour aller vite on peut définir un vecteur par :
v= début :pas :fin.
v=linspace(10
v=ones(1,taille de v) % vecteur contenant des 1
v=zeros(1,taille de v) % vecteur contenant des 0
b- Matrices : Les matrices suivent la même syntaxe que les vecteurs à savoir les
composants des lignes séparées par des virgules ou des blancs et chaque colonne est
séparée de l’autre par un point-virgule ou un retour en ligne.
size(A) = [nb de lignes, nb de colonnes]
det(A) : déterminant de A
inv(A) : inverse de A
AB : inv(A)*B
A/B : A*inv(B)
eye(
diag
14. N. TLATLI/INAT Programmation numérique Page 14
III : LES FONCTIONS DEFINIES PAR L’UTILISATEUR
Les fonctions sont des enchaînements de commandes MatLab regroupées sous un nom
permettant de commander leur exécution.
On peut mettre dans une fonction un groupe de commandes destiné à être exécuté plusieurs
fois au cours du calcul avec éventuellement des valeurs de paramètres différents.
La fonction peut être aussi chargée de réaliser un calcul avec un certain algorithme qui
pourrait être éventuellement remplacé par un autre plus rapide ou plus précis, en changeant
simplement le nom de la fonction dans le programme appelant.
Enfin dés que le programme principal est long et compliqué, il est souhaitable de le découper
en fonctions correspondant à des étapes différentes, et ce afin d’améliorer la lisibilité et la
compréhension du programme.
a- M-files function : Dés que la fonction nécessite plusieurs instructions, il vaut mieux la
définir dans un fichier à part à l’aide de l’éditeur de texte de MatLab. De manière
générale la syntaxe de définition d’une fonction externe est :
function [y1,y2,…,ym] = nom_de_la_fonction(x1,x2,…,xn)
Le passage des arguments d’entrée, (x1,x2,…,xn), de la fonction se fait par valeur, donc
même si ces paramètres sont changés dans la fonction leur valeur ne sera pas changée
dans le programme appelant.
Si une des variables de la procédure n’est pas définie à l’intérieur de celle-ci elle doit
obligatoirement être fournie en argument d’entrée.
La récupération des valeurs calculées par la fonction se fait par les paramètres de
sortie yi.
Le nom du fichier contenant la fonction doit être le même que celui de la fonction.
On peut mettre plusieurs fonctions dans un même M-file, mais seule la fonction
portant le même nom que le fichier peut être appelée à partir de la fenêtre de
commande ou par une autre fonction ou par un autre script. Les autres fonctions
éventuellement stockées dans le fichier peuvent s’appeler entre elles mais ne sont pas
visibles de l’extérieur.
b- Fonctions inline : Une fonction ne comportant qu’un petit nombre d’instructions peut
être définie directement dans la fenêtre de commande de la manière suivante :
nom_de_la_fonction = inline(‘instruction MatLab’)
Les arguments d’appel de la fonction sont généralement fournis à l’appel dans l’ordre
d’apparition dans la définition de la fonction.
Comme on peut spécifier ces arguments explicitement dans la définition de la
fonction :
nom_de_la_fonction = inline(‘instruction MatLab’, ‘x1’,’x2’,…,’xn’)
Dans le tableau suivant, nous présentons quelques commandes de contrôle valables dans les
fonctions :
15. N. TLATLI/INAT Programmation numérique Page 15
INSTRUCTION DESCRIPTION
nargin Nombre d’arguments d’entrée d’une fonction
nargout Nombre d’arguments de sortie d’une fonction
error Interrompt l’exécution d’une fonction, affiche un message
d’erreur et retourne dans le programme appelant
warning Affiche un message d’avertissement mais ne retourne pas
dans le programme appelant
pause Interrompt l’exécution jusqu’à ce que l’utilisateur tape sur ↵
Pause(n) Interrompt l’exécution pendant n secondes
Pause off Indique que les pauses rencontrés doivent être ignorées, ce
qui permet de faire tourner des script requérant normalement
l’intervention de l’utilisateur.
break Sort d’une boucle ou arrête l’exécution du programme
return Retourne dans le programme appelant sans aller à la fin de
la fonction.
16. N. TLATLI/INAT Programmation numérique Page 16
IV : LES BOUCLES
On distingue deux manières d’écrire une boucle sous MatLab :
a- Les boucles while
b- Les boucles for
La boucle for parcourt un vecteur d’indices et effectue à chaque pas toutes les instructions
délimitées par for et end :
compteur= début:pas:fin
instructions
− −
− −
− −
for
end
La boucle for peut parcourir un vecteur (ou une matrice) en prenant comme valeur à chaque
pas les éléments (ou les colonnes) successifs.
Les bornes ne sont pas nécessairement des entiers et le pas peut être négatif.
La boucle while effectue aussi une suite de commandes mais jusqu’à ce qu’une condition
n’est plus satisfaite.
co n d itio n vraie
i n stru ctio n s
− −
− −
− −
w h ile
en d
On peut imbriquer les boucles les unes dans les autres et les interrompre par la commande
break.
17. N. TLATLI/INAT Programmation numérique Page 17
V : LES TESTS IF
Un test est une alternative entre deux commandes MatLab, ou groupes de commandes,
sélectionnées selon le résultat d’un opérateur logique.
Sachant que les résultats d’une opération logique est une variable logique ou booléenne qui
vaut 1 ou Vrai et 0 ou Faux.
Le tableau ci-dessous liste les différents opérateurs logiques :
Expression
Française
Expression
MatLab
et &
ou |
non ~
égale ==
différent ~=
+ petit que <
+ grand que >
+ petit ou égal que <=
+ grand ou égal que >=
MatLab dispose du classique if … else, agrémenté du elseif. La syntaxe étant la
suivante :
(expression logique)
instructions
− −
− −
− −
if
end
ou bien
(expression logique)
traitement
traitement
− −
− −
− −
− −
− −
− −
if
1
else
2
end
18. N. TLATLI/INAT Programmation numérique Page 18
(expression logique )
traitement
(expression logique )
traitement
(expression logique )
traitement
...
(expression logique( ))
traitement
− −
− −
− −
− −
− −
− −
− −
− −
− −
− −
− −
− −
if 1
1
elseif 2
2
elseif 3
3
elseif n -1
(n -1)
e (expression logique( ))
traitement
− −
− −
− −
lse n
(n)
end
On a aussi la possibilité d’utiliser la commande switch … case, qui prend la syntaxe
suivante :
19. N. TLATLI/INAT Programmation numérique Page 19
VI : LECTURE ET ECRITURE AU CLAVIER ET DANS UN FICHIER
Durant un traitement numérique, on peut avoir à lire des données alphanumériques à
partir d’un fichier, comme on peut vouloir sauvegarder le résultat d’un calcul pour s’en servir
ultérieurement. Pour cela on utilisera les commandes suivantes :
dlmread(‘nom_fichier’,’délimiteur’) : lit les données numériques du fichier nom_fichier,
chaque nombre étant séparé du suivant par le caractère délimiteur ou par un retour à la ligne.
Sachant que la virgule et l’espace sont les délimiteurs par défaut.
dlmwrite(‘nom_fichier’,M,’délimiteur’) : écrit M dans le fichier nom_fichier.
textread(’nom_fichier’,’format’) : lit les variables avec le format spécifié, jusqu’à épuisement
du fichier. Il est à noter que le nombre de variables à lire et le nombre de données dans le
fichier doivent correspondre.
Un format est une chaîne de caractères spécifiant en lecture :e type de données à lire. Nous
distinguons :
‘%d’ type entier
‘%f’ type réel
‘%c’ type caractère
fid=open(‘nom_fichier’) : ouvre le fichier nom_fichier
[A,count] = fscanf(fid,format,size) : lit le fichier ouvert par open avec le format spécifié. On
peut éventuellement spécifier le nombre maximal des données à lire avec le paramètre size et
le paramètre de sortie count renvoie le nombre de données effectivement lues.
fprintf(‘format’, données) : sert à afficher des données à l’écran avec un format spécifié.
Exemple : fprintf(‘a=%f et b=%d’, a, b) résultat : a=1.5 et b=1
Le tableau suivant récapitule ces différentes commandes :
dlmread(‘nom’,’delimiteur’ Lecture du fichier nom
dlmwrite(‘nom’,M,’delimiteur’) Ecriture de M à partir du fichier M
textread(‘nom’,’format’) Lecture du fichier nom
fid=open(‘nom’) Ouvre le fichier nom
[A,count]=fscanf(fid,’format’) Lecture du fichier ouvert par open
fprint(fid,’format’,données) Ecriture des données dans le fichier ouvert par open
fprintf(‘format’,données) Ecriture à l’écran
20. N. TLATLI/INAT Programmation numérique Page 20
VII : REPRESENTATION GRAPHIQUE SOUS MATLAB
Dans toutes les représentations graphiques, MatLab se base sur des données discrètes
rangées dans des matrices ou des vecteu rs colonnes. Par exemple, pour tracer la courbe
y=f(x) ou la surface 2D z=f(x,y), les données doivent être des vecteurs pour x et y, ou des
matrices pour z, aux dimensions compatibles.
On utilise alors l’instruction de dessin correspondante : plot(x,y) qu’on complète par des
arguments optionnels tels que la couleur, le type de trait, l’échelle des axes, la légende …
La visualisation du résultat s’effectue alors dans une fenêtre graphique avec possibilité de
zoom, de rotation, de modifications, d’impression, …
Les principales commandes concernant les graphiques d’une manière générale, sont :
figure, subplot, hold on, xlabel, grid on, title, …
Pour plus d’informations, il faut consulter le help.
1- Graphique 2D :
Les principales fonctions pour les graphiques 2D sont :
plot, plotyy, loglog, semilogx, semilogy, …
Pour plus d’informations, il faut consulter le help.
Exercice : Cherchez dans l’aide de Matlab les commandes permettant de :
- Sauvegarder des figures,
- Ajouter une légende à une figure,
- Modifier la police dans une figure,
- Modifier les longueurs des axes et ajouter des labels à ces axes.
Exercice : Représentez graphiquement la fonction f définie par : f(x)=cos2
(x) x ᴄ [0,5]
- Pour tracer, on utilisera 6 points, puis 26 point et enfin 301 points équidistants dans
l’intervalle [0,5}
- Représentez sur une même figure les fonctions : f(x)=cos2
(x), g(x)=cos(2x) et
h(x)=cox(x2
) pour x ᴄ [0,5]
Pour cela on utilisera des symboles différents et on mettra une légende
Exercice : Plusieurs sous-figures sur une même figure :
- Déclarer les vecteurs : X = [0, π/10,2π/10,3π/10 ,.., 2π], Y1 = sin(X) et Y2=cos(X)
- Utiliser la commande subplot(2,1,1) et subplot(2,1,2) pour tracer sur une même figure
les sous-figures représentant Y1(X) et Y2(X) l’une au-dessous de l’autre.
2- Courbes en coordonnées polaires :
Les courbes en coordonnées polaires sont obtenues par la commande polar.
Exercice : Tracer la courbe r=2+2cos(θ) θ ᴄ [π,π]
3- Histogrammes et diagrammes :
Les histogrammes sont obtenus par la commande hist.
Exercice : Tester les commandes bar, stairs, stem
4- Graphique 3D :
Les principales fonctions pour les graphiques 3D sont :
plot3, mesh, meshgrid, surf, surfc, ezmesh, ezmeshc, ezsurf, ezsurfc, sphere, cylinder,..
Pour plus d’informations, il faut consulter le help.