Vous êtes sur la page 1sur 17

Guide M ATLAB

Court tutoriel pour les tudiants de MTH2210 dition du 26 aot 2009

Steven Dufour cole Polytechnique de Montral

Copyright c 2009 STEVEN DUFOUR License dtaille : http://creativecommons.org/licenses/by-nc-sa/2.5/ca/legalcode.fr

Guide M ATLAB

Introduction
Ce court guide dintroduction M ATLAB a pour but de tenter de faciliter vos premiers contacts avec ce logiciel et de vous servir de rfrence lorsque vous complterez vos travaux pratiques dans le cadre du cours MTH2210. Le but nest pas de vous fournir un guide complet des commandes M ATLAB, mais plutt de vous donner les outils ncessaires, sans plus, an de pouvoir fonctionner dans ce cours. En dautres termes, tout ce dont vous avez besoin est l. Sinon, des informations supplmentaires vous seront donnes dans lnonc des problmes rsoudre. Ce guide prend en compte que vous tes des aspirants ingnieurs, i.e. que vous tes dj rompus linformatique et que vous tes sufsamment curieux pour faire un effort personnel an de devenir comfortable utiliser cet outil. La prsentation est donc la plus directe possible et nous ne ferons aucune introduction sur lutilisation de linterface graphique de M ATLAB. Explorez! Plusieurs caractristiques de M ATLAB en font un outil simple et puissant. M ATLAB est un langage interactif, i.e. ds que vous entrez une commande, vous avez une rponse immdiate du logiciel. M ATLAB soccupe de dterminer le type et la taille des variables mises en mmoire, ce qui facilite la tche du programmeur en lui permettant dexprimenter et de se concentrer sur le problme rsoudre. Tous les types de M ATLAB sont bass sur la notion de matrice. Un scalaire est une matrice de taille 1 1, un vecteur est une matrice de taille n 1 ou 1 n, etc. Un autre concept de base de M ATLAB est que si vous vous demandez quel est le calcul quune commande excutera, en gnral il sagit de lopration la plus naturelle. Finalement, lapprentissage de lapproche vectorielle de M ATLAB sera utile pour ceux qui auront utiliser des ordinateurs architecture vectorielle ou parallle. La premire section de ce guide est un court tutoriel, qui peut tre vu comme votre premire session M ATLAB. Il couvre les commandes et la philosophie de base de M ATLAB. Vous trouverez ensuite un court catalogue de commandes M ATLAB, sous la forme dun tableau. Ce format a pour but de vous permettre de trouver rapidement la commande dont vous avez besoin. Pour chaque commande, un exemple dutilisation est donn, avec un commentaire ou une illustration du rsultat. Une courte bibliographie est donne en annexe, pour ceux qui veulent aller plus loin dans leur apprentissage de M ATLAB. Lorsque ce document est consult en ligne laide du logiciel Acrobat, les hyperliens dirigeront votre fureteur vers les documents pertinents. Ce guide est dynamique. Je suis ouvert toute suggestion de correction ou de modication. Des mises-jour de ce document seront rendues disponibles sur une base rgulire. Consultez la date de ldition pour voir si le document a t mis jour. Dans le but de crer des textes acadmiques, techniques et scientiques de qualit, ce document est protg par une license Creative Commons .

Steven Dufour cole Polytechnique de Montral mathappl.polymtl.ca/steven/ Le 26 aot 2009

Guide M ATLAB

Tutoriel
Les premiers pas
Une fois M ATLAB lanc, nous sommes en prsence de linvite ( prompt ) de M ATLAB :
>>

M ATLAB est prt recevoir nos commandes :


>> a=1 a = 1 % tout ce qui vient aprs le symbole % est un commentaire

Notons quil nest pas ncessaire de dclarer le type ou la taille de a. Nous voyons aussi un des avantages de travailler avec un langage interactif : nous avons une rponse immdiate de M ATLAB.
>> A=2 A = 2 >> a a = 1 >> A A = 2 % un autre scalaire, i.e. une matrice de taille 1x1

% on peut vrifier ce que contient une variable

% a et A sont des symboles diffrents

Voici comment dclarer un vecteur et une matrice :


