20
COURS PROGRAMMATION EN MATLAB Nejla Hariga épouse Tlatli Mastère HAAR/INAT

Cours programmation en matlab2 (1)

Embed Size (px)

Citation preview

Page 1: Cours programmation en matlab2 (1)

COURS PROGRAMMATION EN MATLAB

Nejla Hariga épouse Tlatli Mastère HAAR/INAT

Page 2: Cours programmation en matlab2 (1)

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

Page 3: Cours programmation en matlab2 (1)

N. TLATLI/INAT Programmation numérique Page 3

I : INTRODUCTION A LA RESOLUTION DES SYSTEMES LINEA IRES 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 Hdansf

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.

Page 4: Cours programmation en matlab2 (1)

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).

x i0

Y j

xM+1 = a

Y N+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

2i i i i

pt 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 tt p

pθ+φ − φ

φ + c’est une approximation centrée avant

Nous pouvons aussi écrire :

' 21( ) ( )( ) ( )i i

i

t tt p

pθ−φ − φ

φ + c’est une approximation centrée arrière

Ou bien :

' 21 1( ) ( )( ) ( )

2i i

i

t tt p

pθ+ −φ − φ

φ + c’est une approximation centrée

Page 5: Cours programmation en matlab2 (1)

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 :

' 11/ 2

' 1 ''1/ 2 1 1

'' ' '1/ 2 1/ 2

1/ 2 1/ 2

( ) ( )( )

( ) ( ) 1 1 1( ) ( ) ( ) ( )) ( ) ( ))

1( ) ( ) ( )

i ii

i ii i i i i i

i i ii i

t tt

p

t tt t t t t t

p p p p

t t tt t

++

−− + −

+ −+ −

φ − φ φ

φ − φ φ ⇒ φ (φ − φ − (φ − φ

φ φ − φ −

d’où :

[ ]'' 21 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 jx 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 12 H 2 H 1 i M et 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

fx 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 :

Page 6: Cours programmation en matlab2 (1)

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 Iy

A

β αα β α

α β α

α β

− +−= =

=

avec IM la matrice identité de dimension M et 2 2 2

1 2 2et

( ) ( ) ( )x x yα β−= = +

∆ ∆ ∆

Dans le cas d’un maillage uniforme tel que ∆x=∆y=p alors :

Page 7: Cours programmation en matlab2 (1)

N. TLATLI/INAT Programmation numérique Page 7

, 2

4 1 0 ... 0

1 4 1 ... 01

0 1 4 1 0

... .... ...

1 4

k kAp

− − − = − − −

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 1H H et H H

( ) ( ) ( ) ( )

1 1H et H 2 1

( ) ( )

1 1 1 1H H et H H

( ) ( ) ( ) ( )

1 1H et H 2 1

( ) ( )

N

i i N

M M N

j M j

g gx y x y

g g i My y

g gx y x y

g g j Nx x

= + = +∆ ∆ ∆ ∆

= = ∀ ≤ ≤ −∆ ∆

= + = +∆ ∆ ∆ ∆

= = ∀ ≤ ≤ −∆ ∆

, 0 pour tous les 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=LL T. Il est à noter qu’il existe plusieurs algorithmes pour la méthode de Cholesky, nous présenterons deux d’entre-elles.

Page 8: Cours programmation en matlab2 (1)

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 nL

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 kL 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 nL

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 jL 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

Page 9: Cours programmation en matlab2 (1)

N. TLATLI/INAT Programmation numérique Page 9

Alors il existe un unique couple (Q,R) : Q ∈ ℜnxm et R ∈ ℜmxm avec QTQ = Im et R est triangulaire supérieure à diagonale positive

telle que A = Q.R Algorithme de Gram-Schmidt Classique:

1 1 1

1 11 1

,

1

,1

,

,

¨

1

1 :

1 : 1

1

Tj i j i

i

i i j i jj

i i i

i ii i

r a

q ar

d o i m

d o j i

r q a

e n d d o

w a r q

r w

q wr

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 ii i

Ti j i j

j j i j i

i

i i j i jj

d o i m

r a

q ar

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.

Page 10: Cours programmation en matlab2 (1)

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

11

1

1

11 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).

Page 11: Cours programmation en matlab2 (1)

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 Tk k

k k k k

k k k k

k

kk

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

Page 12: Cours programmation en matlab2 (1)

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 :

Page 13: Cours programmation en matlab2 (1)

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 A\B : inv(A)*B A/B : A*inv(B) eye( diag

Page 14: Cours programmation en matlab2 (1)

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’,’x 2’,…,’x n’)

Dans le tableau suivant, nous présentons quelques commandes de contrôle valables dans les fonctions :

Page 15: Cours programmation en matlab2 (1)

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.

Page 16: Cours programmation en matlab2 (1)

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

i nstructions

− −− −− −

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.

c o n d i t io n v ra ie

i n s tru c t io n s

− − − − − −

w h i le

e n d

On peut imbriquer les boucles les unes dans les autres et les interrompre par la commande break.

Page 17: Cours programmation en matlab2 (1)

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)

i nstructions

− −− −− −

if

end

ou bien

(expression logique)

traitement

traitement

− −− −− −

− −− −− −

if

1

else

2

end

Page 18: Cours programmation en matlab2 (1)

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 :

Page 19: Cours programmation en matlab2 (1)

N. TLATLI/INAT Programmation numérique Page 19

VI : LECTURE ET ECRITURE AU CLAVIER ET DANS UN FICH IER 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

Page 20: Cours programmation en matlab2 (1)

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.