Vous êtes sur la page 1sur 8

Matlab: introduction et quelques astuces

Sébastien Blais: sblais@sebastienblais.com


January 19, 2006

1 Introduction
Ce document se veut un peu plus qu’une introdution. Après avoir fait le tour
de quelques notions de bases, il fait un bref survol des certains points impor-
tants mais difficiles d’accès parce que négligés par la documentation de Matlab.
J’ai donc volontairement omis ce qui déjà très bien fait dans la documenta-
tion. Par exemple, taper help à l’invite de commande donne la liste de tous
les sous-répertoires contenus dans le path de Matlab avec la première ligne du
fichier contents.m qu’ils contiennent. Pour creuser un répertoire particulier,
la commande help elmat retourne par exemple le premier bloc de commen-
taires du fichier matlab\elmat\contents.m, soit la liste des fonctions dans ce
répertoire1 . Taper help triu retourne le premier bloc de commentaires du
fichier matlab\elmat\triu.m qui donne de l’aide de base sur la fonction. L’aide
graphique accessible via le menu Help/Matlab Help est plus conviviale pour des
recherches plus approfondies.

2 Types de structures de données


Quelques exemples...

Les scalaires
N=3
T=100;
1 Vous pouvez utiliser cette structure pour documenter vos propres fonctions.

1
Les matrices
A=zeros(N); % une matrice de zéros carrée N par N
B=ones(N,T); % une matrice de 1 N par M
C=eye(N); % une matrice Identité de dimension N
D=zeros(N,N,N,N); % une hyper-matrice de zéros N par N par N par
N
E=[1 2 3 4; 5 6 7 8]; % une matrice 2 par 4
F=[1,2,3,4; 5,6,7,8]; % F=E
G=[2:4] % un vecteur-ligne dont les éléments sont [2 3 4]
H=[2:0.5:4] % un vecteur-ligne dont les éléments sont [2 2.5 3 3.5 4]

C(2,2) % l’element (2,2) de la matrice C


C(2,1)=0.5; % remplace la valeur de l’élément (2,1)
C(1,2)=C(2,1);
diag(C) % une vecteur colonne contenant la diagonale de C
diag([1 2 3]) % une matrice diagonale
E(:,3) % la 3e colonne de E
F(end-1,:) % l’avant-derniere ligne de F
F(:,2:4) % les colonne 2-3-4 de F
F(:,G) % F(:,G)=F(:,2:4)
reshape(F,8,1) % un vecteur-colonne contenant F
C(4) % C(4) est le 4e élément de reshape(C,prod(size(C)),1)

Les opérations de base


A+B % Additioner A et B
A.*B % Multipliquer A et B élément par élément
A*Z % Multipliquer A et Z la matrice
A./B % Diviser A par B, élément par élément
inv(C)*A % Prémultiplier A par l’inverse de C
A.ˆ2 % Faire une matrice des éléments de A la puissance 2 (deux
faons)
A.*A
Cˆ2 % Faire le carré de la matrice C carrée (deux fao̧ns)
C*C
A’ % La transposée de A
% Appliquer les fonctions exp, sqrt (racine carrée) et log
% (naturel) x, élément par élément
y = exp(x)
y = sqrt(x)
y = log(x)

plot(x,y)% Faire la courbe de y versus x

2
Les chaı̂nes de caractères
file=’monfichier.txt’
dir=’resultats/’
xfile=[dir file]

