Vous êtes sur la page 1sur 25

Introduction

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.

15 October 2004 MatLab1.fm (15October2004) 2


1. Aspects lmentaires 1.4 Variables spciales
pi inf i or j realmin realmax eps ans flops (# doprations effectues)
>> eps
1.1 Aides ans =
2.2204e-16
help -> donne de laide sur une fonction ou un toolkit (help help) >> realmax
helpdesk -> documentation en hypertexte (requiert Netscape ou autre) ans =
helpwin -> aide en ligne dans une fentre spare 1.7977e+308
lookfor -> recherche dun mot cl (lent) >> realmin
ans =
which -> localise fonctions et fichiers 2.2251e-308
what -> liste des fichiers matlab dans le rpertoire courant
exist -> check si une fonction ou une variable existe dans le workspace
who, whos -> liste des variables dans le workspace 1.5 Nombres complexes
>> c1 = 1-2i
1.2 Variables scalaires, workspace, oprations lmentaires c1 =
1.0000 - 2.0000i
>> var=2
var = 2 c2 = 3*(2-sqrt(-1)*3)
c2 =
>> autre=3; 6.0000 - 9.0000i
real(c1) imag(c1) abs(c1)
>> who % fournit la liste des fonctions dfinies dans le workspace >> angle(c1)
Your variables are: ans =
autre var -1.1071
autres fonctions:
>>whos % donne plus d'informations que who
conj isreal
Sous Windows, vous avez accs au Workspace browser dans la barre doutils.

>> clear autre 1.6 Fonctions mathmatiques


>> who
Your variables are: sin cos tan sinh cosh tanh ...
var asin acos atan asinh acosh atanh ...
exp log log10 sqrt
>>clear % efface toutes les variables du workspace fix floor ceil round mod rem sign
cart2sph cart2pol pol2cart sph2cart
Oprations lmentaires: factor isprime primes gcd (pgcd) lcm (ppcm)
+ - * / or \ ^
>> 4/2
ans =
nchoosek (nombre de combinaisons diffrentes de N lments pris k k)
>> nchoosek(30,4)
2
>> 2\4 ans =
ans = 27405
2 perms (toutes les permutations possibles dun vecteur V)
>> perms([1 2 3])
ans =
1.3 Commentaires, ponctuation 3 2 1
2 3 1
>> s=2+3 % je fais une somme 3 1 2
s = 5 1 3 2
2 1 3
>> cout_moyen = cout ... % commande sur deux lignes 1 2 3
/ nombre; Attention au CPU! Vous pouvez stopper avec Ctrl-C

besselj besselh .... beta ... erf ... gamma ... legendre

MatLab1.fm (15October2004) 3 MatLab1.fm (15October2004) 4


cross (produit vectoriel)
dot (produit scalaire)
1.8 Entres-sorties
>> v1=[1 3 5] Deux commandes utiles pour grer le workspace, dont la taille dpend de votre espace de swap:
v1 = >> save % crit toutes les variables du workspace dans le fichier matlab.mat
1 3 5 >> load % charge dans le workspace toutes les variables du fichier matlab.mat

>> v2=[2 4 6] Entres-sorties sur des fichiers disques:


v2 =
fopen (ouverture dun fichier) fclose (fermeture dun fichier)
2 4 6
fscanf (lecture formate) fprintf (criture formate)
>> cross(v1,v2)
ans = N = input( Nombre de boucles dsires >); % entre interactive
-2 4 -2
disp(N) % affiche la valeur de N
>> dot (v1, v2)
ans =
44 1.9 Terminer Matlab
>> quit % retourne le nombre doprations effectues pendant la session
>> whos
5340584 flops.
Name Size Bytes Class
ans 1x1 8 double array
c1 1x1 16 double array (complex)
c2
v1
1x1
1x3
16
24
double array (complex)
double array
1.10 Personnaliser Matlab
v2 1x3 24 double array Si, au dmarrage, Matlab trouve le fichier startup.m, il lexcute.
Exemple de startup.m :
disp( Executing STARTUP.M)
addpath( H:/Matlab/Cours);
1.7 Affichage addpath( H:/Matlab/Exercices);
cd Matlab; % (set current directory to ./Matlab)
FORMAT Set output format. format compact
All computations in MATLAB are done in double precision. disp( STARTUP.M completed)
FORMAT may be used to switch between different output
display formats as follows:
FORMAT SHORT (default) Scaled fixed point format with 5 digits.
FORMAT LONG Scaled fixed point format with 15 digits.
FORMAT SHORT G Best of fixed or floating point format with 5 digits.
FORMAT LONG G Best of fixed or floating point format with 15 digits.
Autres format : cf help format
Spacing:
FORMAT COMPACT Suppress extra line-feeds.
FORMAT LOOSE Puts the extra line-feeds back in.
examples:
>> pi
ans =
3.1416
>> format long g
>> pi
ans =
3.14159265358979

MatLab1.fm (15October2004) 5 MatLab1.fm (15October2004) 6


2. Vecteurs 2.2 Adressages et indexages
>> x(3) % 3me lment du vecteur x
ans =
2.1 Cration de vecteurs 0.5712

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

>>% linspace(0 , 1, 11) *pi donne le mme rsultat


, sparateur darguments
; sparateur des lignes dans les matrices
>> logspace(0, 2, 11) % cre un vecteur log 11 composantes entre 100 et 10 2
ans =
supression du rsultat de lvaluation dune instruction
Columns 1 through 7 transposition de matrice
1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489
Columns 8 through 11 . force loprateur sappliquer sur chaque lment du vecteur/matrice
25.1189 39.8107 63.0957 100.0000
% dlimitateur de commentaire
... continuation de linstruction sur la ligne suivante

MatLab1.fm (15October2004) 7 MatLab1.fm (15October2004) 8


1 4 9
3. Matrices 121 144 169

3.4 Oprations entre matrices


3.1 Cration de matrices
Un matrice est un ensemble de lignes comportant toutes le mme nombre de colonnes a) Multiplications
Matlab, depuis la version 5, supporte les matrices n dimensions (n>2) >> m1 % rappelons la dfinition de m1
m1 =
a) Par numration des lments 1 2 3
>> m1 = [ 1 2 3 ; 4 5 6 ; 7 8 9] % on spare les lignes par des point-virgules 4 5 6
m1 = 7 8 9
1 2 3
4 5 6 >> m2 % rappelons la dfinition de m2
7 8 9 m2 =
1 2 3
On peut tendre aux matrices les autres manires de dfinir des vecteurs. 11 12 13
Par exemple:
>> m1 * m2 % le produit matriciel nest possible que lorsque les dimensions
>> m2 = [1:1:3 ; 11:1:13]
sont cohrentes
m2 =
ans =
1 2 3
14 74
11 12 13
32 182
50 290
>> m3 = [1:1:3 ; logspace(0, 1, 3)]
m3 =
>> m1 * m2
1.0000 2.0000 3.0000
??? Error using ==> *
1.0000 3.1623 10.0000
Inner matrix dimensions must agree.

