Vous êtes sur la page 1sur 15

Tutoriel MATLAB

Introduction aux mthodes numriques et projet

Premier bachelier en sciences de l'ingnieur


Anne acadmique 2009-2010

1 Dbuter une session MATLAB


 Depuis les salles de laboratoire : introduire votre login et votre password, ouvrir un
terminal via le menu, puis introduire la commande  MATLAB.
Pour quitter : terminer la session MATLAB en allant dans le menu <File> en haut
gauche et en cliquant sur <Exit MATLAB>, puis fermer la session sur l'ordinateur en
appuyant sur le bouton rouge de la barre en haut de l'cran et en choisissant l'option
log out.
 Depuis Internet : suivre les instructions se trouvant l'adresse

http://www.montefiore.ulg.ac.be/services/ail/cours/algo1/putty.html.
Lors de votre premire connexion, ouvrir un terminal et lancer la commande
 /home/algo/LAM/idstudent. Si vous vous connectez de chez vous, il est conseill de
lancer MATLAB avec la commande  MATLAB

-nojvm.

L'interface de MATLAB est illustre la Fig. 1.

2 Command Window
La fentre de commande permet l'utilisateur d'entrer des commandes, aprs l'invite de
commande  >> . On peut notamment utiliser les oprateurs d'addition  +, de soustraction
 -, de multiplication  *, de division  / et de puissance  ^.

>> 2+2
ans =
4
L'oprateur d'assignation  = permet de dnir des variables. Une variable est un conteneur d'information, sous la forme d'un scalaire ou d'un tableau, contenant des nombres, des
caractres, etc.

>> a = 2+2
a =
4
Pour une dnition silencieuse, l'instruction doit se terminer par  ;

Figure 1  Interface MATLAB


>> b = a-3;
>> b
b =
1
Le caractre  % permet d'ajouter des commentaires qui ne sont pas pris en compte par

l'interprteur de commande. La commande  clc permet de nettoyer la fentre de commande.

>> % ceci est un commentaire


>> clc % la fentre de commande est nettoye
Enn, il est utile de remarquer que la touche  tab permet l'autocompltion des commandes.

3 Aide
L'utilisateur peut d'abord trouver de l'aide localement grce aux commandes  help (dans

la fentre de commande) et  doc (dans le navigateur d'aide de MATLAB).

>> help clc


CLC
Clear command window.
CLC clears the command window and homes the cursor.
See also home.
Reference page in Help browser
doc clc
>> doc clc
2

Figure 2  Command history


Ensuite, toujours localement, MATLAB intgre des dmonstrations qu'il peut tre utile
de consulter.

>> demo
Enn, parmi les ressources disponibles sur Internet, de nombreuses informations sont rassembles sur le site web :

http://www.mathworks.com/products/matlab/

Exercice
1)

Rechercher dans l'aide des informations sur les fonctions  format

long et  format short

et tester leur fonctionnement.

4 Command History
L'historique des commandes (Fig. 2) ore l'utilisateur une vue sur les commandes entres
lors de la session courante et des sessions prcdentes. Il permet ainsi de rvaluer facilement
une commande ou un groupe de commandes. Dans la fentre de commande, il est parcouru
grce aux touches   et  .

5 Workspace
L'espace de travail fournit l'utilisateur des informations sur les variables dnies un
l'instant prsent. Il ore des fonctionnalits pour la gestion des variables (cration, dition,
suppression, etc.).
Ces informations sont galement accessibles par le biais des commandes  who et  whos.

