Académique Documents
Professionnel Documents
Culture Documents
• MATrix LABoratory
• Logiciel qui permet, de manière
interactive :
– de faire des calculs matriciels ;
– d ’analyser les données ;
– de visualiser les résultats en 2D et 3D ...
• Langage de programmation
• Toolboxes : ensemble de fonctions
(fichiers .M) développées pour des
domaines d ’applications spécifiques
• SIMULINK : interface graphique
interactive de MATLAB
L ’espace de travail :
Fonctionnement
le Workspace (1)
• Mode interactif :
Données Espace de travail
Les instructions sont exécutées au
fur et à mesure qu ’elles sont
entrées par l ’utilisateur
• Mode programme :
MATLAB exécute, ligne par ligne,
les instructions d ’un fichier .M
• Type de variables :
unique : la matrice
Historique
•1
L ’espace de travail (2) L ’espace de travail (3)
• Supprimer une (ou toutes les) variable(s) :
• Déclarer des variables : >> clear x
>> x =12.5 ; y = [1 -5 0 2] ; >> clear all
– définies et dimensionnées automatiquement
au fur et à mesure de leur déclaration • Entrer une valeur au clavier :
– stockées dans l ’espace de travail >> x = input(‘Valeur de x =’)
Valeur de x =12
• S ’informer sur les variables : x=
>> who 12
Your variables are:
x y • Afficher un texte à l ’écran :
>> whos >> disp(‘ Ceci est un test ’)
Name Size Bytes Class Ceci est un test
x 1x1 8 double array
y 1x4 32 double array >> disp([‘ x vaut ’, num2str(x)])
Grand total is 5 elements using 40 bytes x vaut 12
(ou double clic dans l’historique) >> lookfor mot-clé fournit la liste des
fonctions contenant le mot-clé.
•2
Plan
1. Vecteurs et matrices
2. La programmation MATLAB
3. Les graphiques
5. L’import/export de données
•3
VECTEURS ET MATRICES Les scalaires (1)
•4
Créer un vecteur (1) Créer un vecteur (2)
• Transposition : • Concaténation
>> v4 =[v1 v3]
>> v3=v2 ’
v4 =
v3 =
1 2 -5 -7 3
-7 3
• Vecteur vide
>> v =[ ] ;
•5
Opérations vectorielles (2) Opérations vectorielles (3)
• opérations élémentaires
– somme de vecteurs de même dimensions >> v = [1 2 -5 -7 3]
>> s = [2 1 -1]+ [1 -3 5] – somme des éléments d ’un vecteur
s= >> sum(v)
3 -2 4 ans =
– ajout d ’un scalaire -6
>> s + 2
ans = – produit des éléments d ’un vecteur
5 0 6 >> prod(v)
– produit de vecteurs de même dimensions ans =
>> p = [2 1 -1] * [1 -3 5] ’ 210
p=
– moyenne : mean(v)
-6
– médiane : median(v)
– produit élément par élément
>> [2 1 -1] .* [1 -3 5] – écart-type : std(v)
ans = – minimum : min(v)
2 -3 -5 – maximum : max(v)
•6
Les matrices spéciales (1) Les matrices spéciales (2)
200
200
UNITE = 150
100
1 1 50
0
1 1 0 0.2 0.4 0.6 0.8 1
•7
Opérations matricielles (3) Opérations matricielles (4)
•8
Les tableaux Les structures (1)
multidimensionnels Structure = regroupement de variables
• Extension à n dimensions : (champs) de type différents (chaînes,
– vecteur (1D) : 1 indice entiers ...) dans une même variable.
– matrice (2D) : 2 indices, ligne et colonne exemple : fichier des élèves d’un établissement
– tableau tridimensionnel : 3 indices, ligne, scolaire :
colonne et page Î nom
– ... Î notes
exemple : Î adresse ...
>> M1 =ones(3) ;
nom=struct(‘ch1’,{v1,v2...}, ’ch2 ’,{v1,v2
>> M2 =zeros(3) ; ...})
>> M3 =cat(3,M1,M2) ;
M3( : , : , 1) = >>eleve=struct(‘nom’,{‘paul’,’eve’,’jean’}, ’note1’,
1 1 1 {12,8,11}, ’note2’,{14,15,3})
1 1 1
1 1 1 eleve =
M3( : , : , 2) = 1x3 struct array with fields :
0 0 0 nom
0 0 0 note1
0 0 0
note2
•9
LA PROGRAMMATION Opérateurs logiques
MATLAB • == égalité
• ~= différence
• Les opérateurs logiques • <( <=) inférieur (ou égal)
• Les chaînes de caractères • >( >=) supérieur (ou égal)
• & ET logique (AND)
• Les commandes structurées • ~ NON logique (NOT)
• | OU logique (OR)
• Les scripts et les fonctions • xor OU exclusif (XOR)
• La programmation Exemple :
>> a = [1 0 0 1] ;
>> b = [1 1 0 1] ;
>> a | b
ans =
1 1 0 1
•10
L ’instruction FOR (1) L ’instruction FOR (2)
• parcours d'un intervalle
syntaxe : • On peut utiliser un incrément (pas) autre
que 1 (valeur par défaut).
for variable =debut : fin
instructions syntaxe :
.......... for variable =debut:pas:fin
instructions
end • Les bornes ne sont pas nécessairement
exemple : créer le vecteur [1 2 22 24 .... 210] des entiers.
>> x=[ ]
x= • Le pas peut être négatif.
[]
>> for n=0:10 ; x =[x 2^n] ; end
• Il est possible d ’imbriquer les boucles
ou directement
>> for n=0:10; x(n +1) =2^n; end Penser à l ’indentation !!
! bouton droit Æ smart indent
programmation matricielle ??
•11
L ’instruction IF (1) L ’instruction IF (2)
• La séquence d ’instructions intérieure • Permet de choisir entre deux options.
est exécutée si expression est vrai (=1 syntaxe
logique). if expression
syntaxe instructions 1
if expression else
instruction
........ instructions 2
instruction end
end • si expression n ’est pas vérifier alors
• expression peut être simple ou les instructions 2 sont exécutées
composée.
exemple
if (a<0 & b<0)
disp(‘ a et b négatifs ’)
end
•12
Script Fonctions (1)
• Fichier (trouvenom.m par exemple)
• Fichier (trouve.m par exemple)
contenant une suite d ’instructions
matlab. contenant une suite d ’instructions
matlab.
• Exécuté séquentiellement dans
l ’espace de travail, il accède aux
• Commence par le mot réservé
variables (locales) qui s ’y trouvent.
function.
• Pour écrire un script, utiliser l’éditeur :
>> edit • Reçoit un (ou plusieurs) paramètre(s)
%trouvenom.m d ’entrée.
%trouve les noms commençant par
%lettre • Peut renvoyer un (ou plusieurs)
liste(find(liste(:,1) == lettre),:) paramètre(s) en sortie ou n ’en
renvoyer aucun.
>> lettre = ‘d’ ;
>> trouvenom
‘didier’ ! Nom du fichier = nom de la fonction
nom = 200
‘catherine’ 150
100
•13
Fonctions (5)
Fonctions (4)
• Sous fonctions
– un fichier .M peut contenir plusieurs
• Fonctions privées fonctions
– placées dans un répertoire private – la première est la fonction primaire
– seuls les fichiers .M du répertoire parent – les suivantes sont des sous fonctions
peuvent y accéder – accessible à la fonction primaire et aux
autres sous fonctions du fichier .M
– l ’aide ne peut accéder qu’aux lignes de
REP1 commentaires de la fonction primaire
M-files11
function foncprim( ... )
M-files12 %help fonc
M-files13 instructions
REP2 x = sous_fonc( ... )
M-files21
instructions
M-files22 %%%%%%%%%%%%%%%%%%%%
private function x =sousfonc( ... )
%help sous_fonc
Fonction privée instructions
Les variables :
Programmation (1)
locales ou globales ?
• Les variables des scripts sont locales à Forme générale d ’une
l ’espace de travail application MATLAB
• Les variables des fonctions sont
locales à la fonction SCRIPT
• Une variable définie comme globale à
l ’espace de travail (ou à un script)
sera modifiable par toutes les
fonctions l ’ayant déclarée globale Fonction 1 Fonction 2 Fonction 3
function y = f2(x)
global A B C
y = A*x.^2 + B*x + C Fonctions privées
Fonction 21
et/ou
>> global A B C sous fonctions
>> A = 1 ; B = 3 ; C = -1 ; Fonction 22
>> x = -10:0.1:10;
>> y = f2(x) ;
•14
Programmation (2) Programmation (3)
• Mesure de complexité algorithmique
• Quelques recommandations – temps d ’exécution (en secondes) :
>> A = rand(200);
– Choisir des noms significatifs pour les >> tic ; inv(A ’*A) ; toc
variables et les fonctions elapsed_time =
12.4100
– Documenter les fonctions (help)
• Le profiler ( >> help profile )
– Vérifier le nombre d ’arguments d ’entrée >> profile report
(nargin) et de sortie (nargout) des
temps d ’exécution total (en secondes)
fonctions
>> profile report N
– Eviter (autant que possible !) les boucles N lignes demandant le plus de temps
for et while d ’exécution (en % du temps total)
•15
LES GRAPHIQUES Tracer une courbes 2D (1)
100
90
80
70
60
50
40
30
20
10
0
-10 -5 0 5 10
90 • Insérer du texte
80 >> gtext(‘x^2’)
70
>> gtext(‘0.5x^2 - x + 1’)
60
50
40 • Ajouter un quadrillage
30
>> grid
20
10
0
-10 -5 0 5 10
•16
Légender une courbe (2) Manipuler un graphique (1)
2 2
Tracé de x et 0.5x -x+1 • La commande zoom (2D seulement)
100
permet de ‘ zoomer ‘ sur une partie de
90
courbe avec le bouton gauche de la
80
souris (le bouton droit annule le zoom)
70
2
x
• La commande axis permet de changer
y : axe des ordonnées
60
50
les bornes de visualisation
40 syntaxe:
30 axis([xmin xmax ymin ymax])
20
2
0.5x - x + 1 • Dans les deux cas :
10
– focalisation sur une partie ‘ intéressante ’
0
-10 -5 0 5 10 de la courbe
x : axe des absisses
– Lecture précise du point d ’intersection
entre deux courbes
100
50
0
-10 -5 0 5 10
80
60
40
20
0
-10 -5 0 5 10
•17
Tracer le graphe d ’une
Histogrammes
fonction
• La commande fplot(‘ f ’,x) permet • Tracés à l ’aide de la commande hist
d ’afficher les variations de la fonction >> y = randn(1000,1) ;
f1 (enregistrée dans le fichier f1.m) sur >> hist (y, 50)
l ’intervalle x. >> title(‘ distribution normale : répartition
en 50 classes ’)
>> x =0:0.1:4*pi;
distribution normale : répatition en 50 classes
45
40
35
1
0.8
30
0.6 25
0.4 20
0.2 15
0 10
-0.2 5
-0.4
0
-3 -2 -1 0 1 2 3
-0.6
-0.8
-1
0 2 4 6 8 10 12
(par défaut N_classe = 10)
0.8
0.6
25
0.4
20
0.2
15
0
10
-0.2
5
-0.4
-0.6 0
1
-0.8 0.5 1
0 0.5
-1 0
-1 -0.5 0 0.5 1 -0.5
-0.5
-1 -1
•18
Tracer une surface (1) Tracer une surface (2)
>> x = -pi/2 : pi/30 : pi/2 ; >> colormap(‘ cool ’)
>> y=x; >> surf (X, Y, Z)
>> [X,Y] = meshgrid(x,y) ;
>> Z =sinc(X.^2 + Y.^2) ;
>> mesh(X, Y, Z)
• Exportation
– créer un fichier postcript (qu’il est
possible d’importer dans un traitement de
texte). Son nom est alors fig.ps :
print -deps fig
– sous Windows, utiliser
edit Æ copy figure
puis coller (sous Word, Powerpoint ...)
•19
LES POLYNOMES ET Les polynômes
L ’ANALYSE NUMERIQUE
• Vecteur ligne ensemble de données
• Polynômes
• Vecteur ligne polynôme de degré n
• Opérations polynomiales
p(x) = anxn + an-1xn-1 + ... + a1x + a0
• Interpolation et régression >> p =[an an-1 ... a1 a0] ;
>> length(p)
• Résolution d’équations non linéaires
ans =
• Recherche de minima n+1
2 1 -6 0
-500
y
• Division de polynômes
>> p1 = deconv(p3, p2)
-1000
p1 =
1 0 2 -1500
-10 -5 0
x
5 10
•20
Interpolation (1) Interpolation (2)
• Interpolation polynomiale au sens des • Ordre 1 : erreur σ = 0.0113
moindres carrés :
1.5
d ’interpolation : 0
-0.5
%fonction sigmoïde bruitée -5 -4 -3 -2 -1 0 1 2 3 4 5
x = -5:0.1:5 ;
mes=1./(1+exp(-x))+0.05*randn(1,length(x)) ; • Ordre 5 : erreur σ = 0.0023
%interpolation d'ordre 1 1.5
p = polyfit(x, mes, 1) ;
1
res = polyval(p,x) ;
plot(x,mes,'b+',x, res,'r',x,mes - res, 'g')
0.5
%interpolation d'ordre 5
p = polyfit(x, mes, 5) 0
res = polyval(p,x) ;
plot(x,mes,'b+',x, res,'r',x,mes -_res, 'g') -0.5
-5 -4 -3 -2 -1 0 1 2 3 4 5
0.8
expérimentaux par une courbe formée 0.6
polynomiales 0.2
-0.4
-0.8
•21
Régression linéaire Résolution d ’équations
• Détermination du modèle linéaire non linéaires
y=f(x) reliant deux séries de mesure x
et y. • Détermination des racines d’une
fonction non linéaire par la méthode de
⎡ y1 ⎤ ⎡ x1 1⎤ Newton-Raphson
⎢ y ⎥ ⎢ x 1⎥ a
yi = axi + b ⎢ . 2 ⎥ = ⎢ . 2 ⎥⎡ ⎤ Îenregistrer l’expression littérale de la
⎢ . ⎥ ⎢ . ⎥ ⎢⎣ b⎥⎦ fonction dans un fichier (foncnl.m)
⎢. ⎥ ⎢ . ⎥
⎣ yn ⎦ ⎣ x n 1⎦ Îutiliser la fonction fzero pour déterminer
y = Φθ une racine de l’équation au voisinage de x0
vecteur optimal θ = ( ΦTΦ)−1 ΦT y fzero(‘ fonc_nl ’, x0)
(au sens des moindres carrés)
Îutiliser la fonction fsolve pour déter-miner
l’ensemble des racines de l’équation dans
construction de la matrice Φ : l ’intervalle (xd, xf)
>> phi =[x’ ones(length(x),1)] ;
fsolve(‘ fonc_nl ’, xd : xf)
détermination de θ :
>> teta =nnls(phi,y’) ;
0.8
fminbnd(‘ fonc ’, xd, xf)
0.6
0.4
exemple :
0.2 >> xmin= fminbnd(‘foncnl ’,0,2)
0
-0.2
xmin =
-0.4
-3 -2 -1 0 1 2 3
0.5989
•22
Recherche de minima (2)
exemple :
function f2 =fonc2(X)
•23
IMPORT/EXPORT Fichiers .mat (1)
DE DONNEES
• Sauvegarde et restitution des données
de l’espace de travail
• Fichiers .mat syntaxe : save nom var1 var2 ... varN
• Fichiers externes >> x1 =ones(2) ; x2 =[4.5; 2.1; -6.2] ;
>> save nom
• Formats spécifiques ÎSauvegarde de toutes les variables de
l’espace de travail dans le fichier nom.mat
>> save nom x1
ÎSauvegarde de la variable x1 dans le
fichier nom.mat
>> clear all
>> load nom
>> who
Your variables are :
x1
•24
Fichiers externes (2) Fichiers textes
• Par défaut : ouverture des fichiers en • Lecture et écriture formatées
binaire.
ÎPour ouvrir un fichier texte ajouter la lettre [data, compt]
t (‘rt’, ‘wt’ ...) =fscanf(FID, format, taille)
data : vecteur colonne représentant les
2. Lecture/ecriture : fread fwrite fscanf valeurs lues
... compt : nombre d’éléments lus (facultatif)
format : format (‘%d’, ‘%c’, ‘%3.2f ’ ...) et
3. Fermeture séparateurs (‘\n’ ‘\t’ ...)
fclose(FID)
compt=fprintf(FID, format, data)
Îferme le fichier ayant pour identificateur
FID ligne=fgetl(FID)
fclose(‘ all ’) ligne : chaîne de caractères contenant la
Îferme tous les fichiers ligne courante du fichier FID
•25
Fichiers binaires (3) Formats spécifiques
• Positionnement • ASCII : fichiers textes manipulables par
un éditeur de textes et contenant des
statut =fseek(FID,offset,origine) données présentées sous formes de
statut : 0 en cas de succès,-1 encas d’échec matrice
offset : nombre d’octets au-delà de origine Î load nom
(positif ou négatif)
origine : position
• ASCII délimité (DLM = ‘ ‘, ‘,’, ’;’ ...)
Î data =dlmread(nom, DLM)
‘ bof ’ début de fichier
Î dlmwrite(nom, data,)
‘ cof ’ position courante du pointeur
‘ eof ’ fin de fichier • CSV : ASCII délimité per une virgule
statut =feof(FID) Î csvread(nom)
Î csvwrite(nom, data)
statut : 1 si la fin du fichier est atteinte, 0
autrement • WK1 : fichiers Lotus 123
Î wk1read(nom)
frewind(FID)
Î wk1write(nom, data)
Îpositionne le pointeur sur le premier octet
•26