3.2 Transposition Multiplication lment par lment:


>> m2 .*m3 % (m2 et m3 ont les mmes dimensions)
loprateur apostrophe utilis pour crer un vecteur colonne est en fait loprateur transposition: ans =
>> m2 1.0000 4.0000 9.0000
ans = 11.0000 37.9473 130.0000
1 11
2 12
b) Divisions
3 13
>> m2/m3 % division matricielle droite
ans =
3.3 Oprations scalaires-matrices 1.0000
9.5406
-0.0000
-1.5960
Une telle opration agit sur chaque lment de la matrice: >> m2\m3 % division matricielle gauche (cf algbre linaire!)
>> m2 * 10 % de mme: 4*m2 m2-10 m2/4 ans =
ans = -0.5000 -0.8257 -0.4500
10 110 0 0 0
20 120 0.5000 0.9419 1.1500
30 130
Division lment par lment:
Une exception: >> m2./m3 % chaque lment de m2 est divis par llment quivalent de m3
>> m2^2 ans =
??? Error using ==> ^ 1.0000 1.0000 1.0000
Matrix must be square. 11.0000 3.7947 1.3000
Dans ce cas, Matlab veut calculer le produit matriciel m2 * m2 >> m2.\m3 % chaque lment de m3 est divis par llment quivalent m2
ans =
1.0000 1.0000 1.0000
La solution est lusage du point qui force lopration sur chaque lment:
0.0909 0.2635 0.7692
>> m2 .^ 2
ans =

MatLab1.fm (15October2004) 9 MatLab1.fm (15October2004) 10


>> m3./m2 % chaque lment de m3 est divis par llment quivalent m2 - Changez la valeur de llment dans la 2me ligne, 6me colonne, que se passe-t-il?
ans =
1.0000 1.0000 1.0000
- Mettez tous les lments de la 4me colonne 4
0.0909 0.2635 0.7692 - Crez B en prenant les lignes de A en sens inverse
- Crer C en accolant toutes les lignes de la premire et troisime colonne de B la droite de A
- Crer D sous-matrice de A faite des deux premires lignes et les deux dernires colonnes de
3.5 Matrices particulires A. Trouvez aussi une manire de faire qui ne dpende pas de la taille de A.
>> ones(3) Note: chacun de ces exercices se fait en une seule instruction, sans boucles ittratives.
ans =
1 1 1
1 1 1 b) Fonctions de manipulation des matrices:
1 1 1
>> A = [1 2 3 ; 4 5 6 ; 7 8 9 ]
>> zeros(2,5) A =
ans = 1 2 3
0 0 0 0 0 4 5 6
0 0 0 0 0 7 8 9
>> eye(4) % aussi: eye(2,4) >> flipud(A) % flip up-down
ans = ans =
1 0 0 0 7 8 9
0 1 0 0 4 5 6
0 0 1 0 1 2 3
0 0 0 1
>> fliplr(A) % flip left-right
>> diag([1 : 4]) ans =
ans = 3 2 1
1 0 0 0 6 5 4
0 2 0 0 9 8 7
0 0 3 0
0 0 0 4 >> rot90(A,2) %2 rotations de 90 degres (sens trigo)
ans =
>> rand(1,7) % nombres alatoires entre 0 et 1 9 8 7
ans = 6 5 4
0.9355 0.9169 0.4103 0.8936 0.0579 0.3529 0.8132 3 2 1

>> reshape(A,1,9) % change la forme de la matrice


3.6 Caractristiques des matrices ans =
1 4 7 2 5 8 3 6 9
>> size(m3) % dimensions
ans =
2 3 >> diag(A) % extrait la diagonale de A
ans =
1
>> length(m3) % equivalent max(size(m3)) : dimension maximum
5
ans =
9
3
>> rank (m3) %rang (nombre de colonnes ou lignes linairement indpendantes)
>> diag (ans) % diag travaille dans les 2 sens !
ans =
ans =
1
1 0 0
0 5 0
3.7 Manipulations de matrices et sous-matrices 0 0 9

>> triu(A) % extrait le triangle suprieur de A


a) Exercices de manipulations avec les notions vues jusquici ans =
1 2 3
- Dfinissez A une matrice 3x3 0 5 6
- Mettez zro llment (3,3) 0 0 9

MatLab1.fm (15October2004) 11 MatLab1.fm (15October2004) 12


