Académique Documents
Professionnel Documents
Culture Documents
Matlab est un logiciel de calcul numrique produit par MathWorks (voir le site web http://
www.mathworks.com/). Il est disponible sur plusieurs plateformes.
Matlab est un langage simple et trs efficace, optimis pour le traitement des matrices, do son
nom. Pour le calcul numrique, Matlab est beaucoup plus concis que les vieux langages (C,
Pascal, Fortran, Basic). Un exemple: plus besoin de programmer des boucles modifier pour un
un les lments dune matrice. On peut traiter la matrice comme une simple variable. Matlab
contient galement une interface graphique puissante, ainsi quune grande varit dalgorithmes
scientifiques.
Atelier doutils informatiques pour la physique On peut enrichir Matlab en ajoutant des botes outils (toolbox) qui sont des ensembles de
fonctions supplmentaires, profiles pour des applications particulires (traitement de signaux,
(InfoPhys) analyses statistiques, optimisation, etc.).
LUniversit de Genve dispose dune centaine de licences Matlab qui sont la disposition de
la communaut universitaire. Il suffit dtre connect au rseau de luniversit pour pouvoir
lutiliser. Plusieurs toolbox sont aussi disponibles (voir Appendice 1), leur nombre dpend de
lenvironnement, il est parfois plus restreint.
Elments de MATLAB
Ces notes ne constituent pas une rfrence exhaustive sur MatLab, mais soulignent les no-
tions principales de manire succincte et servent de guide pour le travail en laboratoire. Elles
devraient inciter ltudiant chercher lui-mme les complments dinformation qui lui sont
ncessaires, soit avec les outils daide en ligne, soit dans les ouvrages suivants:
Introduction Matlab
J.-T. Laprest (Ellipses, 1999)
Mastering Matlab 6
D. Hanselman B. Littlefield (Prentice Hall, 2001)
Apprendre et matriser Matlab
M. Mokhtari A. Mesbah, (Springer, 1997)
Solving problems in scientific computing using Maple and Matlab
W. Gander, J. Hrebicek (Springer, 1995, second edition)
Numerical Methods Using Matlab
G. Lindfield J. Penny (Prentice Hall, 2nd edition : 2000)
Matlab est relativement coteux car il contient un nombre impressionnant de fonctions. Il existe
une version tudiant un prix abordable et un clone (Octave), disponible en freeware, dont la
compatibilit avec Matlab est assez bonne: (http://www.octave.org/ ou dans la distribution
SuSE de Linux).
Les exemples donns dans le cours sont disponibles sur le serveur servtp3-1 des Travaux Pra-
tiques Avancs, dossier public/infophys/matlab/cours/. Les solutions dexercices sont
dans le dossier public/infophys/matlab/exercices/.
Alfred A. Manuel
Dpartement de la Physique de la Matire Condense Nous nous bornons ici dcrire le language Matlab qui est indpendant de la plateforme uti-
alfred.manuel@physics.unige.ch lise. Lenvironnement de travail offre plusieurs fonctionalits assez conviviales qui sont utiles
au dveloppement. Lutilisateur les mettra profit sans difficult.
besselj besselh .... beta ... erf ... gamma ... legendre
Par dfaut, le vecteur est une ligne plusieurs colonnes >> x(2 : 4) % un bloc de composantes
a) vecteur ligne par numration des composantes: ans =
>> v = [1 3.4 5 -6] 0.2856 0.5712 0.8568
v =
1.0000 3.4000 5.0000 -6.0000 >> x([8 3 9 1]) % une slection de composantes (on les dsigne avec un autre
vecteur!)
ans =
b) vecteur ligne par description:
1.9992 0.5712 2.2848 0
>> x = [0 : pi/10 : pi] % [valeur-initiale : incrment : valeur-finale]
x =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
2.3 Combinaison de vecteurs
Columns 8 through 11 a) Accolage de deux vecteurs:
2.1991 2.5133 2.8274 3.1416 >> a = [1:3]
a =
c) vecteur colonne: 1 2 3
>> xcol = x >> b=[10:10:30]
xcol = b =
0 10 20 30
0.2856
0.5712 >> c = [a b]
0.8568 c =
1.1424 1 2 3 10 20 30
1.4280
1.7136 On peut faire plus compliqu:
1.9992 >> d=[a(2:-1:1) b] % on accole b avec une portion de a dans lordre renvers
2.2848 d =
2.5704 2 1 10 20 30
2.8560
3.1416 Notez la diffrence entre () et [] :
d) gnration de vecteurs mtriques
>> x = linspace(0, pi, 11) % gnre le mme x que ci-dessus (11 valeurs. rpar- Tableau 1: Notations
ties de 0 pi)
x = [] numration dlments
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 : descripteur dlments de vecteur/matrice
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416 () ensemble darguments
Les M-files sont excuts squentiellement dans le workspace, cest dire quils peuvent ac- 4.5 Gestion du systme de fichiers
cder aux variables qui sy trouvent dj, les modifier, en crer dautres etc. Matlab utilise la syntaxe Linux/Unix (DOS est assez semblable ce niveau) pour la gestion des
dossiers. Ainsi on peut connatre le dossier courant et se dplacer dans larbre des dossiers
On excute un M-file en utilisant le nom du script comme commande: laide des commandes suivantes :
>> message
pwd permet de connatre le dossier courant (Print Working Directory)
Hello, il fait beau
cd .. remonte au dossier suprieur
Exercice: cd sub slectionne le dossier infrieur nomm sub
Dans un script pluspetitnombre.m, utiliser la structure while pour valuer le plus petit ls donne la liste des fichiers dans le dossier courant (LiSt)
nombre tel que, ajout 1, on obtient un nombre suprieur 1.
Examples:
>> pwd
4.4 Fonctions E:\matlab
>> cd E:\infophys\matlab\cours
On peut crire des fonctions MatLab que lon peut ensuite appeler depuis un script.
>> ls
Voici une fonction temps dfinie dans le fichier temps.m:
ReO3_GX.m diffsplines.m rex.m test_filter.m
function y=temps(x)
% TEMPS(X) affiche un message suivant le temps quil fait ballistic.m message.m temps.m
% et retourne le paramtre dentre X chang de signe ballistic_ODE.m myfun1.m test.dat
if length(x)>1 error(X doit tre un scalaire); end
if x~=0 >> cd ..
disp(Hello, il fait beau) >> cd exercices
else
disp(Esprons que demain sera meilleur!)
>> pwd
end E:\infophys\matlab\exercices
y=-x;
return
b) histogrammes: hist
5.1 Graphiques 2D >> x=-2.9 : 0.2 : 2.9; %dfini lintervalle et la largeurs des canaux de lhis-
>> help graph2d % intro. au graphisme 2D et tableau des fonctions disponibles togramme
>> y=randn(50000,1); % gnre des nombres alatoires rpartis selon une distr.
normale
a) courbes: plot
>> hist(y,x) % dessine lhistogramme MatLab1_fig3
>> x=linspace(0,2*pi,30);
>> y=sin(x);
% un plot rudimentaire:
>> plot(x,y)
>> title(Trigonomtrie) % MatLab1_fig1
MatLab1_fig1
% quelques amliorations:
>> grid on
>> axis([ 0 2*pi -1 1])
% add a second curve
>> hold on MatLab1_fig3
>> z=cos(x)
>> plot(x,z,c+) % MatLab1_fig2
>> clf % efface la figure
c) graphes pour matrices clairsemes: spy, gplot
>> spy(bucky) % donne un schma des composantes non-nulles de bucky
Les matrices clairsemes sont parfois utilises pour dcrire les connections dans les graphes.
gplot permet de dessiner ces connections:
>> [B, v] = bucky;
>> gplot(B,v); axis equal %
5.2 Graphiques 3D
>> help graph3d % introduction au graphisme 3D et tableau des fonctions dis-
ponibles
MatLab1_fig6
MatLab1_fig8
5.3 Animations
moviein: initialisation dun buffer pour les images
getframe: capture une figure dans une image de lanimation
movie: affiche lanimation
Exemple:
% RotatePeaks.m - Exemple danimation
%
% On cre plusieurs frames dans lesquels on met un mme graphique 3D
% vu sous des angles diffrents de manire crer une impression de
% rotation
%
clear
MatLab1_fig7 %
% pour transformer ce graphe en chelle de couleurs % prparation du graphique qui va servir de base lanimation
>> colormap(gray) [X,Y,Z] = peaks(30);
>> pcolor(X,Y,Z) % plot pseudo-couleur de Z sur la grille X,Y surfl(X,Y,Z)
>> shading interp axis([-3 3 -3 3 -10 10])
>> axis(square) % MatLab1_fig8 axis off
shading interp
MatLab1_fig9
6.3 Diffrentiations
Contrairement lintgration, la diffrentiation numrique est difficile, puisquelle est trs sen-
sible la forme locale de la fonction. La meilleure manire de faire de la diffrentiation est de
fitter un polynme ou une fonction spline. Dans les deux cas, on connat lexpression analytique
de la drive.
a) Drive approximative
La fonction DY = diff(Y) retourne en DY la drive de Y calcule simplement en prenant la
diffrence entre les lments adjacants de Y. diff retourne un vecteur moins long que Y, ce
qui peut tre gnant. Dans ce cas, vous pouvez utiliser gradient.
MatLab1_fig10
b) diffrentiation par cubic-splines
Cette mthode nest pas tout fait directe avec MatLab. Voici un script qui la dcrit:
d) Gradient, Laplacien
>> gradient (F) % drive de F si F est un vecteur
( Hi, j E i, j )bi = 0
i
>> gradient(H) % gradient de H, si H est une matrice qui na de solutions que si le dterminant de (Hi,j-Ei,j)=0 (voir Mcanique Quantique).
>> del2(U) % approximation du Laplacien de U
Pour un Hi,j donn, on veut trouver les valeurs propres E de lnergie et les vecteurs propres bi
qui donnent les fonctions donde.
6.4 Algbre linaire La fonctions eig permet dobtenir vecteurs et valeurs propres.
Dans ses versions rcentes, MatLab contient un ensemble de fonctions pour rsoudre quasiment En drivant, on obtient alors les 4 ODE suivantes:
tout problme dcrit par des ODE du type suivant, avec des conditions initiales dfines. X ( 1 ) = X ( 3 ) ; X ( 2 ) = X ( 4 )
X(3) = 0 ; X( 4 ) = g
y = f ( t, y ) y ( t0 ) = y0 avec les conditions initiales suivantes:
X0( 1) = 0 ; X0 ( 2 ) = h
Pour une introduction et des exemples: X 0 ( 3 ) = v 0 cos ; X 0 ( 4 ) = v 0 sin
>> helpdesk %et chercher ode45 dans la fentre Go to MATLAB function
La routine ode45 est la routine de base. Elle implmente une variante de la mthode de La fonction dcrivant les ODE scrit alors:
Runge-Kutta (voir par exemple http://www.geog.ubc.ca/numeric/labs/lab4/lab4/node5.html) qui, elle-mme est un raff- function Xdot= ballisticODE(t,X)
% BALLISTICODE.m ODE pour le tir ballistique dans le vide
inement de la mthode trs simple dEuler qui utilise la drive de f t pour valuer f t+dt.
global g
Dautres algorithmes sont disposition. Par exemple : Xdot = [ X(3)
ode23 : Rosenbrock formula of order 2 X(4)
clear; clf;
global g
g = 9.81; % const. de gravitation
% conditions initiales du tir:
h = 1; % altitude de dpart
v0 = 25; % vitesse initiale
theta = pi/180*15; % angle de tir
% conditions initiales:
xin = [0, h, v0*cos(theta), v0*sin(theta)];
% temps de vol jusqu atteindre laltitude 0
tmax = (xin(4) + sqrt(xin(4)^2 + 2*g*xin(2)))/g;
% solution numrique des ODE :
[t x] = ode23(ballisticODE, [0 tmax], xin);
%plot de la solution avec une interpolation faite avec des splines cubiques
N = max(x(:, 1)); xi = 0:N/100:N;
axis([0,max(x(:,1)), 0, max(x(:,2))])
grid on; hold on; MatLab1_fig12
plot(xi, spline(x(:,1), x(:, 2), xi), :r);
hold off; >> x = fzero(humps, 2.)%appelle fzero(Fonction__tudier, solution_estime)
x =
Exercice 6.5.1 : 1.29954968258482
Reprenez lexemple du tir ballistique et introduisez une force de frottement proportionnelle Attention, fzero ne retourne quun zro:
la vitesse (voir MatLab1_fig11 ). % recherche les points o humps(x) = 60
>> fzero(humps(x)-60, [0.2 0.3]) % on peut donner un intervalle
ans =
0.22497151787552
>> fzero(humps(x)-60, [0.3 0.4])
ans =
0.37694647486211
>> fzero(humps(x)-60, [0.2 0.4])
??? Error using ==> fzero
The function values at the interval endpoints must differ in sign.
b) Minimalisations
Recherche des extrema dune fonction.
Trs utile quand vous voulez fitter une fonction paramtrique une srie de mesures afin de d-
terminer les paramtres de votre modle.
subplot(2,1,2)
plot(t, Smooth-Filtered)
title(Smooth-Filtered)
MatLab1_fig13
Rsultat: Voir figure MatLab1_fig14 .
c) Autres fonctions de fit:
Dautres fonctions de fit sont disponibles dans toolbox/stats (cf Appendice):
nlinfit - Nonlinear least-squares data fitting. Fournit une estimation de lerreur sur les
paramtres du fit.
polyfit - Least-square polynomial fitting
regress - Multivariate linear regression
optim - Optimization toolbox (help optim) Voir paragraphe 6.8
clear
figure(2)
clf
subplot(2,1,1)
N = 1001;
bruit = 0.1
t = [0 : N-1]/(N-1);
Smooth = exp( -100*(t-1/5).^2) + exp( -500*(t-2/5).^2) + ...
exp(-2500*(t-3/5).^2) + exp(-12500*(t-4/5).^2) ;
Noisy = Smooth + bruit* rand(size(t)); % avec bruit
plot(t, Noisy)
hold on
title(Filtre de Savitzky-Golay)
M = 3 % 4 degr du polynome
nl= 8 % 5 nombres de points gauche
nr= 8 % 5 nombres de points droite
A = ones(nl+nr+1, M+1);
for j = M:-1:1
A(:,j) = [-nl:nr] .* A(:,j+1);
end
[Q, R] = qr(A) ; % Orthogonal-triangular decomposition
c = Q(:, M+1) / R(M+1, M+1);
Filtered = filter(c(nl+nr+1:-1:1), 1, Noisy);
% compensation du retard introduit par le filtre :
Filtered(1:nl) = Noisy(1:nl);
Filtered(nl+1:N-nr) = Filtered(nl+nr+1:N);
Filtered(N-nr+1:N) = Noisy(N-nr+1:N);
plot(t, Filtered+0.2, -r)
subplot(2,1,2)
plot(t, Smooth-Filtered)
title(Smooth-Filtered)
MatLab1_fig14
A titre dexemple, nous appliquons un filtre non linaire simple une mesure de comptage
simule. Le but du filtre est de mettre en vidence un petit signal gaussien superpos un grand
bruit de fond et noy dans le bruit statistique.
Le principe de ce filtre est de prendre la drive dordre n du signal et de llever une puissance
p. On peut choisir interactivement m et n, ainsi que la statistique du signal (en donnant le taux
de comptage accumul son pic). Le bruit est rparti selon la racine care du signal, comme
cest le cas pour toute mesure de comptage.
clear
disp(Problme: minimiser cx, sous les contraintes Ax <= b)
disp(avec 3 constraintes sur x)
disp( )
disp(Coefficients c de la fonction objectif f(x))
c = [-5 -4 -6]
disp(Constraintes : membres de gauche)
A = [1 -1 1; 3 2 4; 3 2 0]
disp(Contraintes: membres de droite)
b = [20 42 30]
%
% Limites infrieures et suprieures de x :
n = max(size(c));
L = zeros(n,1);
MatLab1_fig16 U = 10^10*ones(n,1);
%
Exercice 6.7.3: REX2.M % Optimisation :
[x,lambda,exitflag] = linprog(c,A,b,[],[],L,U);
Ajoutez dans rex.m un lissage du signal avant dappliquer le filtre non-linaire. if exitflag<= 0
Observez leffet du lissage. Un lissage simple peut tre implment en ajoutant un point, les disp(ERROR, exitflag =)
valeurs de ses voisins (convolution; voir fonction conv). exitflag
else
Exercice 6.7.4: disp(Solution optimale pour x)
x
Construisez un filtre plus performant que celui implment dans rex.m et rex2.m
disp(Valeur optimale de f(x))
z = c*x
disp(Vrification des contraintes :)
for i=1:n
A(i,:)*x
end
end
Syntaxe dadressage
Fonctions matricielles
2. Vecteurs
2.1 Cration de vecteurs 7
2.2 Adressages et indexages 8
2.3 Combinaison de vecteurs 8
3. Matrices
3.1 Cration de matrices 9
3.2 Transposition 9
3.3 Oprations scalaires-matrices 9
3.4 Oprations entre matrices 10
3.5 Matrices particulires 11
3.6 Caractristiques des matrices 11
3.7 Manipulations de matrices et sous-matrices 11
3.8 Matrices clairsemes 13
4. Programmer en Matlab
4.1 Oprateurs logiques et de relation 14
4.2 Contrler lexcution 14
4.3 M-Files ou scripts 15
4.4 Fonctions 15
4.5 Gestion du systme de fichiers 16
5. Graphisme
5.1 Graphiques 2D 17
5.2 Graphiques 3D 18
5.3 Animations 22