La variable  ans correspond la rponse non-assigne la plus rcente de MATLAB (ici il


s'agit donc du rsultat aprs les commande dcrites la Section 2).

>> who
Your variables are:
a
ans b
>> whos
3

Name
a
ans
b

Size
1x1
1x1
1x1

Bytes Class
8 double
8 double
8 double

Attributes

La commande  clear sert supprimer une variable, voire nettoyer l'ensemble de l'espace

de travail si elle est appele avec le mot-clef  all.

>> clear a
>> who
Your variables are:
ans b
>> clear all
>> who

6 Current Directory et Editor


Le rpertoire courant est le rpertoire o l'utilisateur travaille. Le contenu de ce rpertoire
est ach et des fonctionnalits pour la gestion de son contenu sont fournies.
L'achage du contenu du rpertoire courant est obtenu dans la fentre de commande
l'aide de la commande  dir. Pour l'instant ce rpertoire est vide, l'exception de  . qui est
le rpertoire courant et de  .. qui est le rpertoire parent du rpertoire courant.

>> dir
. ..
On cre un chier  hello.m l'aide de la commande  edit.

>> edit hello


L'diteur s'ouvre et on peut y dnir les commandes

% Script affichant 'Hello World!'


text = 'Hello World!';
disp(text);
On sauve le chier et on retourne dans la fentre de commande. La commande  what ache
les chiers spciques MATLAB du rpertoire courant.

>> dir
.

..

hello.m

>> what
M-files in the current directory /home/sburton/matlab
hello
Les chiers MATLAB du rpertoire courant peuvent tre appels directement depuis la
ligne de commande. L'excution du chier  hello.m se fait en entrant son nom, sans l'ex-

tension  .m dans la fentre de commande. Les commandes enregistres dans le chier sont
alors excutes, c'est dire l'assignation du texte  Hello
achage.

World!

la variable  text et son

>> hello
Hello World!
On constate donc

>> who
Your variables are:
text
>> text
text =
Hello World!
Enn, l'appel

help hello

renvoie le premier bloc de commentaires du chier.

>> help hello


Script affichant 'Hello World!'

7 Fonctions
Le chier  hello.m est un script, c'est--dire un ensemble de commandes excut dans
l'environnement de travail. Par contre, une fonction est un ensemble de commandes excut
dans un sous-environnement qui n'existe que pendant l'excution de la fonction.
On cre un chier  byebye.m

edit byebye
On y entre les commandes

% Fonction affichant 'Bye bye World!'


function byebye
text = 'Bye bye World!';
disp(text);
end
On sauve le chier et on retourne dans la fentre de commandes. L'excution du chier
 byebye.m donne

>> byebye
Bye bye World!
Dans ce cas, on constate

>> who
Your variables are:
text
>> text
text =
Hello World!
5

La fonction  byebye se droulant dans un sous-environnement de travail, la variable  text


de l'environnement de travail n'a pas t altre par l'excution de la fonction.
Les variables globales, dnies l'aide du mot-clef  global, constituent une exception
notable ce comportement en ce sens que leur porte n'est plus locale mais globale. Il existe
aussi des variables persistantes, dnies l'aide du mot-clef  persistent, qui conservent leur
valeur entre les appels de la fonction o elles sont dnies. Par scurit, l'usage de variables
globales et de variables persistantes est gnralement dconseill.
Les fonctions peuvent prendre plusieurs arguments en entre et en sortie. Par exemple,
voici une fonction

polarToCartesian

qui reoit les coordonnes polaires d'un point du plan

en entre et qui fournit ses coordonnes cartsiennes en sortie.

% Fonction qui calcule les coordonnes cartsiennes d'un point


% partir de ses coordonnes polaires.
function [x y] = polarToCartesian(rho,theta)
x = rho * cos(theta);
y = rho * sin(theta);
end
On l'appelle par la commande

[x y] = polarToCartesian(rho,theta)
De nombreuses fonctions sont intgres nativement dans MATLAB. Par exemple, on retrouve les fonctions mathmatiques :





pi : renvoie la valeur de ;
sin : renvoie le sinus d'un angle en radians ;
sqrt : revoie la racine d'un nombre ;
ceil : renvoie l'arrondi suprieur d'un nombre.

L'aide et ses options de recherche permettent de trouver facilement les fonctions utiles et
d'obtenir des informations pour leur utilisation.

Exercices
1)

Soit l'quation algbrique

ax2 + bx + c = 0
Crer une fonction qui reoit en argument les coecients

(1)

a, b

et

et qui fournit en sortie les

deux racines.

8 Structures de contrle
MATLAB intgre des structures de contrle parmi lesquelles on retrouve :





if : contrle conditionnel sur une expression logique ;


switch : contrle conditionnel sur une expression logique ;
for : contrle de boucle sur un compteur ou un itrateur ;
while : contrle de boucle sur une expression logique.

L'aide donne une description prcise de ces structures de contrle.

Exercices
1)

La fonction exponentielle admet le dveloppement en srie

exp(x)

X
xi
i=0

(2)

i!

Ecrire une fonction MATLAB qui calcule cette srie limite aux

n+1

premiers termes. On

peut utiliser la fonction  factorial et l'oprateur  ^.

2)

Mme exercice que prcdemment mais sans utiliser la fonction  factorial ni l'oprateur

 ^ (seuls les oprateurs  +,  * et  / sont autoriss).

9 Vecteurs et matrices
MATLAB est un langage de programmation qui permet la manipulation de scalaires,
de vecteurs, de matrices et de tableaux d'ordre plus lev encore. Ainsi, on peut faire des
oprations avec des matrices et, en toute gnralit, les fonctions peuvent prendre en argument
des matrices.
Direntes mthodes permettent de dnir des vecteurs