>> tril(A) % triangle infrieur
ans =
1 0 0
4. Programmer en Matlab
4 5 0
7 8 9
4.1 Oprateurs logiques et de relation
Il y a encore bien dautres fonctions pour travailler les matrices, voir la liste dans lannexe. < plus petit
> plus grand
c) Exercice (avanc): <= plus petit ou gal
Sans utiliser de boucles dittration, ajouter aux lments dune matrice lindice de leur col- >= plus grand ou gal
onne. == gal
~= pas gal
3.8 Matrices clairsemes & et
| ou
Lorsque seulement quelques lments dune matrice sont non-nuls, on peut la dfinir comme ~ not
une sparse matrix. Sa description contient seulement les lments non nuls. xor(x,y) ou exclusif
>> A_normal = [0 1 0 ; 1 0 0; 0 0 1] % matrice normale any(x) retourne 1 si un des lments de x est non nul
A_normal = all(x) retourne 1 si tous les lments de x sont nuls
0 1 0 isequal(A,B), ischar etc...
1 0 0
0 0 1 4.2 Contrler lexcution
>> A_sparse = sparse(A_normal) % matrice clairseme
A_sparse = a)For
(2,1) 1 for n = 1:5
(1,2) 1 for m = 5:-1:1
A(n,m) = n^2 + m^2;
(3,3) 1 end
disp(n)
sparse peut aussi tre utilis pour crer directement une matrice clairseme: end
>> S = sparse([2 1 3 4], [1 2 3 1], [4 5 6 7], 4, 3) 1
S = 2
(2,1) 4 3
(4,1) 7 4
(1,2) 5 5
(3,3) 6 >> A
A =
Le gain de place dans le workspace est dautant plus significatif que la matrice est grande (on 2 5 10 17 26
utilise bucky, une matrice clairseme prdfinie): 5 8 13 20 29
>> clear 10 13 18 25 34
17 20 25 32 41
>> B_sparse = bucky;% matrice clairseme
26 29 34 41 50
>> B_full = full(B_sparse); % matrice complte
>> whos
Name Size Bytes Class b) While
B_sparse 60x60 28800 double array while expression
B_full 60x60 2404 sparse array (commands)
end
full a convertit la matrice clairseme en matrice complte.
c) If-then-else
if expression1
(commandes excuter si expression1 estvrai)
elseif expression2
(commandes excuter si expression2 estvrai)
else
(commandes excuter si aucune expression est vrai)
end

MatLab1.fm (15October2004) 13 MatLab1.fm (15October2004) 14


voir les utiliser depuis lextrieur de la fonction. Par exemple:
4.3 M-Files ou scripts global x y
Un script (ou M-file) est un fichier (message.m par exemple) contenant des instructions Matlab.
Voici un exemple de script: Matlab offre plusieurs moyens de vrifier les arguments dentres et de sorties dune fonction:
nargin retourne le nombre darguments dentre
% message.m affiche un message nargout retourne le nombre darguments de sortie
% ce script affiche le message que sil fait beau nargchk vrifie le nombre darguments dentre
beau_temps=1; error Affiche un message derreur
if beau_temps~=0 inputname retourne le nom dun argument dentre
disp(Hello, il fait beau)
end
return % (pas ncessaire la fin dun M-file) Exercice:
Ecrivez une fonction index_of_max qui retourne lindex de llment le plus grand dun vec-
Matlab vous offre un diteur pour crire et mettre au point vos M-files: teur A donn comme argument dentre.
>> edit % lance lditeur de MatLab. Voir aussi la barre doutils
Tout autre diteur de texte convient aussi.

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

Utilisation de cette fonction:


>> clear
>> help temps
TEMPS(X) affiche un message suivant le temps quil fait
et retourne le paramtre dentre X chang de signe
>> temps(1)
Hello, il fait beau
-1
Remarquez que les variables internes dune fonction sont locales et nentrent pas dans le work-
space. Vous pouvez, dans une fonction, dclarer une ou plusieurs variables globales afin de pou-

MatLab1.fm (15October2004) 15 MatLab1.fm (15October2004) 16


Exercice :
5. Graphisme Ecrivez un script pour montrer lvolution graphique de vos dpenses pour la sant en fonction
du montant de vos frais mdicaux annuels. Evaluez 2 situations: 1) Prime mensuelle: 300.- ; la
Nous donnons ici les indications minimum. Utilisez help et les autres commandes daide pour caisse rembourse 90% des frais avec une franchise de 150.- 2) rabais de 37% sur vos primes si
affiner vos connaissances et vos graphiques. la franchise est de 1500.- Quand tes-vous gagnant?

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

a) ligne dans lespace: plot3


>> t = linspace(0, 10*pi);
MatLab1_fig2 >> plot3(sin(t), cos(t), t)
>> xlabel(sin(t)), ylabel(cos(t)), zlabel(t)
semilogx, semilogy et loglog sont semblables plot mais permettent de faire des plots log. >> grid on % MatLab1_fig4

MatLab1.fm (15October2004) 17 MatLab1.fm (15October2004) 18


y =
0 25 50 75 100
X =
1 10 100
1 10 100
1 10 100
1 10 100
1 10 100
Y =
0 0 0
25 25 25
50 50 50
75 75 75
100 100 100
P_4_2 =
10
75

c) grillage en perspective: mesh


>> clf
>> x = linspace(-3, 3, 30);
>> y = linspace(-3, 3, 30);
>> [X Y] = meshgrid(x,y);
>> Z = peaks(X, Y) % peaks est une fonction 2-D prdfinie dans matlab
MatLab1_fig4 >> mesh(X, Y, Z) % grillage 3D
>> meshc(X, Y, Z) % grillage 3D avec les contours sur le plan de base
b) Construction dun maillage dans le plan (x,y) : meshgrid >> % (voir MatLab1_fig5 )
Pour la reprsention dune surface f(x, y), on a besoin de connatre les triplets de coordonnes
(xi, yj, Zi,j), avec Zi,j=f(xi,yj), pour un certain nombre de points (xi, yj) o i=1, ..., N, j=1, ..., M.
On voit que Z a la structure dune matrice {Zi,j}. Par soucis dharmonisation, Matlab utilise
galement une reprsentation matricielle pour les coordonnes x et y dans le plan, bien qu pri-
ori, des vecteurs soient suffisants. Il faut accepter cette stratgie... Matlab fournit la fonction
meshgrid pour gnrer les matrices {Xi,j} et {Yi,j} partir des vecteurs {xi} et {yi}. Lexemple
ci-dessous montre comment sutilise meshgrid et quelle est la forme des matrices X et Y.