3 Données et fichiers
Importer/stocker des donnée
Dans la plupart des cas, vous n’aurez qu’à faire cet exercice qu’une seule fois.
Tapez uiimport pour lancer l’assistant d’importation. Une fois ces données
dans la mémoire de travail, vous pourrez les stocker dans un fichier .mat, le
format standard de Matlab. Exemples:
save mesdonnees sauvegarde toutes les variables de la mémoire de travail dans
un fichier mesdonnees.mat dans le répertoire de travail, en écrasant le
fichier du même nom s’il existe.
save mesdonnees x sauvegarde seulement la variable x dans un fichier mesdonnees.mat
dans le répertoire de travail, en écrasant le fichier du même nom s’il existe.
save mesdonnees x -append ajoute/remplace seulement la variable x dans le
fichier mesdonnees.mat dans le répertoire de travail, qui doit exister.
save(’mesdonnees’,’x’,’-append’ même chose que save mesdonnees x -append
sauf qu¡il est ici possible d’utiliser une variable comme nom de fichier, ce
qui peut être utile si on veut passer le nom du fichier à une fonction.
load(’mesdonnees’) ou load mesdonnees charge en mémoire toutes les vari-
ables de mesdonnees.mat. Attention: ne pas utiliser cette forme (voir la
suivante) dans une function, son comportement semble aléatoire...
load(’mesdonnees’,’x’) ou load mesdonnees x charge en mémoire x (préférer
la première forme).
La fonction who donne la liste de variables en mémoires et whos donne leur taille.
Il est aussi possible d’obtenir la liste des variables contenues dans un fichier en
tapant whos -file mesdonnees, par exemple. On peut libérer la mémoire par
clear ou seulement détruire les variables x et y par clear x y.2
2 Les fonctions, lorsqu’elles ont été appelées, utilisent aussi de la mémoire pour accélérer

leur évaluations futures. Si les fonctions sont modifiés par l’éditeur, Matlab sait utiliser la
nouvelle version. Si elles sont modifées autrement (par un autre éditeur de texte par exemple,
ou si on récupère une vielle version de la fonction), on doit libérer la mémoire manuellement
par clear function. clear all libére tout.

3
Créer un fichier texte
La fonction diary() permet de stocker dans un fichier tout ce qui se passe à
l’écran et constitue une manière simple mais limitée de garder des résultats. On
a vu qu’omettre le ’;’ permet d’afficher les résultats à l’écran. Si l’esthétique vous
gène, vous pouvez utiliser la fonction disp(). Par exemple, disp(’La matrice
identite de taille 2 est:’);disp(eye(2)); est plus joli que ’La matrice
identite de taille 2 est:’ suivi de eye(2). La manière la plus polyvalente
de créer un fichier texte est via les fonctions fopen(),fclose() et fprintf().
En particulier, les utilisateurs de LATEXou TEXpourront créer directement des
tableaux qu’ils pourront importer tels quels pour construire leurs documents.

4
4 Quelques outils spécifiques
4.0.1 Statistiques
% Générer un vecteur aléatoire, 100x1, i.i.d. N(2,(0.2)ˆ2).
z = 0.2 * randn(100,1) + 2

% Calculer la moyenne, l’écart type, et la variance de z


mean(z)
std(z)
var(z)

% Générer un autre vecteur aléatoire, corrélé avec z


w = z + randn(100,1)

% Calculer la covariance et corrélation entre w et z


cov(w,z)
corrcoef(w,z)

% Faire le nuages de points des paires (w,z)


plot(w,z,’.’)

% Faire le histogramme de w
hist(w)
% valuer la fonction de répartition d’un aléa normal

mu = 1;
sigma = 2;
x = 2;
p = 0.5;
normcdf(x,mu,sigma)
norminv(p,mu,sigma)

% Moindres carrés ordinaire


T = 20;
K = 3;
beta = [1;2;3];
X = [ones(T,1), randn(T,2)];
sigma = 0.1;
epsilon = randn(T,1) * sigma;
y = X*beta + epsilon;

b = inv(X’*X)*X’*y
b=X\y
e = y-X*beta;
sigma2Ch = (e’*e)/(T-K)
varChb = sigma2Ch * inv(X’*X)

5
Optimisation
On doit d’abord construire la fonction à minimiser. Par exemple:
function y=f(x)
y=x*x;
Ensuite, il faut choisir l’algorithme d’optimisation. Il n’y a pas de chemin court:
les algorithmes sont standards et le choix repose sur l’analyse du problème en
question. La plupart des algorithmes nécessitent un peu de paramétrisation,
même si Matlab propose généralement des valeurs par défaut. On peut omettre
de spécifier des valeurs spécifiques en passant une matrice vide ([]) comme
paramètre.
x0 = [1]; % valeur initiale proposée
mesoptions = optimset(’LargeScale’,’off’);
mesoptions = optimset(mesoptions,’Display’,’iter’);
[x,valeur,indication,sortie] = fminunc(@f,x0,mesoptions);

5 Environnement et convivialité
Visibilité des functions
Les functions accesssibles sont celles situées directement dans le répertoires de
travail, puis celles située dans le path. La fonction which permet de savoir
qulle version de la fonction est utilisée en cas de doute. Par exemple, which
edit retourne H:\MATLAB6p5\toolbox\matlab\general\edit.m sur mon PC.
On peut modifier le path via le menu File/Set path ou à l’aide des fonctions
prévues à cet usage (help path).

Éditeur Matlab
Il est possible de lancer l’éditeur de deux maniéres. On peut taper edit à l’invite
de commande Matlab ou le lancer via Windows. Dans le second cas, qui est net-
tement préférable, l’éditeur est complétement indépendant du moteur Matlab:
en cas de faille du moteur, l’éditeur reste stable et vous pourrez sauvegarder vos
fichiers.

Scripts et functions
Les scripts utilisent l’espace mémoire de travail alors que les fonctions utilisent
un espace mémoir qui leur est propre à chaque appel: une fonction ne modifie
les variables de la mémoire de travail que via les variables qu’elle retourne. Par
exemple, avec la fonction f.m

function M=f(x)
y=x*x
M=y;

6
ni la valeur de y ni celles de x ou M ne seront modifiés par l’appel

M=1; y=1; x=1;


a=2;
b=f(a);

Performances
Tous les chemins mènent à Rome, mais certains sont plus courts. Deux règles
simples limitent les plus grandes pertes: remplacer les boucles par des opérations
matricielles et allouer l’espace nécessaire pour les matrices lorsque ce n’est pas
possible d’éviter les boucles. L’outil le plus simple pour mesurer le temps
d’exécution est la paire de fonctions tic et toc, qui donne des intervalles en
secondes. Comparer (à l’aide d’un script), par exemple,

tic
s=0;
for n=1:100000
s=s+n;
end
toc

et

tic
s=sum(1:100000);
toc

Comparez aussi

tic
s=[];
for n=1:100000
s=[s n];
end
toc

et

tic
s=zeros(1,100000);
for n=1:100000
s(n)=n;
end
toc

7
Un outil puissant permettant de repérer les sources de lenteur d’un programme
est le profiler. On le lance avec la commande profile on, puis on lance le
programme. Une fois le progamme terminé, on tape profile viewer: l’outil
décompose le temps d’exécution sur chaque ligne de code. Le résultat sera
imprécis si le temps total est trop court.

Vous aimerez peut-être aussi