>> b=[1 2] % un vecteur ligne de dimension 1x2 b = 1 2 >> b=[1,2] % la mme chose b = 1 2 >> c=[3;4;5] % un vecteur colonne de dimension 3x1 c = 3 4 5 >> d=[0.1 pi sqrt(2) 2+2 eps] % laissez aller votre imagination d = 0.1000 3.1416 1.4142 4.0000 0.0000 >> A=[1 2;3 4] % une matrice de dimension 2x2 (on crase A=2) A = 1 2 3 4

On aura une meilleure ide de ce que contient d en changeant le format dimpression :


>> format short e % on aurait aussi pu utiliser <<format long e>> >> d d = 1.0000e-01 3.1416e+00 1.4142e+00 4.0000e+00 2.2204e-16 >> format % on revient au format initial

Guide M ATLAB On peut facilement faire la concatnation de tableaux :


>> B=[A;b] B = 1 3 1 >> C=[c B] C = 3 4 5 % on peut joindre une matrice et un vecteur ligne 2 4 2 % ou une matrice et un vecteur colonne 1 3 1 2 4 2

On va chercher les composantes des tableaux de la mme faon quavec les autres langages :
>> c(2) ans = 4 >> A(1,2) ans = 2 >> A(3) ans = 2 % la deuxime composante de c

% la composante de A en premire ligne, deuxime colonne

% ou, puisque les entres sont stockes par colonne...

Si nous nassignons pas le rsultat dun calcul une variable, M ATLAB met le rsultat dans la variable ans ( answer ), que nous pouvons utiliser au mme titre que les autres variables :
>> ans(1)+sin(1)+pi ans = 5.9831 % MATLAB peut tre utilis comme une calculatrice

M ATLAB nous donne plus de libert que les autres langages pour accder aux composantes des tableaux :
>> c([2,3]) ans = 4 5 >> A([2,3,4]) ans = 3 2 % les deuxime et troisime composantes de c

% les composantes (1,2), (2,1) et (2,2) de A 4

Lopration prcdente peut vous sembler plus intuitive si nous utilisons la commande sub2ind :
>> indices=sub2ind(size(A),[2,1,2],[1,2,2]); >> A(indices) ans = 3 2 4

Une condition boolenne peut aussi tre utilise pour accder aux composantes voulues :
>> A(A>3) ans = 4 % les composantes de A suprieures 3

Guide M ATLAB
>> A(mod(A,2)~=0) ans = 1 3 % on recherche les entres impaires

Dans lenvironnement M ATLAB, une expression boolenne vraie est gale 1 et une expression fausse est gale 0. Les oprateurs boolens sont similaires ceux rencontrs en C, soient == , , & et | pour nen nommer que quelques-uns. Il est facile de modier les matrices :
>> A(1,1)=0 A = 0 2 3 4 >> A(3,3)=9 A = 0 2 3 4 0 0 % noubliez pas que les indices commencent 1

% la matrice est redimensionne automatiquement 0 0 9

Nous sommes aussi assurs que les autres nouvelles composantes seront initialises 0 . M ATLAB nous donne aussi des outils puissants pour modier les tableaux. Voici deux exemples :
>> A([6,8])=[7,5] % puisque les entres sont stockes par colonne A = 0 2 0 3 4 5 0 7 9 >> A(sub2ind(size(A),[1,3,1],[1,1,3]))=1 % quel est le rsultat?

Nous verrons dautres exemples la section suivante. Si nous ne nous souvenons plus des variables que nous avons utilises :
>> whos Name A B C a ans b c d indices Size 3x3 3x2 3x3 1x1 2x1 1x2 3x1 1x5 1x3 Bytes 72 48 72 8 16 16 24 40 24 Class double double double double double double double double double array array array array array array array array array

Grand total is 40 elements using 320 bytes

Nous voyons que tous les objets crs sont des matrices avec des composantes stockes comme des rels en format double prcision IEEE, mme si nous avons dni ces tableaux laide dentiers.

Guide M ATLAB

Loprateur :
Un outil puissant de M ATLAB est loprateur : :
>> x=1:10 % cration dun vecteur ligne form de 10 entiers x = 1 2 3 4 5 6 7 8 9 10 >> x=10:-1:1 % rebours x = 10 9 8 7 6 5 4 3 2 1 >> x=0:0.1:0.5 % avec un incrment de 0.1 plutt que 1 x = 0 0.1000 0.2000 0.3000 0.4000 0.5000