% TESTMESHGRID -- Pour la notion de "mesh" (maillage) dans Matlab


%
clear
% on part de deux vecteurs qui dfinissent le maillage sur chaque axe du plan
x = logspace(0, 2, 3)
y = linspace(0, 100, 5)

% meshgrid fournit les matrices X et Y partir des vecteurs x et y :


[X Y] = meshgrid(x, y)

% La maille (4, 2) est donnee par :


P_4_2 = [X(4,2) ; Y(4,2)]
% mais aussi, indiffrement, par une des expressions suivantes
%P_4_2 = [X(1,2) ; Y(4,1)] MatLab1_fig5
%P_4_2 = [X(3,2) ; Y(4,3)] d) Surface avec illumination: surfl
%P_4_2 = [X(2,2) ; Y(4,2)] >> clf
>> [X,Y,Z] = peaks(30);
Rsultat de testmeshgrid.m : >> surfl(X,Y,Z) % graphique avec illumination
>> x = >> shading interp % meilleure interpolation
1 10 100 >> colormap pink %choix dune palette de couleurs prdfinie

MatLab1.fm (15October2004) 19 MatLab1.fm (15October2004) 20


>> view(-37.5+90, 30) % changement point de vue: view(azimut, elevation) >> colormap(default)
MatLab1_fig6

MatLab1_fig6

e) courbes de niveau: contour


contour(X,Y,Z,20) % 20 lignes de niveau MatLab1_fig7

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.fm (15October2004) 21 MatLab1.fm (15October2004) 22


colormap (hot)
%
% construction de lanimation
6. Quelques applications de Matlab
m=moviein(15); %initialise lanimation (15 images)
for i=1:15
view(-37.5+24*(i-1),30) % change le point de vue 6.1 Fits et interpolations
m(:,i)=getframe; % capture une image; Notez que m(i)= ... va ausi
end a) Fits de polynmes: (interpolation.m)
% >> x = [0 : 0.1 : 1];
% prsentation du rsultat >> y = [ -.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2];
movie(m,5) % affiche lanimation 5+1 fois >> p = polyfit(x,y,2) % fit un polynme du deuxime degr
p =
-9.8108 20.1293 -0.0317
Importer/exporter des animations
La solution est y = -9.8108x2 + 20.1293x - 0.0317.
Il est possible dexporter un movie Matlab dans un fichier MPEG laide de mpgwrite, ou
Regardons le rsultat:
movie2avi, des commandes que lon trouve sur le site web de Matworks. De mme, il est pos-
>> xi = linspace(0, 1, 100);
sible de charger un fichier MPEG dans un movie Matlab avec mpgread. >> yi = polyval(p, xi);
>> plot(x, y, o, xi, yi, --) % MatLab1_fig9 (plus bas)
Exercice:
Construisez une animation du jeu de la vie. b) fit de fonctions splines:
On part avec un espace 2D compos de (m*n) cellules qui sont alatoirement vivantes ou Si, pour mieux sapprocher des points fitter, on utilise des polynmes de degrs lev, on ob-
mortes. A chaque gnration (itration), cette population volue en suivant les deux rgles suiv- tient des oscillations (Exercice: essayez de tels fits en reprenant les vecteurs x et y donns ci-
antes: dessus). Les splines sont une manire de rsoudre ce problme et dobtenir de meilleurs fits
1) une cellule morte devient vivante si elle est entoure exactement par 3 cellules vivantes parmi quavec les polynmes.
les 8 cellules qui lentourent. Rappel: une spline cubique (la plus frquente) est compose de segments de polynmes du tr-
2) une cellule vivante survit seulement si elle est entoure par deux ou trois cellules vivantes. oisime degr dont les drives premires et deuximes sont continues aux points de jonction.
Conseil: utiliser la fonction graphique image pour visualiser lespace dans lequel volue la >> yi = spline(x, y, xi); % on fitte une spline sur les points (x,y)
population de cellules. >> hold on %on fixe le graphique afin dy rajouter une courbe
>> plot( xi, yi, -) % on rajoute la spline => MatLab1_fig9
>> title(Fits: polynme degr 2 (pointill); spline (ligne continue))
Extension de lexercice prcdant :
Poissons & Requins (voir dossier infophys/matlab/cours/SharksAndFishes)

MatLab1_fig9

MatLab1.fm (15October2004) 23 MatLab1.fm (15October2004) 24


% DIFFSPLINES.M Diffrentiation avec des cubic-splines
6.2 Intgrations % Fitte un ensemble de valeurs avec des splines et calcule la drive
clear
Note : humps est une fonction numrique prdfinie dans MatLab. clf

a) Intgrer un vecteur: % (x;y) sont les points fitter


>> x = linspace(-1, 2, 1000); x = [0 : 0.1 : 1];
>> y = humps(x); y = [ -.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2];
>> area=trapz(x,y)
area = %Il faut commencer par fitter des cubic splines (voir plus haut)
26.3450 xi = linspace(0, 1, 100); % mesh fin entre 0 et 1
yi = spline(x, y, xi); % fit des cubic splines.
b) intgrer une fonction: plot(x, y, o, xi, yi, -);
>> quad(humps,-1,2) % intgre 6 chiffres significatifs
hold on
ans =
26.3450 % diffrentiation:
>> quad8(humps,-1,2) % intgre 8 chiffres significatifs pp = spline(x,y); % obtient les polynmes partiels de la spline
ans = if pp.pieces(1)~=length(y)-1
26.3450 error(pas de pp-form pour cette spline cubique)
end
[br, coefs, l, k] = unmkpp(pp); % obtient les coefficients des polynmes
Vous pouvez intgrr vos propres fonctions: sf = k-1:-1:1; % scaling factors
Supposons que vous avez crit le script suivant dans le fichier myfun1.m dco = sf(ones(l,1),:) .* coefs(:,1:k-1); % value les coeffs de driva-
function y = myfun1(x) tion
%MYFUN1 est une fonction simple dfinie dans le fichier myfun1.m ppd = mkpp(br, dco); %construit la pp-form pour la diffrentiation
y = exp(-x.^2) .* cos(x); %La fonction peut traiter des vecteurs yid = ppval(ppd, xi); % calcul de la drive
plot( xi, yid/4, --); MatLab1_fig10
>> area = quad(myfun1, 0, 6*pi) grid on
Warning: Recursion level limit reached in quad. Singularity likely. title(cubic spline (ligne continue); drive (pointill))
> In /unige/matlab_5.2/toolbox/matlab/funfun/quad.m (quadstp) at line 102
Warning: Recursion level limit reached 806 times.
> In /unige/matlab_5.2/toolbox/matlab/funfun/quad.m at line 80
area =
0.6902

