Cours Matlab
Cours Matlab
ESIGC
1ère Année du Cycle Préparatoire Intégré
Imad El Mahi
2019 - 2020
1
1. Introduction
Matlab est l'abréviation de Matrix Laboratory. C’est un langage interprété, c’est à
dire qu’il exécute directement (sans compilation) les commandes dans la fenêtre
de Matlab.
Matlab est un logiciel interactif basé avant tout sur le calcul matriciel. Ainsi, un
scalaire est considéré comme une matrice à un élément et un vecteur est
considéré comme une matrice à une ligne (ou une colonne). Cette approche
matricielle permet à Matlab de traiter les données sans aucune limitation de
taille et de réaliser des calculs numériques et symboliques de façon fiable et
rapide.
Matlab est destiné au Calcul Scientifique et offre un système interactif intégrant
"Calcul Numérique" et "Visualisation Graphique". Destiné aux ingénieurs,
techniciens et aux scientifiques, Matlab est très utilisé dans les universités
comme dans le monde industriel.
Sous windows :
Il suffit de cliquer sur l'icone "Matlab" dans l'environnement windows.
ou
>> exit
Pour obtenir de l'aide sur une section particulière taper help "section".
Par exemple :
>> help elfun
Remarque :
A noter que toutes les commandes sous Matlab sont écrites en lettres
minuscules. Aussi, pour reprendre une des commandes déjà exécutée, il suffit
d’utiliser la flèche « ↑ ».
Matlab respecte aussi les règles usuelles dans les opérations mathématiques. Par
exemple :
>> (3*5+15*2)/4
ans =
11.2500
3
On peut aussi comme tout langage de programmation stocker les valeurs dans
des variables. Dans Matlab, il est inutile de déclarer le type de variable (entier,
réel, complexe, chaîne de caractère, etc).
Par exemple :
>> a=7
a =
7
>> b=8.3
b =
8.3000
>> c=a+b
c =
15.3000
>> x=2.5e3
x =
2500
>> y=3e2
y =
300
>> z=x*y
z =
750000
Remarque :
4
Il est utile parfois de savoir les variables qui ont été utilisées. Pour ce faire, on
tape la commande :
>> who
Constantes de Matlab
Voici quelques constantes déjà prédéfinies en Matlab :
>> pi
ans =
3.1416 désigne le nombre réel π
>> i
ans =
0.0000 + 1.0000i est le complexe imaginaire tel que i2 = -1
>> j
ans =
0.0000 + 1.0000i est le complexe imaginaire tel que j2 = -1
>> eps
ans =
2.2204e-16 désigne la précision numérique relative
5
z4 =
-17.0000 + 17.0000i
>> z5=z1/z2
z5 =
0.6765 + 0.2059i
>> z = 1 + sqrt(3)*i
z =
1.0000 + 1.7321i
>> real(z)
ans =
1
>> imag(z)
ans =
1.7321
>> abs(z)
ans =
2.0000
6
>> angle(z)
ans =
1.0472
>> z2=conj(z)
z2 =
1.0000 - 1.7321i
Chaînes de caractères
Une chaîne de caractère est un tableau de caractères. On peut accéder à chaque
caractère de la chaîne de caractères en faisant référence à sa position dans la
chaîne.
Exemple :
>> ch='bonjour'
ch =
bonjour
>> ch(1)
ans =
b
>> ch(3)
ans =
n
4. L’opérateur colon ‘’ : ’’
On retrouve la notation de l’opérateur colon ‘’ : ’’ souvent en Matlab,
notamment pour générer des vecteurs. Elle s’utilise de la manière suivante :
7
>> x:z:y
ou bien
>> u=[5 ,1 , -2 , 3]
u =
5 1 -2 3
Pour définir un vecteur colonne, on sépare ces éléments par des points virgules.
8
5
1
−2
Par exemple, pour définir le vecteur colonne , on écrit :
3
>> v=[5;1;-2;3]
v =
5
1
-2
3
9
On peut obtenir la longueur d’un vecteur en utilisant la commande length. On
peut aussi utiliser la commande size qui donne la dimension du vecteur
(nombre de lignes et nombre de colonnes).
Exemple :
>> u=[2 7 4 15 12];
>> n=length(u)
n =
5 longueur du vecteur u
>> [p,q]=size(u)
p =
1 nombre de lignes du vecteur u
q =
5 nombre de colonnes de u
Produit scalaire :
Le produit scalaire de deux vecteurs u et v s’obtient par la commande :
>> dot(u,v)
Si les vecteurs u et v sont colonnes, on peut aussi effectuer leur produit scalaire
en multipliant u par la transposée de v, c'est-à-dire par la commande :
>> u*v’
Exemple :
>> u=[3 4 1];
>> v=[-1 5 2];
>> w=u+v;
>> w
w =
2 9 3
>> dot(u,v)
ans =
19
10
sum(u) : donne la somme des éléments du vecteur u.
prod(u) : donne le produit des éléments du vecteur u.
sort(u) : classe les éléments du vecteur u en ordre croissant.
sort(u,’descend’) : classe les éléments de u en ordre décroissant.
Exemple :
>> u=[3 8 4 9 1];
>> min(u)
ans =
1
>> max(u)
ans =
9
>> sum(u)
ans =
25
>> prod(u)
ans =
864
>> sort(u)
ans =
1 3 4 8 9
>> sort(u,'descend')
ans =
9 8 4 3 1
2 5
-2 5
=
1 3 , on écrit :
−6 2
Pour générer la matrice
>> B=[2 5 ; 1 3 ; -6 2]
11
B =
2 5
1 3
-6 2
On peut aussi accéder à toute une ligne ou une colonne d’une matrice par la
notation ‘ : ’.
Exemple :
>> u1=A(:,1) crée le vecteur u1 contenant la 1ère
u1 = colonne de la matrice A.
3
12
-2
>> u2=A(:,2) crée le vecteur u2 contenant la 2ème
u2 = colonne de A.
7
5
>> u3=A(1,:) crée le vecteur u3 contenant la 1ère
u3 = ligne de A.
3 7
1 0 0
0 1 0
0 0 1
>> zeros(3,2)
ans =
0 0
0 0
0 0
>> zeros(2)
ans =
0 0
0 0
>> ones(3,2)
ans =
1 1
1 1
1 1
13
>> rand(2,3)
ans =
0.2785 0.9575 0.1576
0.5469 0.9649 0.9706
Opérations matricielles :
La somme et le produit de deux matrices A et B s’obtiennent en tapant :
A+B et A*B.
La matrice transposée de la matrice A s’obtient en écrivant : A’
Exemple :
>> A=[3 6 -2 ; 2 4 1 ; 5 6 0]
A =
3 6 -2
2 4 1
5 6 0
>> B=[1 4 2 ; 3 2 1 ; 5 2 3]
B =
1 4 2
3 2 1
5 2 3
>> A+B
ans =
4 10 0
5 6 2
10 8 3
>> A*B
ans =
11 20 6
19 18 11
23 32 16
>> A'
ans =
3 2 5
6 4 6
-2 1 0
Il existe aussi dans Matlab des fonctions spécifiques qui opèrent sur les matrices.
Voici quelques unes :
det(A) : calcule le déterminant de la matrice A.
inv(A) : calcule la matrice inverse de A.
14
diag(A) : retourne un vecteur formé par la diagonale de A.
trace(A) : retourne la trace de A (somme des éléments de la diagonale de A).
rank(A) : retourne le rang de la matrice A.
eig(A) : retourne les valeurs propres de la matrice A. Si on veut aussi les
vecteurs propres, on écrit [V, D]=eig(A) qui renvoie une matrice diagonale D des
valeurs propres et une matrice V dont les vecteurs colonnes sont les vecteurs
propres de A.
Exemples :
>> A=[5 -3 ; 6 -4]
A =
5 -3
6 -4
>> det(A)
ans =
-2.0000
>> B=inv(A)
B =
2.0000 -1.5000
3.0000 -2.5000
On vérifie le résultat en calculant A*B = I
>> A*B
ans =
1.0000 -0.0000
0 1.0000
>> trace(A)
ans =
1
>> diag(A)
ans =
5
-4
>> [V,D]=eig(A)
V =
0.7071 0.4472
0.7071 0.8944
D =
2 0
0 -1
15
Application :
∗ = .
La solution est donnée par le vecteur = ∗ .
Matlab permet aussi de résoudre très facilement les systèmes linéaires
|
= −−|− −
|
en écrivant l’instruction :
>> E=[A B ; C D]
Exemple :
>> A=[2 7 ; -1 5]
A =
2 7
-1 5
>> B=[0 5 ; 4 -3]
B =
0 5
4 -3
16
>> C=[4 6 ; 9 4]
C =
4 6
9 4
>> D=[-8 1 ; 0 3]
D =
-8 1
0 3
>> E=[A B ; C D]
E =
2 7 0 5
-1 5 4 -3
4 6 -8 1
9 4 0 3
7. Graphisme en Matlab
Matlab est un outil très puissant et convivial pour la gestion des figures, que ce
soit en deux dimensions ou trois dimensions.
En tapant la commande :
>> help plot
7.1 Graphisme en 2D
La fonction plot permet de tracer une courbe = f x . Elle nécessite un vecteur x
dont les éléments sont les abscisses et un vecteur y dont les éléments sont les
ordonnées (images par f des éléments du vecteur x).
Par exemple, pour tracer la courbe = sin x pour x ∈ [0, 20] , il suffit d’écrire
les commandes :
>> x=0:0.1:20; pour générer le vecteur x contenant les
abscisses de 0 à 20 par pas de 0.1
>> y=sin(x); pour générer le vecteur y contenant les images
des éléments de x
>> plot(x,y) pour tracer la courbe reliant les points (xi,yi)
17
Par défaut, la courbe est tracée en reliant les points -, - par des lignes de
couleur bleu. On peut aussi choisir de tracer la courbe en donnant une couleur
-, -
au traçage et en utilisant soit des points, des cercles, des lignes coupées, ou
autres pour relier les points .
>> plot(x,y,'.-g')
18
>> xlabel('Abscisses')
>> ylabel('Ordonnées')
>> title('Ma première figure')
>> legend('y=f(x)')
Pour afficher deux courbes à la fois dans la même figure, il suffit de taper hold on
après le premier plot et écrire hold off après le dernier plot.
Tracer sur la même figure sur l’intervalle [0, 20], les courbes des fonctions :
Exemple :
Et voici le résultat :
19
Traçage de courbes à partir de données d’un fichier
Nous avons vu comment tracer des courbes à partir de fonctions, mais souvent
on souhaite tracer des courbes à partir de données lues dans un fichier.
[Link]
0 0.5 0.7
1 1.2 0.9
2 1.4 1.5
3 2.3 1.8
4 1.7 3.2
5 1. 2.8
6 0.8 1.6
Pour tracer les courbes de la 2ème colonne et la 3ème colonne en fonction de la 1ère
colonne sur la même figure, on écrit :
>> load '[Link]' permet de créer une matrice nommée toto
>> x=toto(:,1); met la 1ère colonne de toto dans le vecteur x
>> y=toto(:,2); met la 2ème colonne de toto dans le vecteur y
>> z=toto(:,3); met la 3ème colonne de toto dans le vecteur z
>> plot(x,y)
>> hold on
>> plot(x,z)
>> hold off
20
1. Dans la fenêtre de commandes, on écrit :
>> print –d<format> nomfic
où
nomfic est le nom du fichier dans lequel on veut sauvegarder la figure.
Pour un fichier du type pdf l’extension est .pdf, .jpg pour un fichier du
type jpeg, .ps pour un fichier postscript, etc.
On utilise la commande :
∈ [−5, 5] :
Exemple :
On veut décomposer la fenêtre en 4 sous-fenêtres et tracer pour
= ,
=
- dans la 1ère fenêtre, la fonction
/
=
- dans la 2 ème
fenêtre, la fonction ,
0
=
- dans la 3ème fenêtre, la fonction ,
1
- dans la 4ème fenêtre, la fonction ,
Réponse :
>> subplot(2,2,1), plot(x,x), xlabel('x'), ylabel('y'),
title('Titre 1')
>> subplot(2,2,2), plot(x,x.^2), xlabel('x'), ylabel('y'),
title('Titre 2')
>> subplot(2,2,3), plot(x,x.^3), xlabel('x'), ylabel('y'),
title('Titre 3')
>> subplot(2,2,4), plot(x,x.^4), xlabel('x'), ylabel('y'),
title('Titre 4')
Et voici le résultat :
21
D’autres commandes du graphique
>> grid on
>> axis(‘square’)
7.2 Graphisme en 3D
Pour tracer une fonction 3D : 2 = 3 , ∈ [4, ] et ∈ [5, 6] , on
commence par définir le pavé [4, ] × [5, 6] par les commandes :
pour
22
On veut tracer la surface d’équation 2 = 8 ∈ [−2, 2] et ∈ [−2, 2],
Exemple :
9 : ;< :
On peut aussi tracer les courbes de niveau d’une fonction de 2 variables par la
commande :
>> contour(X,Y,Z)
23
Enfin, on peut aussi décider de tracer des courbes de niveau en utilisant des
barres de couleurs. Il suffit d’utiliser les commandes suivantes :
>> contourf(X,Y,Z,n)
>> colorbar
Exemple :
Réponse :
>> x=-1:0.1:1;
>> y=-1:0.1:1;
>> [X,Y]=meshgrid(x,y);
>> Z=(X-1).^2 + 10*(X.^2-Y).^2;
>> contourf(X,Y,Z,20)
>> colorbar
Voici le résultat :
24
8. Programmer sous Matlab
Les programmes sous Matlab sont écris sous forme de fonctions.
Pour définir une fonction nommée ‘nomfonct’, utilise l’éditeur Matlab des
programmes. La structure d’une fonction est la suivante :
function [sortie1, sortie2, …] = nomfonct(entrée1, entrée2, …)
Instructions
end
où
entrée1, entrée2, ... désignent les variables d’entrées pour la fonction, ils sont en
fait les données de la fonction.
sortie1, sortie2, … sont les sorties de la fonction, ils sont les résultats que va
produire l’exécution de la fonction nomfonct.
Le fichier dans lequel est sauvegardé la fonction doit avoir le même nom que la
fonction, ici ‘nomfonct.m’.
Pour une fonction produisant une seule sortie : sortie, on la définit comme suit :
function sortie = nomfonct(entrée1, entrée2, …)
Exemple 2 :
Dans l’exemple qui suit, on définit une fonction norme qui calcule la norme d’un
vecteur u. Les lignes qui suivent doivent être enregistrées dans un fichier de
nom ‘norme.m’.
function n = norme(u)
n = sqrt(dot(u,u));
end
Exemple d’exécution dans la fenêtre de commandes :
>> u=[1 1];
>> n=norme(u)
n =
1.4142
Exemple 2 :
25
function y = f(x)
y = x^2 + 5*x – 1 ;
end
Exemple d’exécution :
>> f(1)
ans =
5
>> f(3)
ans =
23
26
La boucle for
La boucle for est utilisée pour exécuter une séquence d’instructions d’une
manière répétée. Elle consiste à effectuer une boucle pour les valeurs d’un
indice, incrémenté à chaque itération, variant entre deux bornes données.
Syntaxe :
for i = p : q
Séquence d’instructions
end
où
Exemple d’utilisation :
retourne la somme S = 1 + 2 + 3 + ⋯ + n.
On veut écrire une fonction ‘sommesuite’ qui prend en entrée un entier n et
Exemple d’exécution :
>> S=sommesuite(3)
S =
6
>> S=sommesuite(10)
S =
55
>> S=sommesuite(100)
S =
5050
27
Exemple 2 :
Exemple d’exécution :
>> exponentiel(0)
ans =
1
>> exponentiel(2)
ans =
7.3556
>> exponentiel(3)
ans =
19.4125
L’instruction while
Comme pour la boucle for, l’instruction while permet de répéter la même instruction
un certain nombre de fois en faisant varier un paramètre.
Syntaxe :
while (condition)
Séquence d’instructions
end
Ici la séquence d’instructions est répétée tant que la condition
(condition) est vérifiée.
Exemple d’utilisation :
28
Voici la structure du programme :
Nom du programme « sommesuite.m »
function S = sommesuite(n)
S = 0;
i=1;
while (i <= n)
S = S + i;
i = i + 1;
end
end
L’instruction if
L’instruction if permet d’orienter l’exécution des instructions en fonction de la
valeur logique d’une condition ou plusieurs conditions. Ses syntaxes générales
sont :
Syntaxe 1 : lorsqu’on a une seule condition
if (condition)
séquence d’instructions
end
Exemple d’utilisation :
29
On va écrire une fonction ‘plusgrad’ qui affiche le plus grand de deux
nombre a et b.
Nom du programme « plusgrand.m »
function plusgrand(a,b)
if (a < b)
disp('le plus grand est : ')
disp(b)
elseif (a > b)
disp('le plus grand est : ')
disp(a)
else
disp('Nombres égaux')
end
end
30