Programmation Matlab Recherche
Programmation Matlab Recherche
Programmation Matlab Recherche
TAOUSSI Mohammed
[email protected]
2019 - 2020
Initiation au logiciel MATLAB EST - Fès
1. Introduction
Matlab « abréviation de MATtrix LABoratory », est un logiciel qui a été 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, par exemple, la visualisation d’objets mathématiques
complexes. 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 plus élevé,
un langage compilé comme le C++ ou le fortran, est mieux adapté.
2. Généralités
2.1. Lancement de Matlab
L’interface Matlab se compose d’une fenêtre principale divisée en sous-fenêtres :
Historique (Command
Aide du fichier sélectionné
History) des dernières
(si elle existe)
commandes
ans = ans =
L’affichage
5 6
Si on rentre des commandes erronées, Matlab nous l’indique par un message d’erreur :
>> 2*
2*
|
Error : Expression or statement is incomplete or incorrect.
>>
>> ax
Undefined function or varaible ‘ax’
Les touches [↑] et [↓] : permettent de naviguer parmi les dernières commandes
effectuées, ce qui peut être utile si l’on commet une erreur et qu’on veut éviter de taper à
nouveau toute la commande.
2.2. Commandes et calculs de base
Matlab possède de nombreuses fonctions prédéfinies utiles en mathématiques que nous allons
étudier au cours de ces travaux pratiques. Exemple :
>> pi >> cos (pi/3) >> log (1.5) >> j^2
ans = ans = ans = ans =
3.1416 0.5000 0.4055 -1
Il peut parfois être utile de stocker une valeur dans une variable pour l’utiliser plus tard.
L’affectation d’une variable en Matlab se fait au moyen du signe [=]. Le nom d’une variable doit
commencer par une lettre (majuscule ou minuscule, sans accent) puis peut contenir des lettres
(même remarque), des chiffres et des caractères soulignés [ _ ]. Le nom peut contenir au
maximum 31 caractères. La valeur d’une variable peut être un nombre, une chaîne de caractères
ou un tableau. Exemple :
>> A = 21 >> a = 12.24 >> A = ‘Bonjour’
A= ans = ans =
21 12.2400 Bonjour
On peut évidemment faire des calculs avec des variables. Le résultat d’un calcul est, par défaut,
stocké dans une variable nommée « ans ». Celle-ci peut être changée pour n’importe quelle autre
variable. Par défaut, Matlab affiche le résultat de la dernière opération. Cet affichage peut être
supprimé en terminant votre commande par la touche [ ;]. Plusieurs commandes peuvent être
rentrées sur une même ligne en les séparant soit par [,] soit par [ ;]. Exemple :
L’onglet Workspace donne une alternative graphique à la commande whos. En double cliquant
sur une variable on peut voir sa valeur et même la modifier. Pour effacer complètement une
variable, il suffit de rentrer la commande clear suivie du nom de la variable. Pour tout effacer,
clear all.
2.5. Aide
Matlab possède un grand nombre de fonctions et commandes. On ne pourra pas toutes les traiter
en détail.
- La commande help permet d’obtenir l’information en détail (nombre de paramètres d’une
fonction, valeur de retour, etc), il suffit de rentrer help suivie par le nom de la commande.
- La commande lookfor est très utile. Elle permet de chercher les fonctions par mots clefs.
Exemple : lookfor XYZ renvoie toutes les fonctions qui contiennent XYZ dans la première ligne de
leur descriptif.
2.6. Sauvegarde
Le Workspace : On peut sauver l’état de la session en cours dans un fichier .mat. Pour
cela, dans la barre d’outils, dans l’onglet Variable cliqué sur Save Workspace, et vous
choisissez l’emplacement et le nom de votre fichier. Matlab sauvegarde ainsi le nom et la
Matlab propose des commandes pour créer certaines matrices particulières très simplement.
Pour plus d’information, lire le help de chaque fonction.
Commande Description
ones(n,m) Matrice de taille n × m ne contenant que des 1.
zeros(n,m) Matrice de taille n × m ne contenant que des 0.
eye(n,m) Matrice de taille n × m contenant des 1 sur la première diagonale et des 0 ailleurs.
rand(n,m) Matrice de taille n × m contenant des nombres aléatoires.
diag(v) Matrice diagonale où les éléments de la diagonale sont les composantes du
vecteur v.
Tableau1 : Commandes pour créer des matrices
3.2. Accès et modifications
On présente dans ce paragraphe diverses méthodes pour accéder et modifier les éléments d’une
matrice. Dans la table qui suit :
- A désigné un tableau de taille quelconque.
- k et l sont des nombres entiers.
- v est une liste.
- M une matrice.
Commande Description
A(k,l) Renvoie l’élément se trouvant à la kème ligne et la lème colonne.
A(k) Renvoie le kème élément d’une matrice. En Matlab, les éléments d’une matrice de
taille n × m sont indexés de 1 à nm de haut en bas et de gauche à droite.
Exemple 2 :
>> A = [1 2 3 4; 5 6 7 8] >> A([1 3 5])
A= ans =
1 2 3 4 1 2 3
5 6 7 8 >> A([1; 3; 5])
>> A(2,4) ans =
ans = 1 2 3
8 >> A([1 3;4 6])
>> A(2,:) ans =
ans = 1 2 6 7
5 6 7 8
>> A(:,3)
ans =
3
7
Pour modifier les éléments d’une matrice, on utilise les mêmes commandes que ci-dessus. On
ajoute à la commande le signe [=] et la nouvelle valeur. Exemple :
>> A(2,3) = 0 >> A([1 3 5]) = [-1 -1 -1] >> A(:,4) = [10 20]
A= A= A=
1 2 3 4 -1 -1 -1 4 -1 -1 -1 10
5 6 0 8 5 6 0 8 5 6 0 20
A’ Transposition et conjugaison.
A.’ Transposition ; A.’ = A’ dans le cas où A est réelle.
B/A Le résultat est un tableau X tel que XA = B. Si A est inversible, alors X = BA -1 ; nb.
col. A doit être le même que nb. col. B.
A\B Le résultat est un tableau X tel que AX = B. Si A est inversible, alors X = A−1B ; nb.
lign. A doit être le même que nb. lign. B.
A./B Division terme à terme des éléments de A par ceux de B ; A et B doivent avoir le
même format.
A.\B Division terme à terme des éléments de B par ceux de A ; A et B doivent avoir le
même format.
A/c Division des éléments de A par c.
Tableau3 : Opérations avec des matrices
5. Graphiques
5.1. Courbes dans le plan
Etant donné deux vecteurs de même taille, x et y, la fonction plot(x,y) trace le graphe de y en
fonction de x. En fait Matlab relie les points de coordonnées (x(k), y(k)) pour 1 ≤ k ≤ length (x).
En prenant un grand nombre de points dans le vecteur x et en définissant ensuite y = f(x) pour
une certaine fonction f, la fonction plot(x,y) nous donnera le graphe de la fonction f. Exemple :
>> x = [0:0.01:4*pi];
>> y = sin(x);
>> plot(x,y)
Pour avoir les deux courbes dans la même fenêtre, il existe deux méthodes équivalentes :
1- Soit avec les commandes hold on et hold off. Exemple :
M. TAOUSSI Filière Systèmes Embarqués
10
Initiation au logiciel MATLAB EST - Fès
>> x = [0:0.01:4*pi] ;
>> y = sin(x);
>> z = cos(x);
>> hold on, plot(x,y), plot(x,z), hold off
>> x = [0:0.01:4*pi] ;
>> y = sin(x);
>>plot(x,y), axis equal off
Les couleurs et le style du tracé : peuvent également être modifiés. Pour cela, il suffit d’ajouter
à plot une chaîne de caractères spécifiant le style ; voir help plot pour toutes les possibilités.
M. TAOUSSI Filière Systèmes Embarqués
11
Initiation au logiciel MATLAB EST - Fès
>> x = [0:0.1:4*pi];
>> y=sin(x);
>> z=cos(x);
>> plot(x,y,'ro',x,z,'b*')
MATALB fourni d’autres fonctions de graphisme 2D adaptées à des cas de tracés spécifiques. On
reporte ici quelques-unes d’elles :
Commande Description
semilogx échelle logarithmique pour l’axe des x
semilogy échelle logarithmique pour l’axe des y
loglog échelle logarithmique pour les deux axes
area trace la courbe avec une aire au-dessous
errorbar trace la courbe avec des barres d’erreurs
line trace une ligne dans les axes courants (2D & 3D)
bar trace les valeurs en barres vert. ou horiz.
hist pour les histogrammes
pie pour les tracés en secteurs (portions)
5.6. Graphiques 3D
Les courbes 3D : Pour la représentation des courbes tridimensionnelles, la fonction plot3
constitue l’extension de plot. Exemple : le tracé de la fonction z = (2 - x2 ) (2 - y2) sur la
diagonale du carré [-2, 2] s’obtient par :
>> x = [-2:0.1:2];
y = x; % définie la diagonale
>> z = (2-x.^2).*(2-y.^2); % évalue la fonction
>>plot3(x, y, zeros(1,length(x)), x, y, z, 'LineWidth',1.5)
>>grid on
>>xlabel('x')
>>ylabel('y')
>>zlabel('z')
Les surfaces 3D : Dans la représentation tridimensionnelle des surfaces, les fonctions mesh
et surf sont les analogues de la fonction plot. Les surfaces sont définies dans MATLAB par
trois matrices x,y,z dont les composantes sont des coordonnées dans l’espace des points
deux matrices carrées X et Y qui définissent le domaine de calcul de z, on utilisera pour ceci la
fonction meshgrid. La fonction z est ensuite évaluée et les données sont stockées dans Z. On
utilise ensuite la fonction mesh pour dessiner la surface représentative de la fonction.
>> x = -pi:pi/10:pi;
>> y = x;
>> [X,Y] = meshgrid(x, y);
>> Z = cos(X.^2+Y.^2)./(X.^2+Y.^2);
>> mesh(X,Y,Z)
>> xlabel('angle x= -\pi : \pi')
>> ylabel('angle y= -\pi : \pi')
>> title('cos (x^2+y^2)/(x^2+y^2)')
6. Les polynômes
MATLAB représente un polynôme sous forme d'un tableau de ses coefficients classés dans l'ordre
des puissances décroissantes.
Saisie d'un polynôme : Le polynôme P d'expression : P(x) = x2−2x + 5, est représenté par
le tableau à une dimension suivant :
>> P = [1 -2 5]
P=
1 -2 5
Racines d'un polynôme : On peut déterminer les racines des polynômes P à l'aide de la
fonction roots. Exemple :
>> roots(P)
ans =
1.0000 + 2.0000i
1.0000 - 2.0000i
Détermination d'un polynôme à partir de ses racines : On peut aussi déterminer les
coefficients d'un polynôme à partir de ses racines en utilisant la fonction poly.
La commande fplot : Utilisée avec la commande polyval, la commande fplot permet de tracer le
graphe de la fonction polynômiale P sur un intervalle [xmin ,xmax] donné. La syntaxe de
l'instruction est : fplot(@(x) polyval(P,x),[x_min , x_max])
7. Entrées – Sorties
7.1. Lecture
La commande permet de demander à l'utilisateur d'un programme de fournir des
input : données.
La syntaxe est : - var = input(' une phrase ')
- MATLAB attend que l'utilisateur saisisse une donnée au clavier.
- Cette donnée peut être une valeur numérique ou une instruction
MATLAB.
- Un retour chariot provoque la fin de la saisie.
- Une valeur numérique est directement affectée à la variable var.
Remarque :
Il est possible de provoquer des sauts de ligne pour aérer le présentation en utilisant le symbole
\n de la manière suivante : var = input('\n une phrase : \n ') Sous cette forme il est impossible
M. TAOUSSI Filière Systèmes Embarqués
15
Initiation au logiciel MATLAB EST - Fès
d'avoir une donnée de type chaîne de caractères dans la mesure où MATLAB essaie d'interpréter
cette chaîne de caractères comme une instruction. Si l'on souhaite saisir une réponse de type
chaîne de caractères on utilise la syntaxe : var = input(' une phrase ','s').
7.2. Ecriture
Affichage simple
La commande disp : permet d'afficher un tableau de valeurs numériques ou de caractères. La
commande disp se contente d'afficher le tableau sans écrire le nom de la variable ce qui peut
améliorer certaines présentations. L'autre façon d'afficher un tableau est de taper son nom.
- On utilise fréquemment la commande disp avec un tableau qui est une chaîne de caractères pour
afficher un message. Par exemple : disp('Calcul du déterminant de la matrice A').
- On utilise également la commande disp pour afficher un résultat. Par exemple : disp(['Le
déterminant de la matrice A vaut ', num2str(det(A))])
Remarque :
L'usage de la commande disp est alors un peu particulier. En effet un tableau doit être d'un type
donné, les éléments d'un même tableau ne peuvent donc être des chaînes de caractères et des
valeurs numériques. On a donc recours à la commande num2str (<<number to string >>) pour
convertir une valeur numérique en une chaîne de caractères. Attention, si la chaîne de caractères
contient une apostrophe il est impératif de doubler l'apostrophe.
Impressions dirigées par format
La commande permet l'impression de variables selon un modèle donné. Un modèle
sprintf : d'édition se présente sous la forme du symbole pourcent (%) suivi
d'indications permettant de composer le contenu du champ à imprimer,
en particulier sa longueur en nombre de caractères.
La syntaxe est : sprintf(format, variables)
- variables est le nom des variables à imprimer suivant le modèle
d'édition spécifié dans format.
- format est le format d'édition. Il s'agit d'une chaîne de caractères
contenant les modèles d'éditions des variables à imprimer.
- Si on efface toutes les variables de la mémoire, Matlab ne connait plus la variable k. Exemple :
>> clear all
>>k
Undefined function or variable 'k'.
- Si l'on charge le fichier kfile, la variable k est de nouveau présent dans l'espace de travail.
>> loadkfile
>>k
k=
10 20 30
Nom de fichier
Exécuter un script
Pour exécuter un script, dans la fenêtre de commande de MATLAB, il suffit de mettre son nom
après le prompt ou de cliquer sur la flèche verte de l’éditeur (Run). L'exécution de ce script
permet de tracer la courbe de parabole suivante :
>> courbe1
Lorsqu’on sauvegarde ce programme, MATLAB propose de donner le même nom que cette
fonction. Il est préférable de garder ce nom. Cet exemple sera ainsi stocké dans un fichier
appelé randint.m. Pour invoquer une fonction, il suffit de l'appeler suivant la syntaxe suivante :
resultat = nom_fonction(liste des arguments d'appel)
L'exemple suivant génère un vecteur aléatoire d'entiers, nommé "nba", de longueur 10 et dont
toutes les valeurs sont comprises entre 0 et 100. Par utilisation de la fonction randint.m :
>> nba = randint(10,100)
nba =
82 91 12 92 63 9 28 55 96 97
Remarque :
Les fonctions MATLAB peuvent donner en retour plusieurs arguments et de différents types.
Contrairement aux langages classiques.
8.4 Structures de contrôle
MATLAB dispose des instructions de contrôle suivantes : if, switch, for et while. La syntaxe de
chacune de ces instructions est semblable à celles des langages classiques. Il est important de
savoir que beaucoup d'opérations nécessitent ces instructions dans des langages classiques tels
que C et Fortran, alors que dans MATLAB, on peut s'en affranchir. Les opérations sur les matrices
(addition, multiplication, etc.) sont les exemples les plus évidents.
8.4.1 Instructions alternatives
L’instruction: if - elseif - else
La syntaxe est la suivante :
if(test)
commandes
else
Autres commandes
End
On peut également imbriquer des if. . . else les uns dans les autres à l’aide de l’instruction elseif.
Exemple : Calculer, à l'aide de la boucle for, la somme des n premiers entiers naturels.
Fichier nsomme.m
%Somme des n premiers entiers naturels
n= 10;
s=0;
for i=1:n
s = s+i;
end
s
Résultat :
>> nsomme
L'instruction while
while conditions
instructions
end
Exemple : Afficher le plus petit entier naturel n tel que 2^n est supérieur ou égal à un nombre
donné x. fichier ppn_x.m
%Le plus petit entier naturel n tel que 2^n >=x.
x = 15;
n = 0;
while 2^n < x
n = n+1;
end
n
Résultat :
>> ppn_x
n=
4
8.5 Opérateurs
Opérateurs de base : Ceux-ci agissent sur les scalaires et les matrices. Dans le cas matriciel,
les dimensions des matrices doivent s’y prêter !
+ Addition
- Soustraction
* Multiplication
/ Division
\ Division à gauche
^ Elévation à une puissance
Remarque : La division à gauche A\B donne le résultat de l’opération A-1B (utilisée pour
résoudre un système linéaire).
Opérateurs "élément par élément" : ils s'utilisent dans le cas matriciel. Là encore, les
dimensions des matrices (ou l'orientation dans le cas de vecteurs) doivent correspondre.
.* Multiplication élément par élément
./ Division élément par élément
.^ Elévation à une puissance élément par élément
Opérateurs relationnels
Opérateurs logiques
Les expressions relationnelles peuvent être combinées en utilisant les opérateurs logiques
suivants :
& ET logique (AND)
| OU logique (OR)
~ NON logique (NOT)
xor OU exclusif (XOR)
Ces opérateurs sont appliqués sur les matrices élément par élément. Les opérateurs logiques ont
une priorité plus faible que les opérateurs relationnels, qui à leur tour ont une priorité plus faible
que les opérateurs arithmétiques.
8.6. Instructions :
Instructions mathématiques de base :
Celles-ci s'appliquent aux scalaires comme aux matrices. Dans le cas matriciel, elles s'appliquent
à chaque élément de la matrice.
Sqrt(.) Racine carrée abs(.) Valeur absolue ou module
exp(.) Exponentielle angle(.) Phase
log(.) Logarithme naturel conj(.) Conjugaison complexe
log10(.) Logarithme décimal imag(.) Partie imaginaire
log2(.) Logarithme de base 2 Isreal(.) Vrai si réel
Instructions polynomiales :
conv(.) Produit de polynômes et produit de convolution
deconv(.) Division polynomiale et déconvolution
polyval(.) Calcul des valeurs d'un polynôme
roots(.) Racines d'un polynôme
poly(.) Définition d’un polynôme à partir des racines
Instructions statistiques :
min(.) Valeur minimale xcov(.) Fonction d'auto ou d’intercovariance
max(.) Valeur maximale xcorr(.) Fonction d'auto ou d’intercorrélation
mean(.) Valeur moyenne psd(.) Estimateur de la densité spectrale de puissance
median(.) Valeur médiane hist(.) Histogramme
std(.) Écart-type rand Matrice aléatoire uniforme
cov(.) Covariance randn Matrice aléatoire gaussienne
Instructions graphiques :
plot(.) Graphe simple grid Grille de graduation
subplot(.) Plusieurs graphes sur une figure hold Maintien du graphe
stem(.) Représentation par impulsions axis(.) Gestion des axes
bar(.) Représentation type histogramme xlabel(.) Légende abscisses
stairs(.) Représentation en escalier ylabel(.) Légende ordonnées
figure(.) Nouvelle figure title(.) Titre de la figure
clf Effacer la figure courante legend(.) Légende de la figure
close(.) Fermer la figure semilogx(.) Échelle log sur les abscisses
mesh(.) Graphe 3D semilogy(.) Échelle log sur les ordonnées
polar(.) Graphe en coordonnées polaires loglog(.) Échelle log sur les 2 axes
Instructions de contrôle :
break Termine l’exécution d’une boucle
continue Passe à l’itération suivante en sautant les instructions suivantes dans une boucle
else Sinon, utilisé avec if
elseif Sinon si, utilisé avec if
end Termine for, if et while
error(.) Termine un programme et retourne un message d’erreur
for Répétition
if Instruction conditionnelle
otherwise Sinon, utilisé avec switch
pause Arrêt momentané d’un programme (attente d’appui sur une touche)
return Retour à la fonction appelante ou au clavier
switch Branchement conditionnel
while Tant que