Exercice: Intgration double


a) Ecrivez une fonction myfun2 de votre choix deux variables.
b) Dessinez-l avec une fonction graphique 3D. Indication: utiliser mesgrid et mesh
c) Evaluez son intgrale double avec dblquad.
d) Mesurer le temps CPU ncessaire pour faire lintgration : utilisez cputime

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:

MatLab1.fm (15October2004) 25 MatLab1.fm (15October2004) 26


Exercice 6.3.1 : sinon pour A clairseme, il faut essayer la famille doutils que matlab met disposition dans
Ecrivez une fonction derpline(x, y, xi) qui calcule la drive par la mthode des splines, ce cas (voir la discussion dans Numerical Methods using Matlab, 2nd edition,
dune courbe dfinie par un ensemble de paires (x,y) et retourne la drive aux diffrentes va- G. Lindfield and J.Penny, Prentice Hall, 2000)
leurs spcifies dans un vecteur xi. Cette fonction doit pouvoir donner un message derreur si
les paramtres dentres ne sont pas ceux quelle attend. (Indication: sinspirer du script diff- b) Systmes valeurs propres et vecteurs propres
splines.m ci-dessus) Lquation de Schdinger indpendante du temps scrit H=E
Dans un solide priodique, la fonction donde se dcrit comme un combinaison linaire de
c) diffrentiation par polynmes fonctions orthonormes :
N
Exercice 6.3.2 : calculer la drive du polynme fitt plus haut sur les points (x;y):
x = [0 : 0.1 : 1]; ( r ) = bi i ( r )
y = [ -.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3 11.2]; i=1
Indication: utiliser polyder Lquation de Schrdinger se transforme en

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.

a) Systmes dquations linaires Illustration:


