Matlab
Matlab
Matlab
Support de cours
PLAN
2.Notions de base
MATLAB est un système interactif de programmation scientifique, pour le calcul numérique et la visualisation
graphique, basé sur la représentation matricielle des données. Le nom dérive de cette représentation : MATLAB =
MATrix LABoratory. Ce langage contient un minimum de structures de programmation (structure itérative, structure
conditionnelle, sous-routine). L’avantage est qu’il est très simple et très rapide à programmer, offrant une grande
tolérance (syntaxe simple, pas de définition de types, etc), ce qui permet un gain appréciable en temps de mise au
point. L’ingénieur peut par ce moyen être plus efficace dans l’analyse d’un problème.
MATLAB peut donc être utilisé pour la résolution approchée d'équations différentielles, d'équations aux dérivées
partielles ou de systèmes linéaires, etc....
L'objectif de ce support de cours est double : la connaissance de ce logiciel est en soi indispensable parce qu'il est de
plus en plus utilisé dans l'industrie et les banques pour développer des prototypes de logiciels et la mise en pratique
des algorithmes d'analyse numérique étudiés.
A) Command Window: invite de commande permettant de taper des instructions, d'appeler des scripts, d'exécuter des
fonctions matlab.
C) Workspace : il liste les variables en mémoire, il permet également de parcourir graphiquement le contenu des
variables.
D) Current Directory : un navigateur de fichier intégré à MATLAB pour visualiser le répertoire de travail courant et
y effectuer les opérations classiques tel que renommer ou supprimer un fichier.
E) le Help browser : un navigateur permettant de parcourir l'aide de MATLAB. L'aide est un outil précieux pour
trouver les fonctions et apprendre leur fonctionnement (notamment le format des données à fournir en entrée ainsi que
les valeurs renvoyées par la fonction).
Figure1 : L’interface graphique de l’environnement MATLAB.
1) Mode interactif: MATLAB exécute les instructions au fur et à mesure qu'elles sont données par l'usager.
2) Mode exécutif: MATLAB exécute ligne par ligne un programme MATLAB (d'extension.m). Un 'programme
MATLAB ' (ou 'm-file' en anglais) est une suite d'instructions MATLAB écrites dans un éditeur de texte et sauvées
dans un fichier avec une extension .m.
2. Notions de base
= affectation
- (soustraction) ) >> 3-2
, virgule
* (multiplication) ) >> 3*2
; point virgule
/ (division) ) >> 3/2
% commentaire
On distingue plusieurs types de variables selon les données qu'elles servent à stocker (nombre, caractère alpha-
numérique, tableau, matrice, structure) :
A) Nombre
5 1.0237 0.5245E-12
Les nombres complexes peuvent être écrits sous forme cartésienne ou polaire:
B) Variable
lorsqu'aucune variable d'affectation n'est pas spécifiée pour stocker le résultat de l'opération, MATLAB stocke
le résultat dans une variable appelée ans (diminutif pour answer), comme suit :
Exemple :
>> 3+2
ans =
5
Sinon, le nom d’une variable peut être spécifiée pour stocker le résultat de l’opération effectuée :
Exemple :
>>x = 3+2
x=
5
NB :
Les noms de variable doivent commencer par une lettre, et sont sensibles à la différenciation des caractères
(majuscule/minuscule) et ne peuvent contenir aucun caractère spécial exceptée le tiret bas.
Il faut éviter d'utiliser comme nom de variable des noms déjà employés comme nom de fonctions (par ex :
min, max, exp ...).
MATLAB générera également une erreur si un des mots-clefs réservé suivant est utilisé : for, end, if, while,
function, return.
C) Vecteurs et matrices
Les vecteurs et matrices peuvent être construits directement selon la syntaxe suivante
1) Vecteurs
b) Un vecteur colonne est un vecteur dont les éléments sont séparés par des points-virgule
>> y=[0.5;1.2;-3.75;5.82;-0.735]
y=
0.5000
1.2000
-3.7500
5.8200
-0.7350
Des vecteurs définis au préalable peuvent être utilisés pour générer d’autres vecteurs
Exemple
>> a=[1 2 3];
>> b=[4 5 6];
>> c=[a b]
c=
123456
Si l'on veut déterminer la longueur d'un vecteur, on utilisera la commande "length" :
>> l=length(c)
l=
6
2) Matrices
Certaines matrices sont prédéfinies dans matlab. Ainsi "zeros(m,n)" crée une (m,n) matrice de zéros; "ones(m,n)"
crée une (m,n) matrice de uns et "eye(n)" crée une (n,n) matrice identité.
Exemple
>> B=eye(4)
B=
1000
0100
0010
0001
NB :
Les éléments d'un vecteur ou d'une matrice peuvent être adressés en utilisant les indices sous la forme suivante:
t(10) donne l’ élément no. 10 du vecteur t
A(2,9) donne l’ élément se trouvant à ligne 2, colonne 9 de la matrice A
B(:,7) donne la colonne 7 de la matrice B
C(3,:) donne la ligne 3 de la matrice B
L'opérateur deux points (:) permet également de créer un vecteur ligne de la manière suivante :
<debut>:<incrément>:<fin>
si l'incrément n'est pas spécifié, il sera pris égal à 1.
Les opérations «élément par élément» des vecteurs et des matrices sont effectuées en ajoutant un point (.) avant les
opérations * / ^
Exemple :
D) Fonctions
z = 5*exp(-0.4*x).*sin(7.5*y);
On peut avoir à lire des données numériques ou alphanumériques dans un fichier, par exemple les conditions
initiales d'un calcul ou un maillage qui a été généré par un autre programme.
Exemple 1 :
M = dlmread('NomDeFichier','Delimiteur')
Lit des données numériques du fichier ASCII NomDeFichier, chaque nombre est séparé du suivant par le
caractère Délimiteur ou par un retour _a la ligne. La virgule et l'espace sont des délimiteurs par défaut.
[A,B,C,...] = textread('NomDeFichier','format')
Lit les variables avec le format spécifiée jusqu'à épuisement du fihier. (Le nombre de variables à lire et le
nombre de données dans le fichier doivent correspondre.)
Exemple 2 :
Lit les données avec le format spécifiée. Un format est une chaine de caractères spécifiant en lecture le type de
données à lire, c'est-à-dire :
NB : Si on veut un format plus lisible, en particulier, afficher plusieurs variables sur la même ligne, on peut
utiliser la commande fprintf.
Exemple :
a=1.5;
b=2;
fprintf('a = %f et b= %d',a,b);
a =1.5 et b=2
Pour enregistrer les variables de l'espace de travail dans un fichier, on utilise les instructions suivantes:
>> save
Enregistrer toutes les variables dans un fichier matlab.mat. Dans une session ultérieure, taper >> load pour ramener
l'espace de travail enregistré .Si vous voulez enregistrer dans un fichier de nom choisi:
>>save fichier1.mat x y z A X
Enregistre les variables x, y, z, A, X dans le fichier fichier1.mat.
Dans une session ultérieure, taper >> load fichier1.mat pour ramener les variables x, y, z, A, X dans l'espace de
travail.
Note: Si vous n'êtes pas dans un répertoire dans lequel vous avez le droit d'écrire, MATLAB refusera
d'exécuter save
>> clear
A) Si des variables ont été sauvées en format Matlab dans le fichier fichier1.mat. Dans la session actuelle ou dans une
session ultérieure, vous pouvez charger ces données en tapant:
>> load fichier1.mat (si vous êtes dans les répertoire contenant fichier1.mat) .Les données sont récupérées avec le
nom des variables qui avaient été sauvées.
B) Si des données sont sous forme de matrices régulières dans un fichier (ex file500.txt), vous pouvez charger ces
données en tapant:
>> load file500.txt
la matrice de données est alors disponible dans l'espace matlab sous le nom file500 (pas d'extension).
C) Si des données sont dans un fichier excel (ex sarrefl_TD.xls'), vous pouvez charger ces données en tapant:
>> [data,texte]=xlsread('sarrefl_TD.xls')
Un fichier script est un fichier externe contenant une suite d'instruction MATLAB. Les fichiers de script ont une
extension de nom de fichier .m. Les M-files peuvent être des scripts qui exécutent simplement une suite d'instructions
ou peuvent ^être des fonctions
Exemple : créer le script "test script" (soit vous tapez >>edit test_script.m, soit vous faites 'File'->'New'-
>'Script' puis 'Save As' en spécifiant "test script.m" comme nom) avec la suite d'instructions suivante :
clear all %efface toutes les variables du workspace
a=1
b = 2;
c = 3, d = 4;
e = a*b/(c+d),
scal = 11;
Il s’agit de sauvegarder puis exécutez le script (menu Debug->Save&Run ou Fleche verte ou F5). la sortie est affichée
sur la ligne de commande .
Les fonctions sont des enchainements de commandes Matlab regroupées sous un nom de fonction 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.
A) M-files functions :
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 manière générale, la syntaxe de définition d'une fonction externe est
function [y_1,...,y_m]=toto(x_1,....,x_n)
où toto est le nom de la fonction, x1,…,xn, les n arguments d'entrée et [y1,….,ym] les m arguments de sortie.
Les points verticaux symbolisent les instructions effectuées à l'appel de la fonction.
Exemple :
Prenons l'exemple d'une fonction angle, qui doit calculer l'angle formé par le segment d'extrémités (0,0) et
(x,y) avec l'horizontale et aussi le dessiner. On peut créer le fichier angle.m contenant les lignes :
function [s]=angle(x,y)
s=180*atan(y/x)/pi;
patch([x,0,x],[0,0,y],'y')
axis equal
NB :
S'il n'y a qu'un résultat comme dans l'exemple de la fonction angle, on peut se dispenser de le récupérer dans
une variable. En revanche s'il y a plus d'un paramètre de sortie, il faut récupérer leurs valeurs dans des
variables dans le script d'appel.
Regardons par exemple l'utilisation de la fonction polaire définie ci-dessous et sauvegardée dans le fichier
polaire.m
Exemple:
function [r,theta]=polaire(x,y)
r=sqrt(x^2+y^2);
theta=atan(y/x);
Pour l'utiliser _a partir de la fenêtre Matlab on tape les instructions suivantes
>>r=polaire(2,3) % ou bien
>>polaire(2,3) % Si seulement le rayon nous intéresse
ans =
3.6055513
>>[r,t]=polaire(2,3) %Si on veut récupérer a la fois le rayon et l'angle
t=
.9828
r=
3.6056
B) Inline functions
Une fonction ne comportant qu'un petit nombre d'instructions peut être définie directement dans la fenêtre
de commandes de la manière suivante :
>>angle=inline('180*atan(y/x)/pi')
angle =
Inline function:
angle(x,y) = atan(y/x)
>>angle(5,4)
ans =0.6747
Les arguments de la fonction angle sont normalement fournis à l'appel dans l'ordre d'apparition dans la
définition de la fonction. On peut aussi spécifier les arguments d'appel explicitement :
Exemple :
>>f = inline('sin(alpha*(x+y))','x','y','alpha')
f=
Inline function:
f(x,y,alpha) = sin(alpha*(x+y))
>>f(0.2,0.3,pi)
ans =1
C) Fonctions outils
Exemple :
function c = testarg1(a,b)
if (nargin == 1)
c = 2*a;
elseif (nargin == 2)
c = a + b;
end
Cette commande peut être utilisée pour connaitre le nombre (prévu) d’arguments d’entrée
Exemple :
>> nargin('testarg1')
ans =
2
A) Boucle For
Il y a deux types de boucles en MATLAB : les boucles while et les boucles for. La boucle for parcourt un vecteur
d'indices et exécute à chaque pas toutes les instructions délimitées par l'instruction end.
>>v=[-1 3 0]
v=
-1 3 0
>>x=1; for k=v, x=x+k, end
x=
0
x=
3
x=
3
B)Boucle While
Il arrive que nous souhaitions répéter une suite d'instructions jusqu'_a qu'une condition soit satisfaite. Si l'on ne
connait pas le nombre d'itérations nécessaire à l'avance, une boucle while est préférable par rapport à une boucle for.
La boucle while exécute une suite de commandes jusqu'à ce qu'une condition soit satisfaite.
Exemple
>>x=1
while x<14
x=x+5
end
x=
6
x=
11
x=
16
C) Instruction conditionnée IF
Syntaxe
if expression
instructions I1
else
instructions I2
end
Exemple
break : Termine l’exécution d’une boucle. Si plusieurs boucles sont imbriquées, break permet de sortir de la
boucle la plus proche.
return : Cette instruction permet de revenir au fichier M ayant appelé le programme courant ou à la ligne de
commandes MATLAB.
error(‘message’) : Affiche le message spécifié, émet un “bip” et
interrompt l’exécution du programme.
4.4) Tests
Un test est une alternative entre deux commandes (ou groupe de commandes )
Matlab sélectionnées suivant
le résultat d'une opération logique. Le résultat d'une opération logique est une
variable logique ou booléenne qui
vaut 1 pour VRAI et 0 pour FAUX.
Dans MATLAB on dispose du classique if-else agrémentée du elseif parfois bien
utile. La syntaxe est :
Exemple :
>>x=16
x=
16
>>if x>0, y=-x, else y=x, end
y=
- 16
Pour représenter des courbes du type y = f(x) ou des surfaces z = f(x; y), les données x,y,z doivent être des vecteurs
colonnes (x et y) ou des matrices (z) aux dimensions compatibles. L'instruction de dessin correspondante (par exemple
plot(x,y) pour tracer des courbes planes) est alors utilisée et éventuellement complétée par des arguments optionnels
(couleur, type de trait, échelle sur les axes, etc...). La visualisation du résultat s'effectue dans une fenêtre graphique
(avec possibilité de zoom, de rotation, d'impression).
A) Fonction élémentaire :
permet de tracer des graphiques (courbes ou nuages de points) de vecteurs de dimensions compatibles
(y en fonction de x).
Par défaut, les lignes sont bleues en trait plein. Il est possible de modifier le style et la couleur de la ligne en rajoutant
un 3 ème argument à la fonction plot( ). Par exemple, pour afficher notre courbe avec un point vert par donnée, nous
utiliserons l'option 'g.'
>>plot(x,y,'g.')
NB : Le type de tracé est par défaut le trait continu. De même, MATLAB fixe une couleur par défaut si elle n’est pas
spécifiée.
Les styles de lignes disponibles ainsi que les codes associés sont résumés dans le tableau ci-dessous :
Exemple :
plot(x,cos(x),x,sin(x),x,exp(-x)) % Matlab va automatiquement utiliser des couleurs différentes pour chaque courbe%
NB : Pour superposer des courbes par des appels successifs à cette fonction, il faut auparavant avoir utilisé la
commande hold on, comme suit :
hold on
plot(x,cos(x),'o-r')
plot(x,sin(x),'x-b')
plot(x,exp(-x),'*-g')
legend('cos(x)','sin(x)','exp(-x)')
Une fenêtre d'un graphique peut être divisée en sous-fenêtres suivant un tableau de dimension (mxn). On peut
alors afficher dans chaque sous-fenêtre une ou plusieurs courbes :
>>subplot(2,2,1), plot(x,sin(3*pi*x))
>> ylabel('sin 3 pi x')
>>subplot(2,2,2), plot(x,cos(3*pi*x))
>> ylabel('cos 3 pi x')
>>subplot(2,2,3), plot(x,sin(6*pi*x))
>> ylabel('sin 6 pi x')
>>subplot(2,2,4), plot(x,cos(6*pi*x)), hold on, plot(x(1:10:end),cos(6*pi*x(1:10:end)),'r.')
>> ylabel('sin 6 pi x')
Figure2 : Exemple d’appels successifs à la fonction « plot ».
GLOSSAIRE
Fonctions mathématiques