>> a = [1 5 2 4 3]
a =
1
5
2

>> b = 1:2:10
b =
1
3

>> c = linspace(-pi,pi,5)
c =
-3.1416 -1.5708
>> d = rand([1 5])
d =
0.2785
0.5469

1.5708

3.1416

0.9575

0.9649

0.1576

On peut accder aux lments d'un vecteur en utilisant les indices linaires (ceux-ci vont
de  1 pour le premier lment  end pour le dernier lment)

>> a(1)
ans =
1
>> b([2 end])
ans =
3
9

>> c(3:end-1)
ans =
0
1.5708
>> d(a(2))
ans =
0.1576
On peut modier les lments d'un vecteur

>> a(1) = 10
a =
10
5

>> b([end+1 10]) = [11 12]


b =
1
3
5
7

>> c([1 2 3]) = c([3 2 1])


c =
0 -1.5708 -3.1416

11

1.5708

12

3.1416

L'oprateur  : reprsente l'ensemble des composantes du vecteur

>> d(:) = 2
d =
2
2

La fonction  length renvoie la longueur d'un vecteur et la fonction  sort permet de


trier les valeurs d'un vecteur (le second argument de sortie reprant les index correspondants
dans la conguration initiale).

>> length(a)
ans =
5
>> [a index] = sort(a)
a =
2
3
4
5
index =
3
5
4
2

10
1

On peut aussi dnir des matrices

>> A = [1 2;3 4]
A =
1
2
3
4
>> B = eye(3)
8

B =

1
0
0

0
1
0

0
0
1

>> C = zeros(2,3)
C =
0
0
0
0
0
0
>> D = diag([7 1 3])
D =
7
0
0
0
1
0
0
0
3
L'aide contient une explication dtaille de ces fonctions. On peut accder aux lments
d'une matrice en utilisant les indices de ligne et de colonne, ou les indices linaires

>> A(2,1)
ans =
3
>> B(1,:)
ans =
1
0

>> C(:,end)
ans =
0
0
>> D(9)
ans =
3
On peut videmment modier les lments d'une matrice.
La fonction  size renvoie les dimensions d'une matrice et la fonction  find permet de
trouver les indices linaires correspondant aux valeurs non-nulles d'un tableau.

>> size(A)
ans =
2
2
>> find(A > 2)
ans =
2
4
9

>> A(find(A > 2)) = 0


A =
1
2
0
0
Remarquons trois piges courants : d'abord la dirence entre l'oprateur de multiplication
matricielle  * et l'oprateur de multiplication lment par lment  .*, ensuite la dirence

entre l'oprateur de transposition  .' et l'oprateur de transposition et complexe-conjugu

 ' et enn l'existence de l'lment vide  [] reprable sa longueur nulle.

Exercices
1)

 Crer un vecteur ligne  x de 5 nombres successifs entre 2 et 3 et spars par des


intervalles gaux.
 Ajouter 1 au deuxime lment.
 Crer un deuxime vecteur ligne  y de la mme dimension mais dont les lments sont
les nombres pairs successifs en commenant 4.
 Crer une matrice  A, dont la premire ligne est gale  x, la deuxime ligne est une
ligne de 1 et la troisime ligne est gale  y.

2)

Soit deux matrices


A=
o

4 5
3 /4


, B=

2
3+i
72/3 0.2

est le nombre imaginaire. Calculer les lments suivants

A + B, AB, A2 , AT , B 1 , B T AT , A2 + B 2 AB
3)

(3)

(4)

En utilisant la commande  polyval...

10 Rsolution de systmes d'quations


Pour rsoudre un systme linaire

Ax = b,

l'oprateur  \ de division gauche peut tre

utilis :

x = A\b
A carre ou rectangulaire. D'autres fonctions utiles
pour la rsolution de systmes linaires sont  lu pour la dcomposition LU,  det pour le
calcul du dterminant,  inv pour l'inverse d'une matrice carre,  rank pour le rang,  cond
pour le nombre de conditionnement en norme 2, ou encore  rcond pour l'estimation de
Cet oprateur s'applique pour une matrice

l'inverse du nombre de conditionnement en norme 1.

10

Exercice
1)

Rsoudre le systme d'quations linaires

5x + 6y + 10z = 4

(5)

3x + 14z = 10

(6)

7y + 21z = 0

(7)

11 Polynmes
MATLAB reprsente un polynme comme un vecteur ligne qui contient les coecients des
termes rangs selon les puissances dcroissantes. Par exemple,