Le systme dquations linaires Voici comment se dcrivent les tats lectroniques dans un cristal de ReO3 (approximation des
a11*x1 + a12*x2 + ... + a1n*xn = b1 liaisons fortes, voir cours de Physique du Solide):
...
an1*x1 + an2*x2 + ... + ann*xn = bn % ReO3GX.m Band structure of ReO3 by the tight-binding method
scrit sous forme matricielle: A * x = b % Plot only Gamma-X; to plot X-M is left as exercise.
Il a une solution unique ssi rank(A) = rank([A b] )= n % (Adapted from a script written by Boris Ishii, DPT)
La solution est alors obtenue soit en utilisant la fonction inv dinversion de matrice: %
>>x = inv(A) * b clf; clear
d1=0.0592/2; Valeurs des paramtres de lHamiltonien (T. Chiba)
soit en utilisant \ la division matricielle par la gauche:
d4=0.4218/2;
>> x = A\b
p1=0.1324;
Cette seconde mthode donne des rsultats plus prcis, lorsquelle peut tre applique. p2=-0.221;
Exercice 6.4.1: a1=-0.2761/2;
Appliquer les lois de Kirchhoff et dOhm pour dcrire un circuit lectrique compos de rsist- b1=-0.2294/2;
ances formant une chelle. Dterminer le courant dans chaque boucle lorsquune extrmit de a=1;
lchelle est soumise une diffrence de potentiel. N=40; %Nombre de points o on dsire calculer les nergies propres
GX=pi/a; % GX est la limite de la zone de Brillouin (ZB) dans la direction kx
---r1------r4------r7------r10--- % Calcul pour (kx,ky,kz) entre (0,0,0) et (1,0,0)
| | | | | clear kx; kx=[0:GX/N:GX]; % varying kx
v0 r2 r5 r8 r11 nk = length(kx); % nombre de points kx
| | | | | ky=0.; kz=0.; % les composantes ky et kz du vecteur donde sont gardes 0.
---r3------r6------r9------r12--- clear E; % (redondant)
for j=1 : nk % boucle sur les points k le long du chemin dfini dans la ZB
sx=-2*i*p1*sin(0.5*kx(j)*a);
Note:
sy=-2*i*p1*sin(0.5*ky*a);
Selon le systme dquations linaires, on doit faire attention la mthode utilise. Si inv ne sz=-2*i*p1*sin(0.5*kz*a);
marche pas, voici un petit guide pour tenter de trouver une solution : Sx=i*p2*sin(0.5*kx(j)*a);
Si A est une matrice triangulaire rgulire, essayer \ Sy=i*p2*sin(0.5*ky*a);
sinon si A est dfinie positive ou carre symtrique ou hermitienne, essayer la factorisation Sz=-2*i*p2*sin(0.5*kz*a);
de Cholesky : chol % A ,le triangle suprieur de lHamiltonien est dfini par:
A=[d1 sx sy 0 0 0 0 0 0 0 0 0 0;
sinon si A est non carre, essayer la dcomposition QR (Q= othogonal unitary matrix,
0 b1 0 0 0 0 0 0 0 0 0 0 0 0;
R=upper triangular matrix, ) : qr 0 0 b1 0 0 0 0 0 0 0 0 0 0 0;

MatLab1.fm (15October2004) 27 MatLab1.fm (15October2004) 28


0 0 0 d1 sy sz 0 0 0 0 0 0 0 0; ode113 : Adams-Bashforth-Moulton.
0 0 0 0 b1 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 b1 0 0 0 0 0 0 0 0;
MatLab offre aussi une dmo (pas trs explicite) sur la solution des ODE:
>> odedemo
0 0 0 0 0 0 d1 sz sx 0 0 0 0 0;
0 0 0 0 0 0 0 b1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 b1 0 0 0 0 0; La stratgie pour rsoudre les ODE est dcrire une fonction (par exemple la fonction myode,
0 0 0 0 0 0 0 0 0 d4 0 Sx Sy Sz; contenue dans le M-file myode.m) qui dcrive le membre de droite de l quation rsoudre
0 0 0 0 0 0 0 0 0 0 d4 -sqrt(3)*Sx sqrt(3)*Sy 0; (voir help odefile).
0 0 0 0 0 0 0 0 0 0 0 a1 0 0; On peut alors obtenir la solution y ( t ) , dans un intervalle t=[tinitial tfinal] et pour des conditions
0 0 0 0 0 0 0 0 0 0 0 0 a1 0;
initiales dfinies dans y0 en utilisant ode45.
0 0 0 0 0 0 0 0 0 0 0 0 0 a1];
E(:,j)=sort(eig(A+A));%A+A= Hamiltonien,eig=valeurs propres,
%sort=classement Exemple simplicime: Refroidissement dun corps
end Le corps la temprature y0=100 est plong dans un milieu de temprature s=10. On suppose
[nb nk]=size(E); %nb: nombre de valeurs propres le taux de refroidissement K constant = -0.1.
figure(1)
hold; grid;
Lquation diffrentielle est : dy/dt = K(y-s). Le script myode.m est le suivant:
for n=1:nb
% myode.m :
plot(kx,E(n,:)) % graphe des bandes (valeurs propres de lHamiltonien H)
function yprime = myode(t, y)
end
yprime = -0.1 *(y-10);
axis([min(kx) max(kx) -0.6 0.8])
xlabel(kx)
ylabel(Energy) et lvolution dans le temps de la temprature y est obtenue en rsolvant lquation diffren-
title(Structure de bandes du ReO3 : G-X); tielle laide de ode45 : (fichier refroidissement.m)
>> tinitial=0 ;
Cet exemple illustre admirablement le language synthtique et les outils quoffre MatLab! >> tfinal=60 ;
>> y0=100 ;
>> [t y] = ode45(myode, [tinitial tfinal], y0)
Exercice 6.4.2: >> plot(t,y); xlabel(time); ylabel(temperature);
Dterminez les frquences propres (naturelles) du systme de ressorts coupls ci-dessous.
% __ __ ode45 (et les autres) permet de rsoudre des systmes de plusieurs ODE coupls. On va utiliser
% //| | | k4 | |
% //| k1 | |--------/\ \ \ \------- | |
cette proprit dans lexemple ci-dessous.
% //|--/\ \ \--| | __ |m3|
% //| |m1| k2 | | k3 | | Exemple: tir ballistique dans le vide
% //| | |--/\ \ \--|m2|--/\ \ \--| | Une transformation de variable permet de rsoudre les quations du 2me ordre.
% //| |__| |__| |__| composante horizontale du tir ; composante verticale du tir
% Les quations du mouvement sont:
% |--> q1 |--> q2 |--> q3
%
x = 0 ; z = g
% Pour ramener ces quations du 2me ordre au premier ordre
on effectue les transformations de variables suivantes:
X(1) = x ; X( 2 ) = z
6.5 Equations diffrentielles ordinaires (ODE) X(3) = x ;

X( 4 ) = z

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)

MatLab1.fm (15October2004) 29 MatLab1.fm (15October2004) 30


0
-g ]; 6.6 Zros et minima de fonctions; fits
et le M-file qui rsoud le problme du tir ballistique et fait le dessin est: a) Recherche des zros dune fonction
hump est une fonction prdfinie dans MatLab (voir MatLab1_fig12 )
% BALLISTIC.M tir ballistique simple dans le vide
% exemple de rsolution dODE avec MatLab
% utilise la fonction ballisticODE.m qui dfinit les ODE rsoudre

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.

Fonctions une dimension (modle 1 paramtre) :


>> fminbnd(humps, 0, 1) % cherche le minimum de la fonction humps entre 0
et 1
ans =
MatLab1_fig11 0.63700873404437
Ici galement, fminbnd ne retourne quun seul minimum:
Exercice 6.5.2 : >> fminbnd(cos, 0, 6)
Rsolvez les quations du mouvement pour les ressorts coupls de lexercice 6.4.2 ans =

MatLab1.fm (15October2004) 31 MatLab1.fm (15October2004) 32


3.14159268915185
>> fminbnd(cos, 0, 15) 6.7 Filtrage de signaux
ans =
9.42477753165182 Le filtrage des signaux est un trs vaste domaine. On trouvera une srie de filtres prts lem-
ploi dans divers toolbox. Citons les fonctions:
Fonctions plusieurs dimensions (modles plusieurs paramtres) : conv - convolution
Dans ce cas, on utilise fminsearch, de manire fort semblable fminbnd. filter - 1D Digital filter
filter2 - 2D Digital filter
Exercice 6.6.1: latcfilt - Lattice filter
Ecrivez un script fit.m qui fir1, fir2 ...-Window based FIR filter design (Finite Impulse Response)
1) gnre une mesure m(x) dcrite par une gaussienne avec du bruit (utiliser randn). medfilt1 - 1D median filtering
2) fitte un modle gaussien g(x) en utilisant fminsearch. Les paramtres du modle seront: besself - Bessel analog filter
la position x0 du centre de la gaussienne,
la largeur de la gaussienne Exemple 1: Utilisation simple de filter:
lamplitude de la gaussienne A filtrage dun signal bruyant avec une fonction carre constante:
% TEST_FILTER.M test de la fonction filter
Pour utiliser fminsearch, il faudra crire une fonction fitgaus qui retourne la somme des rsid- % Filtrage dun signal bruyant avec une fonction
us entre la mesure et le modle. Le rsidu au point x est: (m(x) - g(x))2 . Utiliser sum. % carre de largeur 2*m + 1 .
3) Construire une figure en deux parties lune montrant la mesure avec le modle de dpart et %
lautre la mesure avec le fit obtenu. (MatLab1_fig13 )
Rappel : gaussienne : clear
2 figure(1)
( x x0 ) clf
g ( x ) = A exp --------------------
2
- subplot(2,1,1)
2 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 fentre constante)

