Introduction
MATLAB est un logiciel commercial de calcul interactif. Il permet de r´ealiser des
simulations num´eriques bas´ees sur des algorithmes d’analyse num´erique. peut donc ˆetre
utilis´e pour la r´esolution approch´ee d’´equations diff´erentielles, d’´equations aux d´eriv
´ees partielles ou de syst`emes lin´eaires, etc...
L’objectif de ces s´eances Matlab est double : la connaissance de ce logiciel est en soi
indispensable parce qu’il est de plus en plus utilis´e dans l’industrie et les banques pour d
´evelopper des prototypes de logiciels et tester de nouveaux algorithmes. Tous les ans entre
vingt et trente pour cent des ´etudiants du DESS utilisent Matlab pendant leur stage.
Ensuite son apprentissage va passer par la mise en pratique des algorithmes d’analyse num
´erique ´etudi´es plus th´eoriquement dans le reste du module.
Pour cela on r´ealisera au cours des s´eances un projet directement inspir´e d’un cas concret
sch´ematisant un probl`eme industriel. Signalons au passage que des logiciels en
shareware/freeware ´emulent Matlab de mani`ere de plus en plus satisfaisante. Leur
utilisation permet de palier l’inconv´enient principal du cout ˆ de la licence.
Présentation du l’interface MATLAB :
Partout dans le monde, des millions d’ingénieurs et de scientifiques utilisent MATLAB pour analyser et
concevoir les systèmes et produits de demain. MATLAB est présent dans des systèmes automobiles de
sécurité active, des véhicules spatiaux, des appareils de surveillance médicale, des réseaux électriques
intelligents et des réseaux mobiles LTE. Il est utilisé dans les domaines de l’apprentissage automatique, le
traitement du signal, la vision par ordinateur, les communications, la finance computationnelle, la
conception de contrôleurs, la robotique et bien plus.
Mathématiques, graphiques, programmation
La plate-forme MATLAB est optimisée pour résoudre les problèmes scientifiques et techniques. Le langage
MATLAB, basé sur les matrices, est le moyen le plus naturel au monde pour exprimer les mathématiques
computationnelles. Les graphiques intégrés permettent de visualiser facilement les données afin d’en
dégager des informations. Grâce à la vaste bibliothèque de boîtes à outils prédéfinies, vous pouvez
commencer directement par les algorithmes essentiels à votre domaine. L’environnent bureau encourage
l’expérimentation, l’exploration et la découverte. Les outils et les fonctionnalités MATLAB sont tous testés
rigoureusement. Ils sont conçus pour fonctionner conjointement.
Adoption, intégration, déploiement
MATLAB accompagne vos idées au-delà du bureau. Vous pouvez analyser des ensembles de données plus
vastes et étendre votre utilisation à des clusters et des clouds. Le code MATLAB peut être intégré à d’autres
langages, ce qui vous permet de déployer des algorithmes et des applications au sein de systèmes Web,
d’entreprise et de production.
Principales fonctionnalités
Langage de haut niveau pour le calcul scientifique et technique;
Environnement bureau pensé pour l’exploration itérative, la conception et la résolution de
problèmes;
Graphiques destinés à la visualisation de données et outils conçus pour créer des tracés
personnalisés;
Applications dédiées à l’ajustement de courbes, la classification de données, l’analyse de signaux et
bien d’autres tâches spécialisées;
Boîtes à outils additionnelles conçues pour répondre à de nombreux besoins spécifiques aux
ingénieurs et aux scientifiques;
Outils permettant la création d’applications avec interface utilisateur personnalisée;
Interfaces vers C/C++, Java, .NET, Python, SQL, Hadoop et Microsoft Excel;
Options de déploiement libre de droits permettant de partager des programmes MATLAB avec les
utilisateurs finaux.
Pourquoi opter pour MATLAB ?
MATLAB est le logiciel le plus accessible et le plus productif conçu pour les ingénieurs et les scientifiques.
Pour vos tâches d’analyse de données, de développement d’algorithmes et de création de modèles,
MATLAB vous fournit un environnement qui encourage l’exploration et la découverte. MATLAB associe
un langage haut niveau à un environnement bureau élaboré pour les flux de travail itératifs scientifiques et
techniques.
Les vecteurs
Définir un vecteur
On définit un vecteur ligne en donnant la liste de ses éléments entre crochets ([ ]). Les éléments sont séparés
au choix par des espaces ou par des virgules. On définit un vecteur colonne en donnant la liste de ses
éléments séparés au choix par des points virgules (;) ou par des retours chariots (touche Entrée/Enter). On
peut transformer un vecteur ligne x en un vecteur colonne et réciproquement en tapant x' (' est le symbole de
transposition). Il est inutile de définir la longueur d'un vecteur au préalable. Cette longueur sera établie
automatiquement à partir de l'expression mathématique définissant le vecteur ou à partir des données. On
peut obtenir la longueur d'un vecteur donné grâce à la commande length. Un vecteur peut également être
défini << par blocs >> selon la même syntaxe. Si par exemple x1, x2 et x3 sont trois vecteurs (on note x1, x2
et x3 les variables MATLAB correspondantes), on définit le vecteur bloc (x1 | x2 | x3 ) par l'instruction X =
[x1 x2 x3].
>> x1 = [1 2 3], x2 = [4,5,6,7], x3 = [8; 9; 10]
x1 =
1 2 3
x2 =
4 5 6 7
x3 =
8
9
10
>> length(x2), length(x3)
ans =
4
ans =
3
>> whos
Name Size Bytes Class
x1 1x3 24 double array
x2 1x4 32 double array
x3 3x1 24 double array
Grand total is 10 elements using 80 bytes
>> x3'
ans =
8 9 10
>> X = [x1 x2 x3']
X=
1 2 3 4 5 6 7 8 9 10
>>
Les éléments d'un vecteur peuvent être manipulés grâce à leur indice dans le tableau. Le k-ieme élément du
vecteur x est désignée par x(k). Le premier élément d'un vecteur a obligatoirement pour indice 1. En
pratique ceci impose de faire des translations d'indices si par exemple on souhaite définir une suite
(x0 , x1 , ... , xn). Le terme x0 de la suite correspondra à l'élément x(1) du vecteur et le terme xN à
l'élément x(N+1). Il est possible de manipuler plusieurs éléments d'un vecteur simultanément. Ainsi les
éléments k à l du vecteur x sont désignés par x(k:l). On peut également manipuler facilement les éléments
d'un vecteur dont les indices sont en progression arithmétique. Ainsi si l'on souhaite extraire les éléments k,
k+p, k+2p,..., k+Np = l, on écrira x(k:p:l). Plus généralement, si K est un vecteur de valeurs
entières, X(K) retourne les éléments du vecteur X dont les indices sont les éléments du vecteur K.
Reprenons l'exemple précédent.
>> X(5)
ans =
5
>> X(4:10)
ans =
4 5 6 7 8 9 10
>> X(2:2:10)
ans =
2 4 6 8 10
>> K = [1 3 4 6]; X(K)
ans =
1 3 4 6
>>
Il est très facile de définir un vecteur dont les composantes forment une suite arithmétique. Pour définir un
vecteur x dont les composantes forment une suite arithmétique de raison h, de premier terme a et de dernier
terme b, on écrira x = a:h:b. Si a-b n'est pas un multiple de h, le dernier élément du vecteur x sera a +
Ent((a-b)/h) h où Ent est la fonction partie entière. La commande linspace permet de définir un vecteur x de
longueur N dont les composantes forment une suite arithmétique de premier terme a et de dernier
terme b (donc de raison (a-b)/N). Les composantes du vecteur sont donc linéairement espacés. La syntaxe
est x = linspace(a,b,N).
>> x = 1.1:0.1:1.9
x=
Columns 1 through 7
1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 8 through 9
1.8000 1.9000
>> x = 1.1:0.2:2
x=
1.1000 1.3000 1.5000 1.7000 1.9000
>> x = linspace(1.1,1.9,9)
ans =
Columns 1 through 7
1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 8 through 9
1.8000 1.9000
>>
Vecteurs spéciaux
Les commandes ones, zeros et rand permettent de définir des vecteurs dont les éléments ont respectivement
pour valeurs 0, 1 et des nombres générés de manière aléatoire.
ones(1,n) : vecteur ligne de longueur n dont tous les éléments valent 1
ones(m,1) : vecteur colonne de longueur m dont tous les éléments valent 1
zeros(1,n) : vecteur ligne de longueur n dont tous les éléments valent 0
zeros(m,1) : vecteur colonne de longueur m dont tous les éléments valent 0
rand(1,n) : vecteur ligne de longueur n dont les éléments sont générés de manière aléatoire entre 0 et 1
rand(m,1) : vecteur colonne de longueur m dont les éléments sont générés de manière aléatoire entre 0 et 1
Les matrices
Définir une matrice
On a déjà vu que l'on définissait la matrice
en tapant A = [ 1 3; 4 2 ]. D'une façon générale, on définit une matrice en donnant la liste de ses éléments
entre crochets. Signalons que MATLAB admet d'autres façons d'écrire les matrices. Les éléments d'une
ligne de la matrice peuvent être séparés au choix par un blanc ou bien par une virgule (,). Les lignes quant à
elles peuvent être séparées au choix par le point-virgule (;) ou par un retour chariot. Par exemple, on peut
aussi écrire la matrice A de la manière suivante,
>> A = [1,3;4,2]
A=
1 3
4 2
>> A = [1 3
4 2]
A=
1 3
4 2
>> A = [1,3
4,2]
A=
1 3
4 2
>>
Un élément d'une matrice est référencé par ses numéros de ligne et de colonne. A(i,j) désigne le i-ième
élément de la j-ièmeligne ligne de la matrice A. Ainsi A(2,1) désigne le premier élément de la deuxième
ligne de A,
>> A(2,1)
ans =
4
>>
La commande size permet d'obtenir les dimensions d'une matrice A donnée. On peut soit obtenir de manière
séparée le nombre de lignes et de colonnes par les instructions size(A,1)et size(A,2)respectivement, soit
obtenir le nombre m de lignes et le nombre n de colonnes par l'instruction [m,n] = size(A).
On peut construire très simplement une matrice << par blocs >> . Si A, B, C, D désignent 4 matrices (aux
dimensions compatibles), on définit la matrice bloc,
par l'instruction K = [A B ; C D]. Voici un exemple de construction par blocs de la matrice
>> A11 = [35 1 6; 3 32 7; 31 9 2];
>> A12 = [26 19; 21 23; 22 27];
>> A21 = [ 8 28 33; 30 5 34];
>> A22 = [17 10; 12 14];
>> B11 = [ A11 A12; A21 A22 ]
B11 =
35 1 6 26 19
3 32 7 21 23
31 9 2 22 27
8 28 33 17 10
30 5 34 12 14
>> B12 = [ 24 25 20 15 16]';
>> B = [ B11 B12];
>> B21 = [ 4 36 29 13 18 11];
>> B = [ B ; B21]
B=
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>>
Matrices spéciales
Certaines matrices se construisent très simplement grâce à des commandes dédiées. Citons les plus utilisées:
eye(n) : la matrice identité de dimension n
ones(m,n) : la matrice à m lignes et n colonnes dont tous les éléments valent 1
zeros(m,n) : la matrice à m lignes et n colonnes dont tous les éléments valent 0
rand(m,n) une matrice à m lignes et n colonnes dont les éléments sont générés de manière aléatoire entre
:
0 et 1
Signalons que si les entiers m et n sont égaux on peut se contenter de ne spécifier qu'une seule valeur de
dimension: ones(n) est la matrice carrée de dimension n dont tous les éléments valent 1. Mentionnons enfin
la commande magic(n) qui permet d'obtenir une matrice magique de dimension n.
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
>> ones(3,2)
ans =
1 1
1 1
1 1
>> zeros(2)
ans =
0 0
0 0
>> rand(2,3)
ans =
0.4565 0.8214 0.6154
0.0185 0.4447 0.7919
>> magic(6)
ans =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>>
Manipuler des matrices
Le symbole deux-points (:) permet d'extraire simplement des lignes ou des colonnes d'une matrice. Le j-
ieme vecteur colonne de la matrice A est désigné par A(:,j). C'est simple, il suffit de traduire le symbole
deux-points (:) par << tout >>. Ainsi A(:,j) désigne toutes les lignes et la j-ieme colonne de la matrice A.
Bien entendu, la i-ieme ligne de la matrice A est désignée par A(i,:).
>> A = magic(5)
A=
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(1,:)
ans =
17 24 1 8 15
>> A(:,2)
ans =
24
5
6
12
18
>>
Si l'on souhaite échanger les colonnes 2 et 3 de la matrice A une première possibilité consiste à exécuter:
>> v = A(:,2); A(:,2) = A(:,3); A(:,3) = v;
A=
17 1 24 8 15
23 7 5 14 16
4 13 6 20 22
10 19 12 21 3
11 25 18 2 9
>>
On peut également extraire plusieurs lignes ou colonnes simultanément. Si J est un vecteur
d'entiers, A(:,J)est la matrice issue de A dont les colonnes sont les colonnes de la matrice A d'indices
contenus dans le vecteur J. De même A(J,:)est la matrice issue de A dont les lignes sont les lignes de la
matrice A d'indices contenus dans le vecteur J. D'une façon plus générale, il est possible de n'extraire qu'une
partie des éléments des lignes et colonnes d'une matrice. Si L et C sont deux vecteurs
d'indices, A(L,C)désigne la matrice issue de la matrice A dont les éléments sont les A(i,j) tels que i soit
dans L et j soit dans C.
>> A = magic(5)
A=
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> L = [1 3 5]; C = [3 4];
>> A(L,C)
ans =
1 8
13 20
25 2
>> A(1:2:5,3:4)
ans =
1 8
13 20
25 2
>>
Dans la dernière instruction, on a utilisé la forme spéciale permettant de définir un vecteur dont les
composantes sont en progression arithmétique, voir le paragraphe 2.3. Une seconde possibilité pour
échanger les lignes 2 et 3 de la matrice A consiste à exécuter:
>> J = [1 3 2 4]; A = A(:,J)
A=
17 1 24 8 15
23 7 5 14 16
4 13 6 20 22
10 19 12 21 3
11 25 18 2 9
>>
Il existe des commandes MATLAB permettant de manipuler globalement des matrices. La commande diag
permet d'extraire la diagonale d'une matrice: si A est une matrice, v=diag(A) est le vecteur composé des
éléments diagonaux de A. Elle permet aussi de créer une matrice de diagonale fixée: si v est un vecteur de
dimension n, A=diag(v) est la matrice diagonale dont la diagonale est v.
>> A=eye(3); diag(A)
ans =
1
1
1
>> v=[1:3]
v=
123
>> diag(v)
ans =
100
020
003
>>
On n'est pas obligé de se limiter à la diagonale principale ... La commande diagadmet un second
paramètre k pour désigner la k sur-diagonale (si k>0) ou la k sous-diagonale (si k<0).
>> A = [4 5 6 7 ; 3 4 5 6
2 3 4 5; 1 2 3 4]
A=
4 5 6 7
3 4 5 6
2 3 4 5
1 2 3 4
>> diag(A,1)
ans =
5
5
5
>> diag(A,-2)
ans =
2
2
>>
On construit à l'aide de la commande diagtrès simplement des matrices tridiagonales . Par exemple la
matrice correspondant à la discrétisation par différences finies du problème de Dirichlet en dimension 1
s'obtient ainsi
>> N=5;
>> A=diag(2*ones(N,1)) - diag(ones(N-1,1),1) - diag(ones(N-1,1),-1)
A=
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
>>
On dispose également de la commande tril permet d'obtenir la partie triangulaire inférieure (l pour lower)
d'une matrice. La commande triupermet d'obtenir la partie triangulaire supérieure (u pour upper) d'une
matrice.
>> A = [ 2 1 1 ; -1 2 1 ; -1 -1 2]
A=
2 1 1
-1 2 1
-1 -1 2
>> triu(A)
ans =
2 1 1
0 2 1
0 0 2
>> tril(A)
ans =
2 0 0
-1 2 0
-1 -1 2
>>
Comme pour la commande diag, les commandes triu et triladmettent un second paramètre k. On peut ainsi
obtenir la partie triangulaire supérieure (ou inférieure) à partir de la k diagonale. Ainsi,
>> tril(A,-1)
ans =
0 0 0
-1 0 0
-1 -1 0
>> tril(A,1)
ans =
2 1 0
-1 2 1
-1 -1 2
>>
On obtient la transposée de la matrice Aà coefficients réels en tapant A'. Si la matrice est à coefficients
complexes, A' retourne la matrice adjointe de A.
>> A = [0 1 2; -1 0 1; -2 -1 0]
A=
0 1 2
-1 0 1
-2 -1 0
>> A'
ans =
0 -1 -2
1 0 -1
2 1 0
>>
L’instruction conditionnelle simple (if)
La structure conditionnelle simple est basée sur l’évaluation d’une condition. Un traitement est exécuté si
cette condition logique est satisfaite ; dans le cas contraire, rien ne se passe.
La commande if simple a la structure suivante :
La commande if - Syntaxe
if condition
instructions;
end
où :
condition : une variable de type booléen ou une expression qui retourne true, false
instructions : le traitement à effectuer si la condition est vraie
La structure conditionnelle simple est basée sur l’évaluation de la condition (expression logique). Elle
permet de décider si un traitement s’exécute ou non. Donc MATLAB exécute la séquence d’instructions si
et seulement si la condition est true. Si la condition est false, alors MATLAB ignore les instructions. Dans
tous les cas, l’exécution est passée à l’instruction qui suit immédiatement le end.
À la différence de plusieurs langages de programmation, l’instruction conditionnelle en MATLAB n’utilise
pas le mot-clé then. De plus, la fin de traitement conditionné se termine par le mot-clé end et non endif.
La commande if - Exemple
Écrire un script MATLAB permettant de saisir une note et d’afficher les messages :
- Valeur invalide (note < 0)
- Valeur invalide (note > 20)
- Valeur valide (notre entre 0 et 20)
% if_simple_1
close all; clear all; clc;
note = input('Taper la note (0 à 20) : ');
if (note<0),
disp ('Valeur invalide (note < 0)');
end
if (note>20),
disp ('Valeur invalide (note > 20)');
end
if (note>= 0 & note<=20),
disp ('Valeur valide (note entre 0 et 20)');
end
Résultat :
Taper la note (0 à 20) : 2
Valeur valide (note entre 0 et 20)
Présentation de la boucle (for)
En algorithmique, la structure répétitive POUR est utilisée pour faciliter la programmation de boucles de
comptage. En MATLAB, la boucle for est plus générale et beaucoup plus puissante. C’est une structure
répétitive qui itère le même traitement un certain nombre de fois, nombre qui est connu à l’avance. Dans
cette forme de boucle, une variable nommée compteur ou variable de contrôle prend des valeurs successives
sur une liste. L’arrêt du traitement de la boucle for se réalise lorsqu’on arrive à une valeur n’appartenant pas
à la liste.
Cette forme est souvent utilisée pour exploiter les données d’une collection indexée. On en distingue
plusieurs formes.
a. La boucle for avec plage de valeurs
Ce premier type de commande for a la structure suivante :
La boucle for avec plage - Syntaxe
for compteur = valeur_initiale :valeur_finale
instructions
end
où :
compteur : une variable de type scalaire servant de compteur ou variable de contrôle
valeur_initiale : valeur initiale que va prendre compteur
valeur_finale : valeur finale que prendra compteur
instructions: le traitement à répéter
En accédant à la boucle, le compteur est initialisé à la valeur de départ ; ensuite, à chaque parcours, il est
automatiquement affecté à la valeur successive dans son domaine, jusqu’à ce qu’il atteigne la valeur finale.
Une boucle for peut être exécutée 0,1 ou plusieurs fois.
La boucle for avec plage - Exemple
Écrire un script MATLAB qui permet d’afficher tous les nombres pairs qui existent entre 1 et 10.
% for_avec_plage_1
clear all; close all; clc;
for i = 1 :10
if (mod (i,2) == 0),
fprintf (' %d ',i);
end
end
fprintf (' \n');
Résultat :
2 4 6 8 10
Conclusion
Les concepts exposés ici sont plus que suffisants pour résoudre la majorité des problèmes. Évidemment il
faut ensuite apprendre à aller chercher dans la documentation la fonction dont on a besoin, et pratiquer
régulièrement.
Le but de ce exposé était de convaincre que le MATLAB pouvait remplacer avantageusement les tableurs
pour traiter des problèmes scientifiques. Toute personne ayant un jour programmé des macros dans un
tableur verra, je l'espère, que la syntaxe MATLAB est bien plus simple, pourvu que l'on se donne la peine
d'essayer.
Rappelons que le prix d'une licence MATLAB est similaire à celui d'un tableur classique, et que des
versions bridées pour les étudiants existent (seule la taille des tableaux est limitée).
on notera que MATLAB peut s'interfacer avec des routines FORTRAN ou C externes, ou bien être appelé
depuis un programme écrit dans l'un de ces langages.
Il propose aussi des fonctions permettant d'interagir avec des cartes acquisition professionnelles, ou grand
public (telles que Arduino, Raspberry, etc).
Par ailleurs, tout le graphique MATLAB est construit sous forme de structures de données, assez faciles à
utiliser. Il est ainsi aisé de construire ses propres menus, masques de saisie, boutons et autres fioritures pour
développer des outils très conviviaux.