On peut utiliser loprateur : pour extraire plusieurs composantes dun vecteur ou dune matrice :
>> d=x(2:4) % on va chercher les composantes 2, 3 et 4 du vecteur x d = 0.1000 0.2000 0.3000 >> B=A(2:3,2:3) % soutirons une sous-matrice 2x2 de la matrice A B = 4 5 7 9 >> e=A(2,:) % ou si on veut extraire la deuxime ligne de A e = 3 4 5 >> e=A(2:end,1) % utilisons le dernier indice de la ligne (end=3 ici) e = 3 1

Un outil utile pour modier les matrices est le tableau vide [] :


>> C(2,:)=[] C = 3 1 5 1 % on peut effacer la deuxime ligne de C 2 2

qui est plus pratique que la commande quivalente C=C([1 3],:) pour de grands tableaux. Loprateur : peut aussi tre utilis pour intervertir les lignes et les colonnes des tableaux :
>> C(:,[3 2 1]) ans = 2 1 2 1

3 5

Guide M ATLAB

Les oprations mathmatiques


Les oprations de M ATLAB entre vecteurs et matrices suivent les conventions utilises en mathmatiques :
>> x=(1:3); >> y=(3:-1:1); >> x-y ans = -2 0 2 >> x*y ??? Error using ==> * Inner matrix dimensions must agree.

Du point de vue de lalgbre linaire, nous ne pouvons pas multiplier deux vecteurs lignes. Utilisons loprateur de transposition :
>> x*y ans = 10 >> dot(x,y); % on obtient le mme rsultat >> B*b % mme problme entre la matrice B et b=[1 2] ??? Error using ==> * Inner matrix dimensions must agree. >> B*e % pas de problme avec e=[3;1] ans = 17 30

Pour ce qui est des oprations matrice-matrice :


>> B*C % ans = 37 9 18 66 16 32 >> B^2 % ans = 51 65 91 116 >> B\C % ans = 2 4 8 -1 -3 -6 >> inv(B)*C % ans = 2.0000 4.0000 -1.0000 -3.0000 >> b/B % ans = -5 3 produit matrice-matrice

lopration B*B

les divisions matricielles

qui est quivalent B\C 8.0000 -6.0000 qui est quivalent b*inv(B)

Guide M ATLAB Ce qui nous mne naturellement vers la rsolution dun systme dquations linaires Ax D c : E E
>> x=A\c x = 0.4231 1.6923 -0.8077 % rsolution par factorisation LU, et non par inv(A)*c

Une autre caractristique de M ATLAB qui en fait un outil puissant est sa srie doprations sur les composantes des tableaux :
>> B/2 ans = 2.0000 3.5000 >> B+1 ans = 5 6 8 10 % chaque composante est divise par 2 2.5000 4.5000 % on ajoute 1 chaque composante de B (et non B+I)

qui donne le mme rsultat que


>> B+ones(2,2) ans = 5 6 8 10 % ones(2,2) est une matrice de <<1>> de dimension 2x2

Les fonctions mathmatiques lmentaires sont aussi dnies sur les composantes des tableaux :
>> sqrt(B) ans = 2.0000 2.6458

2.2361 3.0000

Quen est-il des oprations *, / et sur les composantes des tableaux? Cest ici que loprateur . vient simplier notre tche :
>> B.*B ans = 16 49 >> C.^2 ans = 9 25 % B(i,j)*B(i,j) plutt que B*B 25 81 % C(i,j)^2 plutt que C^2=C*C, qui na pas de sens ici 1 1 4 4

Par exemple, ces oprations sont utiles pour simplier limpression de tableaux de rsultats numriques :
>> n=1:5; >> [n ; n.^2 ; 2.^n] ans = 1 1 2 2 4 4 3 9 8 4 16 16 5 25 32

Nous verrons plus loin que cette notation est souvent utilise pour dnir des fonctions.

Guide M ATLAB

Les programmes M ATLAB (chiers-M)


An dviter de devoir retaper une srie de commandes, il est possible de crer un programme M ATLAB, connu sous le nom de chier-M ( M-le ), le nom provenant de la terminaison .m de ces chiers. Il sagit, laide de lditeur de M ATLAB (Menu File ! New ! M-File ) ou dun diteur de texte, de crer un chier en format texte qui contient une srie de commandes M ATLAB. Une fois le chier sauvegard (sous le nom nomdefichier.m par exemple), il sagit de lappeler dans M ATLAB laide de la commande :
>> nomdefichier