m = 5; % Demi largeur de la fentre de filtrage


b = ones(2*m+1, 1) ./(2*m+1) ;
Filtered = filter(b, 1, Noisy);
% compensation du retard introduit par le filtre:
Filtered(1:m-1) = Noisy(1:m-1);
Filtered(m:N-m) = Filtered(m+m:N);
Filtered(N-m+1:N) = Noisy(N-m+1:N);
plot(t, Filtered+0.2,-r)

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

MatLab1.fm (15October2004) 33 MatLab1.fm (15October2004) 34


Cet exemple montre clairement leffet de retard introduit par filter. Exemple 2 : Utilisation plus subtile de filter:
Filtre de Savitzky-Golay : ce filtre revient fitter localement un polynme.

% TEST_FILTER2.M test de la fonction filter


% Filtrage dun signal bruyant avec un polynme de degr M
% fitt localement au signal.
% (mthode de Savitzky-Golay, daprs Gander & Hrebicek, chap. 9)
%

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)

Rsultat: Voir figure MatLab1_fig15

MatLab1_fig14

MatLab1.fm (15October2004) 35 MatLab1.fm (15October2004) 36


Exercice 6.7.1:
a) Ecrivez un script TEST_CONV.M qui filtre le signal de TEST_FILTER.M par convolution
avec une fonction gaussienne. Utiliser conv.
b) Dconvoluez le rsultat pour tenter de retrouver le signal de dpart. Utiliser deconv.

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.

%REX.M dmonstration de filtrage non-linaire


% - lit un signal propre comprenant des petits pics localiser
% - met ce signal lchelle du comptage dsir au pic
% - ajoute du bruit selon la rpartition statistique
% - value le signal filtr en
% prenant la N- me drive du signal
% leve la puissance p
% typical run:
% peak count > 100000
% with noise=1, without noise=0 [1/0]> 1
% order of differentiation > 2
% power > 2
%
%Lecture du signal y=f(x) dans le fichier test.dat
clear; clf
load test.dat
x=[test(:,1)];
y=[test(:,2)];
%
% scale the signal to the amplitude an at the peak
maxy=max(y);
y=y./maxy;
n=max(size(x));
an=input(peak count >);
y=y.*an;
%
% add noise following the sqrt(signal) hypothesis
noise=randn(n,1);
noise=noise.*sqrt(y);
sw=input(with noise=1, without noise=0 [1/0]>);
noise=noise.*sw;
y=y+noise;
plot(x,y);
%
% non-linear filtering
i=input( order of differentiation >);
xdi=[x(1:n-i)];
ydi=diff(y,i);
p=input(power >);
ydp=ydi.^p;
maxydp=max(ydp);
ydp=ydp./maxydp;
MatLab1_fig15 fin=cumsum(ydp);

MatLab1.fm (15October2004) 37 MatLab1.fm (15October2004) 38


maxfin=max(fin);
minfin=min(fin); 6.8 Optimisation
fin=fin./(maxfin-minfin);
fin=fin.*an; Au paragraphe 6.6 nous avons abord la minimalisation. On appelle gnralement optimisation
plot(x,y,-,xdi,fin,-) une minimalisation sous contraintes. Pour traiter ce type de problme avec Matlab, il faut avoir
grid disposition la Optimization Toolbox qui ne fait pas partie de Matlab lui-mme. Cette toolbox
est disposition sur le rseau de lUniversit, mais le nombre de licences est assez restreint.
Exercice 6.7.2: help optim donne les grandes lignes des outils de cette toolbox
Observez comment se comporte le filtre rex.m helpdesk fournit une description plus dtaille.
- a) sans bruit (dans ce cas, le taux de comptage dans le pic ne joue pas de rle). Essayez no- Au travers dun exemple et dun exercice, nous allons tudier deux des fonctions doptimisation
tamment n=2 p=1; n=3 p=1 et n=3 p=3. (voir MatLab1_fig16 ) disponibles.
- b) avec du bruit, en fonction du taux comptage accumul dans votre signal
Exemple doptimisation :

% LinearProg -- Programmation linaire en Matlab: fonction LINPROG


% (Daprs lexemple du helpdesk)
%
% Trouver x=(x1, x2, x3) qui minimise f(x) = -5x1 -4x2 -6x3
% avec les contraintes:
% x1 - x2 + x3 <= 20,
% 3x1 + 2x2 + 4x3 <= 42,
% 3x1 + 2x2 <= 30,
% x1 >= 0, x2 >= 0, x3 >= 0

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

MatLab1.fm (15October2004) 39 MatLab1.fm (15October2004) 40


