Introduction à Matlab�
Pr. LAJJAM AZZA
Groupe matlab 2ap1 2021�
Qu’est ce que Matlab?
Plan
Première prise en main
Vecteurs et des matrices
Scripts et des fonctions
Traiter des fichiers de données
Générer des graphiques et les sauvegarder
Ecrire de petit programmes interactifs
Présentation de MATLAB
mode interactif: MATLAB exécute les instructions au fur et à mesure qu'elles sont données par l'usager.
mode exécutif: MATLAB exécute ligne par ligne un fichier ".m" (programme en langage MATLAB).
Interface graphique
Fenêtre de commande
Espace de travail
Historique des commandes
Arborescence du dossier en cours
Variables
>> 6 + 3
ans = 9
Variables
Exercice 1
Créez une variable rho pour contenir la densité du sang (valeur de 1.06 g/cm^3).
Vecteurs
>> V_ligne = [0 1 2]
V_ligne =
0 1 2
>> V_colonne = [0; 1; 2]
V_colonne =
0
1
2
Vecteurs
>> V_colonne=transpose(V_ligne)
V_colonne =
0
1
2
Vecteurs
>> V= [0:0.2:1]
V =
Columns 1 through 6
0 0.2000 0.4000 0.6000 0.8000 1.0000
Vecteurs
>> V=[0:5]
V =
0 1 2 3 4 5
Vecteurs
>> a=V(2);
>> V(3)=3*a
V =
0 1 3 3 4 5
Vecteurs
>> V1=[1 2];
>> V2=[3 4];
>> V=V1+V2 % addition de vecteurs
V =
>> V=V2-V1 % soustraction de vecteurs
V =
2 2
Vecteurs
>> V=2*V1 % multiplication par un scalaire
V =
2 4
Vecteurs
>> V=V1.*V2 % multiplication élément par élément
V =
3 8
>> V=V1./V2 % division élément par élément
V =
0.3333 0.5000
Vecteurs
>> V3=[1 2 3]
V3 =
1 2 3
>> V=V1.*V3
??? Error using ==> .* Matrix dimensions must agree.
Vecteurs
>> V1=[1 2];
>> V2=[3 4];
>> V=[V1 V2]
V =
1 2 3 4
Vecteurs
>> V1=[1;2];
>> V2=[3;4];
>> V=[V1;V2]
V =
1
2
3
4
Exercice 2
A = 0:100
A = 3 :3 :27
A' est égal à [1 ;2 ;3 ;4] (vecteur colonne).
Matrices
On peut aussi créer des matrices à partir de vecteurs, par exemple,
>> V1=[1 2];
>> V2=[3 4];
>> V=[V1; V2]
V =
1 2
3 4
Matrices
qui n’est pas équivalent à :
>> V1=[1; 2];
>> V2=[3; 4];
>> V=[V1 V2]
V =
1 3
2 4
Matrices
>> V1=[1 2];
>> V2=[3; 4];
>> V=[V1; V2]
??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.
Matrices
>> M=[1 2; 3 4]
M =
1 2
3 4
>> m21=M(2,1) % 2e ligne, 1ere colonne
m21 =
3
Accéder aux éléments d’une Matrice
A =
1 2 3
8 5 6
7 8 9
>> a4=A(4)
a4 =
2
Extraction d’une sous matrice
>> V=A(:,2) % ici, (:) signifie toutes les lignes
V =
2
5
8
Extraction d’une sous matrice
De la même manière, si l’on veut stocker les lignes 2 et 3 :
>> M2=A(2:3,:) % (2:3) signifie ligne 2 à 3
% et (:) signifie toutes les colonnes
M2 =
8 5 6
7 8 9
Opérations sur les matrices
Il est possible d’inverser inv(), de transposer transpose() ou avec l’apostrophe (.’) les matrices :
>> invM=inv(M)
invM =
-2.0000 1.0000
1.5000 -0.5000
>> transpM=M.’
transpM =
1 3
2 4
Opérations sur les matrices
Un des intérêts de Matlab est la possibilité d’utiliser directement les opérations mathématiques prédéfinies pour les matrices. L’addition et la soustraction sont directes (attention aux dimensions) ainsi que la multiplication par un scalaire :
>> A=[1 2; 3 4];
>> B=[4 3; 2 1];
>> C=A+B % addition
C=
5 5
5 5
Opérations sur les matrices
>> D=A-B % soustraction
D=
-3 -1
1 3
>> C=3*A % multiplication par un scalaire
C=
3 6
9 12
Opérations sur les matrices
Pour la multiplication et la division, les opérateurs usuels (* et /) sont définis pour la multiplication et division matricielles :
>> C=A*B % multiplication de matrices
C=
8 5
20 13
Opérations sur les matrices
>> D=A/B % division de matrices
D=
1.5000 -2.5000
2.5000 -3.5000
Opérations sur les matrices
Afin de réaliser la multiplication et la division élément par élément, on précède les opérateurs par un point (.* et ./) :
>> C=A.*B % multiplication élément par élément
C=
4 6
6 4
Opérations sur les matrices
>> D=A./B % division élément par élément
D=
0.2500 0.6667
1.5000 4.0000
Opérations sur les matrices
D’autres opérations sur les matrices seront présentées dans les sections subséquentes.
Il faut noter certaines matrices spéciales qui peuvent être utilisées, par exemple la matrice identité :
>> I=eye(3) % matrice identité
I=
1 0 0
0 1 0
0 0 1
Opérations sur les matrices
On peut aussi déclarer des vecteurs (et des matrices) ne contenant que des zéros ou des 1.
>> V_nul=zeros(1,2) % un vecteur de 1 ligne, 2 colonnes de 0
V_nul=
0 0
>> V_un=ones(1,2) % un vecteur de 1 ligne, 2 colonnes de 1
V_un=
1 1
>> M_un=ones(2,2) % une matrice 2x2 de 1
M_un=
1 1
1 1
Opérations sur les matrices
Dans certaines applications, il est parfois utile de connaître les dimensions d’une matrice, et la longueur d’un vecteur (retournés, par exemple, par une fonction).
Dans ce cas, on utilise les fonctions length et size.
>> V=[0:0.1:10]; % utilisation de length - vecteur 1x101
>> n=length(V)
n=
101
Opérations sur les matrices
>> M=[1 2 3; 4 5 6]; % utilisation de size - matrice 2x3
>> [n,m]=size(M)
n=
2
m=
3
>> dim=length(M) % utilisation de length sur une matrice
dim=
3
Dans ce cas length donne la plus grande dimension, ici le nombre de colonnes.
Exercices d’application
Création de vecteur avec MATLAB
Script et fonction
Il existe deux types de fichiers qui peuvent être programmés avec Matlab:
Dans les deux cas, il faut lancer l’éditeur de fichier et sauvegarder le fichier avec l’extension .m.
Script
Script
Script
Script
Par exemple, créons à l’aide de l’éditeur intégré de Matlab dans le répertoire de travail choisi, déjà déclaré par SetPath, le fichier test.m. Supposons qu’il contient les instructions suivantes :
clear all
x=4;
y=2;
a=x +y
b=x*y
Script
Ecrivons dans la fenêtre de commandes le nom du fichier
>> test
a =
6
b =
8
Script
Fichier function
Fichier function
function a = ma_fonction(x,y)
a=x+y;
Lorsqu’on tape dans la fenêtre de commandes:
>> a = ma_fonction(4,2)
on obtient
a = 6
Fichier function
function [a,b] = ma_fonction2(x,y)
a=x+y;
b=x*y;
Dans ce cas, on vérifie que:
>> [a,b] = ma_fonction2(4,2)
a =
6
b =
8
Fichier function
Fichier function
>>angle=inline(’atan(y/x)’)
angle =
Inline function:
angle(x,y) = atan(y/x)
>>angle(5,4)
ans =
0.6747
Fonctions mathématiques usuelles
Exercice
Représentation graphique
>> x=[0:0.01:2*pi];
>> plot(x,cos(x),x,sin(x))
Représentation graphique
% graphique.m
clear all
close all % ferme les anciennes figures
x=[0:0.01:2*pi]; y1=cos(x); y2=sin(x);
figure(1)
plot(x,y1,’.’,x,y2,’+’) % cos(x) en points, sin(x) en +
title(’sinus et cosinus’) xlabel(’x’) ylabel(’f(x)’)
legend(’cos(x)’,’sin(x)’,0) % le 0 place la légende à côté des courbes
Représentation graphique
Opérateurs de comparaison et logique
Opérateur | Syntaxe Matlab |
Egal à | = = |
Différent de | ~ = |
Supérieur à | > |
Supérieur ou égal à | >= |
Inférieur à | < |
Inférieur ou égal à | <= |
Négation | ~ |
Ou | | |
Et | & |
Exemple de représentation graphique
x=linspace(0,pi,30); % crée un tableau de 30 composantes uniformément
% réparties entre 0 et pi
y=sin(x);
plot(x,y) %relie les points (xi,yi) par un trait continu noir
plot(x,y,’p-b’) %relie les points (xi,yi) par un trait continu de couleur et
%matérialise les points avec un symbole
plot(x,y,’pb’) %matérialise les points (xi,yi) avec un symbole de couleur
Exercice
Boucles if-elseif-else�
if CONDITION1
ACTION1;
elseif CONDITION2
ACTION2;
else
ACTION3;
Boucles if-elseif-else�
Boucles if-elseif-else
function b=transf_entier(a)
if a<0 & mod(a,2) ~ = 0 % mod permet de trouver le reste d’une division
b=-a;
elseif a>=0 & mod(a,2) ~ = 0
b=a+1;
else
b=abs(a)+2;
end
Exemple d’application
Boucles for
Les boucles for sont très utiles dans la plupart des applications mathématiques (par exemple, pour effectuer un calcul sur tous les éléments d’un vecteur).
for i = 0:valeur_finale
ACTION1;
ACTION2;
...
ACTIONN;
end
Boucles for
Remarquez que l’incrément peut être différent de 1,
par exemple si l’on veut calculer les carrées des nombres
pairs entre 0 et 10 :
for i=0:2:10
carre = i^2
end
Boucles for
Exemple d’application
Boucle while
Une boucle while permet de répéter une opération tant qu’une condition (critère) n’est pas remplie. En pseudo-code, elle peut être schématisée de la façon suivante :
while CONDITION
ACTION1;
ACTION2;
...
ACTIONN;
end
Boucle while
Par exemple, on veut trouver le nombre d’entiers positifs nécessaires pour avoir une somme plus grande que 100. On pourrait réaliser cette tâche de la manière suivante:
function n=nombre_entier (somme)
n=0; % initialisation des valeurs
somme=0;
while somme < 100
n=n+1; % itération de n
somme=somme+n; % nouvelle somme
end
Boucle switch
Les boucles switch permettent parfois de remplacer les boucles if-elseif-else, particulièrement dans le cas de menus.
switch (CAS)
case {CAS1}
ACTION1
case {CAS2}
ACTION2
otherwise
ACTION3
end
Boucle switch
Boucle switch
operation=input(’Opération: (1) exp ; (2) log ? ’);
nombre=input(’Valeur: ’);
switch operation
case 1
b=exp(nombre)
case 2
b= log(nombre)
otherwise
disp(’mauvais choix -- operation’)
end
Boucle switch
>> calcul_rapide
Opération: (1) exp ; (2) log ? 1
Valeur: 0.5
b =
1.6487
Exercices
Traduire en langage Matlab l’algorithme PGCD suivant :
a,b entiers positifs
tant-que a≠b faire
si a>b alors a<- a-b
sinon b<- b-a
fin tant-que
PGCD<- a