Les commandes qui y sont stockes seront alors excutes. Si vous devez apporter une modication votre srie de commandes, vous navez qu modier la ligne du chier-M en question et rexcuter le chier-M en entrant le nom du chier dans M ATLAB nouveau (essayez la touche "). Cette procdure vous vite de retaper une srie de commandes rptition. Cest la procdure recommande pour vos travaux pratiques. Il est possible de programmer des boucles et des branchements dans les chiers-M :
for i=1:10 if i<5 x(i)=i; else x(i)=0; end end % % % % boucle for branchement noubliez pas votre point-virgule, sinon... on peut utiliser le else

% on noublie pas de terminer le branchement % et la boucle

Le point-virgule la n dune ligne signale M ATLAB de ne pas afcher le rsultat de lopration lcran. Une pratique courante est de mettre des ; la n de toutes les lignes et denlever certains de ceux-ci lorsque quelque chose ne tourne pas rond dans un programme, an de voir ce qui se passe. En gnral, on essaie dviter un tel programme. Puisque lon utilise un langage interactif, ce bout de code fait un appel au logiciel chaque itration de la boucle et chaque valuation de la condition. De plus, le vecteur change de taille chaque itration. M ATLAB doit donc faire une demande au systme dexploitation pour avoir plus de mmoire chaque itration. Ce nest pas trs important pour un programme de petite taille, mais si on a un programme qui fait une quantit importante de calculs, un programme optimis peut tre acclr par un facteur 1000! Il est possible dviter ces goulots dtranglement en demandant initialement lespace mmoire ncessaire vos calculs, puis en vectorisant la structure du programme :
x=zeros(1,10); x(1:4)=1:4; % un vecteur de dimension 1x10 est initialis zro % une boucle laide de loprateur <<:>>

Dans cet exemple, lespace mmoire nest allou quune seule fois et il ny a que deux appels faits M ATLAB . Notons que le concept de vectorisation nest pas particulier M ATLAB . Il est aussi prsent dans les langages de programmation dordinateurs vectoriels et parallles. Ceci tant dit, prcisons que la vectorisation dalgorithmes est un art difcile matriser et qui demande du travail. Les programmeurs expriments prennent lhabitude de dbuter leurs programmes M ATLAB avec une srie de leurs commandes prfres qui ont pour but dviter les mauvaises surprises. Par exemple :
>> >> >> >> clear all; format compact; format short e; dbstop if error % % % % on efface toutes les variables, fonctions, ... supression des sauts de lignes superflus viter quune petite quantit saffiche 0.0000 facilite limpression dune variable en cas derreur

Guide M ATLAB

Les fonctions M ATLAB


En plus des fonctionnalits de base de M ATLAB, une vaste bibliothque de fonctions (les toolbox en langage M ATLAB) sont votre disposition. Pour avoir une liste des familles de fonctions qui sont disponibles, entrez la commande help. Pour voir la liste des fonctions dune famille de fonctions, on peut entrer help matfun par exemple, an de voir la liste des fonctions matricielles. Pour obtenir de linformation sur une fonction en particulier, il sagit dutiliser la commande help avec le nom de la fonction, soit help cond pour avoir de linformation sur la fonction cond. Si la fonction na pas t compile an de gagner de la vitesse dexcution, il est possible de voir le code source en entrant type cond, par exemple. Il est aussi possible de crer ses propres fonctions M ATLAB. Le concept de fonction en M ATLAB est similaire aux fonctions avec dautres langages de programmation, i.e. une fonction prend un/des argument(s) en entre et produit un/des argument(s) en sortie. La procdure est simple. Il sagit de crer un chier-M, nommons-le mafonction.m. Ce qui diffrentie un chier-M dune fonction est que la premire ligne de la fonction contient le mot clef function, suivi de la dnition des arguments en entre et en sortie. Par exemple, voici une fonction qui interverti lordre de deux nombres :
function [y1,y2]=mafonction(x1,x2) % % Dfinition de la fonction "mafonction": % arguments en entre: x1 et x2 % arguments en sortie: y1 et y2 % y1 = x2; y2 = x1;

Il sagit ensuite dappeler votre fonction linvite M ATLAB :


>> [a,b]=mafonction(1,2) a = 2 b = 1

Si on veut dnir une fonction pour calculer x 2 , on crira


function y=carre(x) % % Dfinition de ma fonction x^2 % y = x*x;

En entrant help carre, vous verrez les lignes de commentaires qui suivent immdiatement le mot clef function :
>> help carre

Definition de ma fonction x^2

Utilisez cette fonctionnalit pour vos fonctions. Les communications entre les fonctions et les programmes se font donc laide des arguments en entre et en sortie. La porte des variables dnies lintrieur dune fonction est donc limite cette fonction.

Guide M ATLAB

10

Cependant, dans certaines situations, il peut tre pratique davoir des variables globales, qui sont dnies laide de la commande global :
function y=Ccarre(x) % % Dfinition de la fonction (C^3)*x^2 % global C % variable globale, initialise lextrieur de Ccarre e = 3 % variable locale a Ccarre, donc invisible ailleurs y = (C^e)*(x*x); C = 1 % C est modifie partout ou elle est dfinie globalement

o la variable C serait aussi dnie comme globale dans les chiers-M o on veut y avoir accs. Par convention, les variables globales sont crites en majuscules.

Les graphiques
La fonction de base pour tracer un graphique avec M ATLAB est la commande plot qui prend comme arguments une srie de points donns sous la forme de 2 vecteurs, quelle relie de segments de droites. Cest la responsabilit de lutilisateur de gnrer assez de points pour quune courbe rgulire paraisse rgulire lcran. De plus, il est possible de donner des arguments additionnels, ou dutiliser dautres fonctions, pour contrler lapparence dun graphique :
>> >> >> >> >> >> >> x=0:0.1:2*pi; plot(x,sin(x),b-o,x,cos(x),m--+); axis([0 2*pi -1.1 1.1]); title(Le titre du graphique); xlabel(Laxe des x); ylabel(Laxe des y); legend(sinus,cosinus); % lordonne % le graphe du sinus et du cosinus % dfinition des axes

Ces commandes donnent comme rsultat :


Le titre du graphique 1 0.8 0.6 0.4 Laxe des y 0.2 0 0.2 0.4 0.6 0.8 1 0 1 2 3 Laxe des x 4 5 6 sinus cosinus

On aurait aussi pu tracer ce graphique avec les commandes :


>> >> >> >> >> clf reset hold on plot(x,sin(x),b-o); plot(x,cos(x),m--+); hold off % on rinitialise lenvironnement graphique % un premier graphique % on superpose un deuxime graphique

Guide M ATLAB La commande hold vite que le premier graphique soit cras par le deuxime.

11

Loprateur : nest pas idal pour crer le vecteur x dans ce contexte. Comme vous pouvez le voir sur la gure prcdente, x(end) nest pas gal 2 . Dans ce cas, on prfre utiliser la commande linspace pour gnrer le nombre de points voulu dans un intervalle donn, alors que loprateur : nous donne plutt le contrle sur la distance entre les points.
>> x1=0:1:2*pi % combien a-t-on de points entre 0 et 2*pi? x1 = 0 1 2 3 4 5 6 >> x2=linspace(0,2*pi,7) % ici on sait quon en a 7, allant de 0 2*pi x2 = 0 1.0472 2.0944 3.1416 4.1888 5.2360 6.2832

On peut aussi comparer des rsultats sous forme graphique laide de la commande subplot :
>> >> >> >> subplot(2,2,1); subplot(2,2,2); subplot(2,2,3:4); axis([0 2*pi -1.1
1 0.5 0 0.5 1 0 2 4 6

plot(x,sin(x),b-o); axis([0 2*pi -1.1 1.1]); plot(x,cos(x),m-+); axis([0 2*pi -1.1 1.1]); plot(x,sin(x),b-o,x,cos(x),m--+); 1.1]);
1 0.5 0 0.5 1 0 2 4 6

1 0.5 0 0.5 1 0 1 2 3 4 5 6

La fonction fplot facilite le trac de graphes de fonctions, en automatisant le choix des points o les fonctions sont values :
>> fplot([sin(x),cos(x)],[0 2*pi],b-+)

On perd cependant de la latitude dans le choix de certaines composantes du graphique. Finalement, les graphiques tridimensionnels, de type paramtrique, sont tracs laide dune gnralisation de la commande plot :
>> >> >> >> >> >> t=linspace(-5,5,1000); x=(1+t.^2).*sin(20*t); y=(1+t.^2).*cos(20*t); z=t; plot3(x,y,z); grid on; % utilisation de loprateur <<.^>>

qui donne comme rsultat :

Guide M ATLAB

12

5 30 20 10 0 10 20 30 30 20 0 10 10 20 30

Pour ce qui est des graphes tridimensionnels, une tape intermdiaire est ncessaire avant dutiliser les diverses commandes notre disposition :
>> >> >> >> >> >> >> >> x=linspace(0,pi,50); y=linspace(0,pi,50); [X,Y]=meshgrid(x,y); % on gnre une grille sur [0,pi]x[0,pi] Z=sin(Y.^2+X)-cos(Y-X.^2); % encore loprateur <<.^>> subplot(2,2,1); mesh(Z); subplot(2,2,2); mesh(Z); hidden off; subplot(2,2,3); surf(Z); subplot(2,2,4); surf(Z); shading interp

2 50 20 40

60

2 50 20 40

60

2 50 20 40

60

2 50 20 40

60

Guide M ATLAB

13

Les sorties formattes


Nous aurons souvent prsenter des rsultats numriques sous la forme de tableaux de nombres. Les programmeurs C ne seront pas dpayss par les commandes M ATLAB qui nous permettent de formatter lcriture dans des chiers :
>> uns=(1:5) ones(5,2) uns = 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 >> sortie=fopen(sortie.txt,w); >> fprintf(sortie,\t%s\n,Une serie de uns:); >> fprintf(sortie,\t%s\n,-----------------); >> fprintf(sortie,\t%2d %4.2f %5.2e\n,uns); >> fclose(sortie); % cration dun tableau

% % % % %

ouverture du fichier criture de caractres, dentiers et de rels attention la transpose fermeture du fichier

o la sortie dans le chier sortie.txt sera :


>> type sortie.txt Une serie de uns: ----------------1 1.00 1.00e+00 2 1.00 1.00e+00 3 1.00 1.00e+00 4 1.00 1.00e+00 5 1.00 1.00e+00

Les caractres de contrle pour le format de limpression sont identiques ceux que lon retrouve dans le langage C. Dans lexemple ci-dessus, \t reprsente une tabulation, \n un saut de ligne, %s une chane de caractres, %nd imprime un entier sur n caractres, %m:nf un rel sur m caractres avec n caractres aprs le point et %m:ne fait la mme chose en notation scientique. Comme la plupart des commandes M ATLAB, fprintf peut tre utilise sous forme vectorielle. Vous tes donc encourags utiliser cette fonctionnalit dans vos programmes pour quils sexcutent plus rapidement.

Dernires remarques
Nous avons vu plus haut que la commande type nous permet dafcher le contenu dun chier. Les commandes dir et ls afchent le contenu dun rpertoire et cd nous permet de changer de rpertoire. Nous pouvons aussi passer des commandes directement au systme dexploitation en les prcdant du caractre ! linvite M ATLAB. Finalement, la commande path nous permet dajouter un chemin vers les chiersM que nous voulons utiliser. Par exemple, si nous avons des chiers M ATLAB sur une disquette :
>> path(path,A:); >> path(path,/mnt/floppy); % sur DOS % sur RedHat Linux, par exemple

Ces chemins seront alors ajouts la variable path qui contient tous les chemins.

Guide M ATLAB

14

Catalogue de commandes
Disponible bientt.

Guide M ATLAB

15

Bibliographie
Les livres
M ATLAB Guide, par Higham et Higham Mastering M ATLAB 7, par Hanselman et Littleeld

Les guides
M ATLAB : Guide dapprentissage, par Cloutier, Gourdeau et Leblanc (disponible COOPOLY) An Introduction to M ATLAB, par David F. Grifths Introduction to M ATLAB, par Graeme Chandler A Practical Introduction to M ATLAB, par Mark S. Gockenbach Introduction to M ATLAB, par Jeffery Cooper M ATLAB Array Manipulation Tips and Tricks, par Peter J. Acklam

Vous aimerez peut-être aussi