Exercice 6.8.1: % demand sil tait possible dutiliser une stratgie plus adquate.
%
Dterminer un acier aux proprits donnes, partir de relations empiriques. % La mthode prsente ici est base sur la thorie de loptimisation
Le problme est expos ci-dessous: % (minimalisation sous contraintes) qui consiste, partir dun acier de
% dpart, descendre dans lespace de minimalisation jusquau minimum qui
% Steels -- Synthse dun alliage aux proprits spcifiques % donnera lacier aux proprits optimum. Un bmol : la solution peut toujours
% % ntre que un minimum local. Il faut donc la vrifier avec soin.
% P. Comte (Institut Straumann) a tabli exprimentalement des relations % Une difficult rsolue par cette mthode : le respect de contraintes, qui
% empiriques qui permettent de dterminer les proprits dun acier. % peuvent tre de plusieurs types : ingalits, galits, limites infrieures
% On voudrait, en utilisant ces relations, trouver des aciers qui auraient % et/ou suprieures.
% des proprits donnes. %
% % En Matlab, les problmes doptimisation peuvent se rsoudre aisment avec
% Ennonc du problme : % une des fonctions du "toolbox" doptimisation. Nous utiliserons fminimax.
% %
% Les lments composant lalliage sont : Fe Ni C Mn N Mo Si Nb et le Cr. % Pour fminimax, il faut fournir une fonction de "rsidus", ce que lon peut
% % faire en valuant:
% Les proprits considres sont : %
% Sigma02 : le coefficient dallongement 0.2% % residu dune proprit de lacier x =
% Uts : Ultimate tensile strenght - tension de rupture % (proprit dsire - proprit obtenue pour lacier x)^2
% Gamma : module dlasticit %
% Cor1 : indice de corrosion % La fonction (ResiduProprietes dans lexemple ci-dessous) doit fournir un
% Prix % vecteur contenant le rsidu pour chaque proprit. Comme les paramtres
% % de la fonction sont dfinis, on devra passer les autres quantits
% Si on dnote par Fe, Ni, ... la concentration (%) de Fer, de Nickel, ... % ncessaires par lintermdiaire de variables globales.
% dans lalliage, Comte a dcrit les proprits de lalliage
% par les relations suivantes :
%
% Sigma02 = 1*Fe + 2*Ni + 36*C + 3*Mn + 50*N + 1*Mo + 2*Si + 4*Nb + 1*Cr + 7
% Uts = 2*Fe + 1*Ni + 55*C + 3*Mn + 86*N + 2*Mo + 4*Si + 8*Nb + 0*Cr + 46
% Gamma = 3*Fe + 1*Ni + 30*C + 1*Mn + 30*N + 2*Mo + 4*Si + 1*Nb + 3*Cr
% Cor1*10 = 1*Fe + 3*Ni + 2*C + 1*Mn + 2*N +30*Mo + 1*Si + 2*Nb + 10*Cr
% Prix = 1*Fe + 3*Ni + 1*C + 1*Mn + 0*N + 1*Mo + 1*Si + 2*Nb + 6*Cr
%
% Ces relations sont valables dans le domaine de concentrations suivantes :
% 25 <= Fe <= 40
% 25 <= Ni <= 40
% 0.01 <= C <= 0.1
% 1 <= Mn <= 7
% 0.1 <= N <= 1
% 1 <= Mo <= 10
% 0.2 <= Si <= 2
% 0.3 <= Nb <= 3
% 15 <= Cr <= 35
%
% Finalement, il faut imposer que la somme des concentrations gal 100%
%
% Rsolution du problme :
%
% En examinant les relations, on voit que le problme est mal dtermin,
% donc numriquement instable. Un algorithme de minimalisation tel que
% fminsearch nest donc pas adquat.
%
% P. Comte a dvelopp une stratgie "Monte-Carlo" pour trouver les aciers
% aux proprits recherches : on tire au hasard un grand nombres daciers
% et on slectionnne celui qui a les proprits les plus proches de celles
% dsires. Cette approche ncessite beaucoup de temps CPU si on veut tre
% sr de ne pas tre trop loin de la bonne solution. Lindustriel nous a alors

MatLab1.fm (15October2004) 41 MatLab1.fm (15October2004) 42


Appendice 1 : Appendice 2 : Tableaux de fonctions
Les principales toolbox disponibles sur le serveur de MatLab lUniversit Extrait de : Mastering Matlab 5, D. Hanselman, B. Littlefield, Prentice Hall, 1998.

calfem - Finite Element Toolbox


communications - Communication Toolbox Operations
compiler - MATLAB Compiler
control - Control System Toolbox
ident - System Identification Toolbox
images - Image Processing Toolbox
local - Preferences
nnet - Neural Network Toolbox
optim - Optimisation Toolbox
signal - Signal Processing Toolbox
simulink - model/system-based design
stateflow - Logic and Command Toolbox
stateflow/sfdemos - Stateflow Demonstrations
stats - Statistics Toolbox
symbolic - Symbolic Math Toolbox
La liste dtaille dpend de lenvironnement de travail. Elle est fournie par la commande ver.

Syntaxe dadressage

MatLab1.fm (15October2004) 43 MatLab1.fm (15October2004) 44


Matrices spciales Fonctions matriceilles (suite)

Fonctions matricielles

MatLab1.fm (15October2004) 45 MatLab1.fm (15October2004) 46


Tratiement de donnes Transformes de Fourier

MatLab1.fm (15October2004) 47 MatLab1.fm (15October2004) 48


Table des Matires 6. Quelques applications de Matlab
6.1 Fits et interpolations 24
6.2 Intgrations 25
6.3 Diffrentiations 25
6.4 Algbre linaire 27
Introduction 2
6.5 Equations diffrentielles ordinaires (ODE) 29
6.6 Zros et minima de fonctions; fits 32
1. Aspects lmentaires 6.7 Filtrage de signaux 34
1.1 Aides 3 6.8 Optimisation 40
1.2 Variables scalaires, workspace, oprations lmentaires 3
1.3 Commentaires, ponctuation 3 Appendices
1.4 Variables spciales 4 A.1 Les toolbox disponibles lUniversit 43
1.5 Nombres complexes 4 A.2 Tableaux de fonctions 44
1.6 Fonctions mathmatiques 4
1.7 Affichage 5
1.8 Entres-sorties 6
1.9 Terminer Matlab 6
1.10 Personnaliser Matlab 6

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

MatLab1.fm (15October2004) 49 MatLab1.fm (15October2004) 50

Vous aimerez peut-être aussi