p = [ 1 -12 0 5 0]
reprsente

x4 12x3 + 5x.

Voici quelques fonctions utiles pour travailler avec des polynmes :

 roots calcule les racines d'un polynme,  poly dtermine un polynme partir de ses

racines,  polyval value un polynme en un point, enn,  +,  conv et  deconv permettent
respectivement l'addition, le produit et la division de deux polynmes.

12 Graphiques
MATLAB ore des fonctionnalits puissantes pour la cration de graphiques. L'achage
le plus simple se fait l'aide de la fonction  plot. La gestion des direntes gures se fait

l'aide de la fonction  figure. Pour acher plusieurs courbes sur une mme gure, on active
le maintien du graphique l'aide de la commande  hold

l'aide de la commande  hold

off.

on.

Ce maintien est dsactiv

Pour sauver une gure on utilise la fonction  print. La

fonction  close ferme la gure active alors que la commande  close

all

ferme toutes les

gures.
D'autres fonctions permettent de dnir la zone d'achage ( axis), une grille ( grid),

un titre ( title) ou des labels pour les dirents axes ( xlabel,  ylabel) :

t = 0:pi/20:2*pi;
y = sin(t);
plot(t,y)
axis ([0 2*pi -1.5 1.5])
grid
title('sinus')
xlabel('temps t')
ylabel('sinus(t)')

Exercices
1)

Tracer le graphique de la fonction

y(x) = e0.8x sinx


pour

= 10

rad/s et

x [0 10]

(8)

s. Utiliser l'oprateur  : pour dnir le vecteur  x avec un

incrment de 0.1 s.

11

2)

Soit la fonction

y(x) = 10 + 5ex cos(x + 0.5)

(9)

= 1, 3, 10 rad/s et x [0 5] s. Les trois courbes


= 1 rad/s, une ligne en traits
en pointills pour = 10 rad/s.

Ecrire un script qui trace le graphique pour

doivent apparatre en noir, avec une ligne continue pour


discontinus pour

=3

rad/s et une ligne

13 Rsolution d'quations direntielles


Considrons l'quation direntielle

dy1
dt
dy2
dt
dy3
dt
avec les conditions initiales

= y2 y3

(10)

= y1 y3

(11)

= 0.51 y1 y2

(12)

y1 (0) = 0, y2 (0) = 1

et

y3 (0) = 1.

Dans MATLAB, cette quation

direntielle est reprsente par une fonction dnie comme suit

function dy = rigid(t,y)
dy = zeros(3,1);
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
et enregistre sous le nom

rigid.m. La rsolution numrique se fait alors dans un autre chier

.m en faisant rfrence la fonction  rigid. La fonction  ode45 utilise une mthode de

Runge-Kutta explicite pour la rsolution de l'quation et les paramtres d'intgration peuvent


tre ajust avec la fonction  odeset. Le code suivant rsout l'quation direntielle entre 0
et 12 et trace le rsultat l'cran.

[T,Y] = ode45(@rigid,[0 12],[0 1 1]);


plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')

Exercices
1)

L'oscillateur de Van der Pol est dcrit par l'quation suivante

dx1
dt
dx2
dt

= x2

(13)

= (1 x21 )x2 2 x1

(14)

Ecrire un programme qui rsout cette quation pour


de la solution

x1 (t)

pour

=1

et

 = 0.1

t [0 100]

et qui ache le graphique

et pour direntes conditions initiales. Vrier que

la rponse converge vers des oscillations stables lorsque les conditions initiales sont direntes
de

x1 (0) = x2 (0) = 0.

12

14 Entres/sorties
Pour le dveloppement d'un programme interactif, la sortie cran et l'entre clavier se font
respectivement l'aide des fonctions  disp et  input.
La sauvegarde et le chargement des variables se font respectivement l'aide des fonctions
 save et  load. Pour une gestion plus souple de la lecture et de l'criture d'un chier, on
peut tre amen utiliser les fonctions  fopen,  fclose,  fprintf,  fscanf,  fgetl et

 fgets.

La concatnation de chanes de caractres se fait l'aide de l'oprateur  []. Il peut tre

utile de transformer des nombres en chanes de caractres et vice versa l'aide des fonctions
 num2str et  str2num. Pour une gestion plus souple des chanes de caractres, on peut

employer les fonctions  sprintf et  sscanf.

15 Fonctions vectorielles
An d'amliorer l'ecacit d'un programme, il est souhaitable d'viter les instructions
de boucle  for et  while et de leur prfrer les fonctions vectorielles de MATLAB. Ces
fonctions dnissent des oprations sur l'ensemble des lments d'une matrice ou d'un vecteur
en une seule commande.
Par exemple, les fonctions  prod,  sum et  diff dnissent des oprations de produit,
de somme et de dirence pour tous les lments d'une matrice ou d'un vecteur. On citera
galement  max,  min et  mean. Parmi les fonctions dj rencontres, rappelons enn  sort,

 find,  zeros,  ones ainsi que l'oprateur  :. L'utilisation de ces fonctions est donc vive-

ment recommande.

Exercice
1)

Sans utiliser d'instruction de boucle, crire une fonction qui reoit un argument un vecteur

 x de dimension inconnue  n et un scalaire  t et qui calcule un scalaire  y tel que

y = (x(1) t) . . . (x(n) t)

(15)

16 a coince. . .
Il n'y a pas que l'aide qui puisse aider l'utilisateur en cas de problme. D'abord en cas
de mauvaise utilisation de MATLAB, un message d'erreur apparait. Par exemple, le sinus du
caractre  a n'a pas de sens, un message d'erreur explicite est renvoy.

>> sin('a')
??? Undefined function or method 'sin' for input arguments of
type 'char'.
Ensuite, l'diteur comprend un analyseur syntaxique mettant en vidence  en soulignant
en rouge et dans la marge de droite  les avertissements et les erreurs d'un chier qui y est
dit. Une aide contextuelle la rsolution de ces problmes est fournie.
Il est utile de mentionner l'existence des  nombres   i (le nombre imaginaire),  Inf

(l'innit positive) et  NaN (le nombre indni ou  Not-a-Number ). Il est galement utile

de mentionner l'existence des fonctions  is* permettant de dtecter l'tat d'une entit (par

13

Figure 3  Outils de dbogage : menu et barre d'outils


exemple les trois nombre prcdents peuvent tre tests avec les fonctions  isreal,  isinf

ou  isnan). Pour terminer il est important de prendre conscience que la prcision de calcul
n'est pas innie (c'est facilement observable avec la fonction  eps).

17 Outils de dbogage
MATLAB comprend un debugger intgr l'diteur. Cet outil permet d'arrter un programme en cours d'excution pour examiner la valeur des direntes variables et dtecter
d'ventuelles erreurs. A cet eet, des points d'arrt doivent tre crs au pralable dans le(s)
chier(s) .m. Pour crer un point d'arrt (breakpoint), il sut d'appuyer sur F12 et un point
rouge apparat gauche de la ligne de courante. De manire quivalente, on peut cliquer sur
le tiret dans la marge de gauche de l'diteur, ou utiliser la barre d'outil de dbogage.
L'excution du programme est alors ralise en pressant F5 ou via le bouton Debug->Run
du menu (voir Fig. 3). Le programme s'arrte au point d'arrt indiqu par une che verte.
Vous pouvez examiner le contenu des variables du Workspace, avancer d'une ligne, continuer
ou arrter le programme. Lorsqu'une ligne fait appel une fonction, il est possible de rentrer
l'intrieur de cette fonction ou de sauter directement la ligne suivante.
Des fonctionnalits de dbogage sont galement accessibles lorsqu'un programme produit
une erreur. Dans la Fig. 4, le message d'erreur en rouge indique alors la ligne laquelle l'erreur
s'est produite. On peut y accder directement en cliquant sur le texte  wrongProgram

at 3.

18 Outils d'analyse des performances


Pour tester la performance d'un code et ventuellement l'amliorer, l'utilisateur peut tirer avantage du proler de MATLAB. Celui-ci se contrle via la commande  profile, ou
directement via son interface graphique (accessible par la commande  profile

viewer).

Le proler donne des statistiques sur le nombre d'appels et le temps pass lors de l'excution
d'un code. Ces informations permettent de mettre en vidence les parties les plus gourmandes
du codes. Pour l'analyse d'un code trs rapide, il peut se rvrer utile de rpter celui-ci un
certain nombre de fois, de manire observer des temps d'excution non-ngligeables.

14

Figure 4  Outils de dbogage lors d'une erreur d'excution


Les fonctions  tic et  toc sont galement trs pratiques pour valuer le temps d'excution d'une section de programme.

Exercices
1)

Comparer les deux programmes suivants

tic;
for i=1:1000,
for j=1:1000,
x(i,j)=i+j;
end
end
toc
et

tic;
x=zeros(1000);
for i=1:1000,
for j=1:1000,
x(i,j)=i+j;
end
end
toc
Comment pouvez-vous expliquer ce rsultat ?

15

Vous aimerez peut-être aussi