Vous êtes sur la page 1sur 37

Introduction ` a Matlab

Copyright (c) 2006 Thomas GRIN

Table des mati` eres


1 Introduction 1.1 1.2 Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pr esentation succinte . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 2 4 5 6 8 9 9 10 10 11 11 11 13 14 14 14 15 15 15 15 16 16 16

2 Prise en main 2.1 2.2 2.3 2.4 2.5 Vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Op erateurs principaux sur les matrices . . . . . . . . . . . . . . . Les Cell Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Structures de contr ole 3.1 3.2 3.3 3.4 IF ELSE/ELSEIF END . . . . . . . . . . . . . . . . . . . . . . . SWITCH CASE OTHERWISE END . . . . . . . . . . . . . . . . WHILE END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FOR END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Cr eation de fonctions 4.1 4.2 4.3 Fonctions simples . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions anonymes . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions ` a arguments variables . . . . . . . . . . . . . . . . . . .

5 Acc` es aux bases de donn ees 5.1 5.2 Ex ecution dun Select sur Oracle . . . . . . . . . . . . . . . . . . R ecup eration de donn ees depuis Bloomberg . . . . . . . . . . . .

6 Gestion des erreurs 6.1 TRY CATCH END . . . . . . . . . . . . . . . . . . . . . . . . . .

7 Vectorisation 7.1 7.2 7.3 Le pour et le contre . . . . . . . . . . . . . . . . . . . . . . . . . Combinaison de fonctions de bases . . . . . . . . . . . . . . . . . Calculer la norme L2 dun vecteur . . . . . . . . . . . . . . . . .

Sommaire

ii

7.4 7.5 7.6 7.7 7.8

Utiliser les index . . . . . . . . . . . . . . . . . . . . . . . . . . . Initialisation dune matrice . . . . . . . . . . . . . . . . . . . . . Les op erations matricielles . . . . . . . . . . . . . . . . . . . . . . Suppression des lignes NaN . . . . . . . . . . . . . . . . . . . . . Comment remplacer tous les NaN par z ero ? . . . . . . . . . . . .

16 17 17 18 19 20 20 20 21 21 23 23 27

8 Programmation Objet 8.1 Lobjet selon Matlab . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 8.1.2 8.1.3 8.1.4 8.2 Les types de base . . . . . . . . . . . . . . . . . . . . . . . Cr eation dune classe . . . . . . . . . . . . . . . . . . . . . Surcharge dop erateurs . . . . . . . . . . . . . . . . . . . . H eritage simple et multiple . . . . . . . . . . . . . . . . .

Une classe plus simplement . . . . . . . . . . . . . . . . . . . . .

9 Licence

1
1.1

Introduction
Remerciements

A Mathieu Bruchet pour sa relecture et ses conseils ainsi qu` a Marc Lussac pour ses encouragements. Merci aussi ` a Charles-Albert Lehalle qui ma beaucoup aid e dans mon apprentissage de Matlab.

1.2

Pr esentation succinte

MATLAB est une abr eviation de Matrix LABoratory. Ecrit a lorigine, en For` tran, par C. Moler, MATLAB etait destin e` a faciliter lacc` es au logiciel matriciel d evelopp e dans les projets LINPACK et EISPACK. La version actuelle, ecrite en C par the MathWorks Inc., existe en version professionnelle et en version etudiant. Sa disponibilit e est assur ee sur plusieurs plates-formes : Sun, Bull, HP, IBM, compatibles PC (DOS, Unix ou Windows), Macintoch, iMac et plusieurs machines parall` eles. Nous nous int eresserons ici ` a Matlab comme langage de programmation, tout en essayant de tirer parti de sa sp ecicit e : la vectorisation. En eet, tout comme dautres langages vectoriels (ou matriciels) tels que R, Scilab, Octave, Gauss, Matlab est tr` es performant dans la manipulation de vecteurs ou de matrices : il est alors dans lint er et du programmeur d eviter un maximum les boucles habituelles dans dautres langages. Jai r ealis e ce document pour http://www.developpez.com. Je suis ` a la base un informaticien et non pas un math ematicien, je pr esente donc Matlab en tant que langage de programmation. Jai volontairement et e succint sur les bases du langage. Tout simplement parce quil existe d ej` a des tonnes de documents duniversitaires sur le sujet, en plus de lexcellente documentation fournie avec le logiciel ; pour arriver plus rapidement ` a la partie int eressante : la vectorisation et la programmation objet avec Matlab.
A Je tiens ` a disposition les sources L TEXde ce document pour toute am elioration ou modication, consid erez quil est sous GFDL (license de documentation libre GNU). Je me tiens aussi ` a votre disposition pour tout changement license, si vous rencontrez un probl` eme de compatibilit e entre la GNU GPL et la GFDL.

Thomas Grin, mai 2006 Contact : http://www.cerbermail.com/?62iih6MJAW.

2
2.1

Prise en main
Vecteurs

Pour cr eer un vecteur, la syntaxe est la suivante : >> v = [1;2;3;4] v = 1 2 3 4 En s eparant les chires par des points-virgules, vous obtenez un vecteur colonne, en utilisant des espaces ou des virgules vous aurez un vecteur ligne. Notez que par d efaut, chaque element dun vecteur est un double. >> v = [1 2 3 4] v = 1 2 3 4

Lop erateur de transposition, comme en math, est lapostrophe : >> v ans = 1 2 3 4 renvoie le vecteur transconjugu Petite subtilit e : lop erateur <> e alors que <.> renvoie la vraie transpos ee. Toutefois, si vous restez dans les r eels, vous ne verrez pas la di erence. >> v=[1,1+i,2]

2.1

Vecteurs

v = 1.0000 >> v ans = 1.0000 1.0000 - 1.0000i 2.0000 >> v. ans = 1.0000 1.0000 + 1.0000i 2.0000 Evidement, nous disposons des 4 op erations classiques : + / Vous noterez quil existe 2 multiplications possibles entre 2 vecteurs : la multiplication de vecteur et la multiplication membre ` a membre. >> a = [1:5] , b = [1:5] a = 1 2 3 4 5 1.0000 + 1.0000i 2.0000

b = 1 2 3 4 5

>> a*b ??? Error using ==> mtimes Inner matrix dimensions must agree. >> a*b

2.2

Matrices

ans = 1 2 3 4 5 >> a.*b ans = 1 4 9 16 25 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25

En ecrivant [1:5] on cr ee une suite partant de 1 jusqu` a 5, par pas de 1. De m eme, [1:2:10] va cr eer un vecteur de 1 ` a 10 par pas de 2, donc de 5 el ements. >> length(1:2:10) ans = 5

2.2

Matrices

Les matrices suivent exactement la m eme syntaxe que les vecteurs : les lignes sont s epar es par des espaces ou des virgules et les colonnes par des pointsvirgules. >> m = [1 2 3 ; 4 5 6 ; 7 8 9] m = 1 4 7 2 5 8 3 6 9

A pr esent, une fonction extr emement utile, pour le programmeur comme pour le math ematicien : la fonction find permet de renvoyer les indices des el ements v eriant la condition plac ee en param` etre.

2.3

Op erateurs principaux sur les matrices

>> m m = 1 4 7 2 5 8 3 6 9

>> find(m>5) ans = 3 6 8 9 >> m(find(m>5)) ans = 7 8 6 9 >> m(find(m>5 & m<7)) ans = 6

2.3

Op erateurs principaux sur les matrices


cr ee une matrice de i lignes j colonnes contenant des 1 cr ee une matrice de i lignes j colonnes contenant des 0 cr ee une matrice de i lignes j colonnes avec des 1 sur la diagonale principale et 0 ailleurs extrait la diagonale de la matrice U renvoie la partie sup eerieure de A renvoie la partie inf erieure de A

ones(i,j) zeros(i,j) eye(i,j) diag(U) triu(A) tril(A)

2.4

Les Cell Array

linspace(a,b,n) A\b det(A) rank(A) inv(A) pinv(A) svd(A) norm(A)

cr ee un vecteur de n composantes uniform ement r eparties de a ` a b r esolution du syst` eme lin eaire Ax=b d eterminant dune matrice rang dune matrice inverse dune matrice pseudo inverse dune matrice valeurs singuli` eres dune matrice norme matricielle ou vectorielle

2.4

Les Cell Array

Un Cell Array est en Matlab, une matrice pouvant contenir nimporte quelle type de donn ees sans aucune contrainte : des structures, des vecteurs, des chaines de caract` eres... Cela permet de manipuler des objets condens es de mani` ere puissante. BondData = {15-Jul-1999 15-Jan-2000 15-Jul-2000 15-Jan-2001 15-Jul-2001 15-Jan-2002 }; 0.06000 0.06125 0.06375 0.06500 0.06875 0.07000 99.93 99.72 99.70 99.40 99.73 99.42

Cet exemple, tir e de la documentation de la Financial Toolbox cr ee un Cell Array contenant une colonne de cha nes de caract` eres et le reste de ottants. A bien garder en t ete : accolade = cell array, crochet = matrice. On manipule ensuite le Cell Array comme nimporte quelle matrice : >> BondData(:,1) ans = 15-Jul-1999 15-Jan-2000 15-Jul-2000 15-Jan-2001 15-Jul-2001 15-Jan-2002 On acc` ede avec les parenth` eses aux cellules du Cell Array, quoi quelles contiennent : ici les cha nes de caract` eres sont renvoy ees avec des quotes, ` a cause de leur type.

2.4

Les Cell Array

>> BondData(:,2) ans = [0.0600] [0.0612] [0.0638] [0.0650] [0.0688] [0.0700] Ici, la deuxi` eme colonne, que lon avait saisie comme des ottant est renvoy ee avec des crochets : en eet, un nombre est un vecteur de nombre ` a un el ement. Si on souhaite acc eder non pas aux cellules, mais ` a leur contenu directement, voici la syntaxe : >> BondData{1:4,2} ans = 0.0600

ans = 0.0612

ans = 0.0638

ans = 0.0650 Ici, jai demand e le contenu des cellules des 4 premi` eres lignes de la deuxi` eme colonne.

2.5

Les structures

2.5

Les structures

Les structures permettent dorganiser vos donn ees, je ne saurais trop vous conseiller de vous d enir un format de structure standard ` a toutes vos fonctions : par exemple un format pour les signaux avec un vecteur de date, une matrice de valeur et des champs dinformations. On peut simplement cr eer une structure par aectation, comme ceci : >> s.chiffre = 1; s.chaine=toto; s.cellarray={1,toto} ; s.vecteur=[1;2;3;4];s s = chiffre: chaine: cellarray: vecteur: 1 toto {[1] toto} [4x1 double]

Notez ` a pr esent, que chaque champs de notre structure est nomm e, ce qui explicite la syntaxe suivante : >> s = struct(chiffre,1,chaine,toto,cellarray,{{1,toto}},vecteur,[1;2;3;4]) s = chiffre: chaine: cellarray: vecteur: 1 toto {[1] toto} [4x1 double]

Il y a deux choses ` a remarquer ici : tout dabord, les noms de champs sont entr es en param` etres, dans lordre en tant que cha nes de caract` eres, cest une syntaxe tr` es courante en Matlab, equivalente dans dautres langages ` a ce genre de chose : function(chiffre=1,chaine=toto,...). Dautre part, jai d u doubler les accolades pour <cellarray>, sinon Matlab maurait cr e e un <s> qui aurait et e un Cell Array de la structure d enie, avec 2 cellules. Pas evidement, essayons... >> s = struct(chiffre,1,chaine,toto,cellarray,{1,toto},vecteur,[1;2;3;4]) s = 1x2 struct array with fields:

chiffre chaine cellarray vecteur >> s(1),s(2) ans = chiffre: chaine: cellarray: vecteur: 1 toto 1 [4x1 double]

ans = chiffre: chaine: cellarray: vecteur: 1 toto toto [4x1 double]

3
3.1

Structures de contr ole


IF ELSE/ELSEIF END

Syntaxe : if expression1 statements1 elseif expression2 statements2 else statements3 end Exemple : if ((attendance >= 0.90) && (grade_average >= 60)) pass = false; end;

3.2

SWITCH CASE OTHERWISE END

10

3.2

SWITCH CASE OTHERWISE END

Syntaxe : switch switch_expr case case_expr statement, ..., case {case_expr1, statement, ..., otherwise statement, ..., end Exemple : method = Bilinear; switch lower(method) case {linear,bilinear} disp(Method is linear) case cubic disp(Method is cubic) case nearest disp(Method is nearest) otherwise disp(Unknown method.) end

statement case_expr2, case_expr3, ...} statement statement

3.3

WHILE END

Syntaxe : while expression statements end Exemple : eps = 1; while (1+eps) > 1 eps = eps/2; end

3.4

FOR END

11

3.4

FOR END

Syntaxe : for variable = expression statement ... statement end Exemple : a = zeros(k,k) % Preallocate matrix for m = 1:k for n = 1:k a(m,n) = 1/(m+n -1); end end

Cr eation de fonctions

Comme en Java, il est de bon ton davoir un chier <.M> par fonction, et quil porte le nom de la fonction. Attention : la casse est importante. Faites aussi attention de bien mettre vos r epertoires de travail dans le PATH, sinon Matlab ne pourra jamais trouver vos fonctions. Quand vous tapez >> help repmat vous achez laide de la fonction. Il est tr` es simple de faire pareil : Matlab achera comme aide tout commentaire (%) qui suivra imm ediatement le prototype de la fonction

4.1

Fonctions simples

Syntaxe : function [out1, out2, ...] = funname(in1, in2, ...) Cr ee une fonction de nom funame qui prend in1, in2, . . .param` etres et en renvoie autant. Il nest pas n ecessaire de mettre un end. Exemples : function [mean,stdev] = stat(x) % STAT - renvoie la moyenne et l ecart-type dune matrice entr ee. % Use :

4.1

Fonctions simples

12

% [mean,stdev] = stat(x); % % Example : % >> x = stat([1 2 3 4 5]); % ceci ne sera pas affich e dans laide n = length(x); mean = sum(x)/n; stdev = sqrt(sum((x-mean).^2/n)); Petite fonction simple, qui calcule la moyenne dun vecteur ou dune matrice et son ecart-type. Voyez comment on renvoie 2 arguments en sortie. A lex ecution, si on retourne le r esultat de la fonction dans une seule variable, nous y trouverons la sortie la plus ` a gauche, cest ` a dire la moyenne ici. function x = fnan(mode, x, y) % FNAN - replace nan by a value % use: % x = fnan(replace,x,value_to_replace_nan) % or % x = fnan(revert, x,value_to_revert_to_nan) if iscell( x) x = cellfun(@(t)(fnan(mode,t,y)), x, UniformOutput,false); return end switch lower(mode) case {replace,nan->value} idx = isnan(x); if sum(idx) x(idx) = y; end case {revert,reverse,value->nan} idx = (abs(x-y)<eps); if sum(idx) x(idx) = nan; end otherwise error(fnan:mode,unknown mode <%s>,mode); end

4.2

Fonctions anonymes

13

Cette fonction remplace la valeur NaN (valeur manquante) dans une matrice par une autre num erique. Elle me sert g en eralement avant une insertion dans une base de donn ees o` u je g` ere une table de correspondances entre le NaN de matlab et une valeur repr esentant la valeur manquante dans ma table.

4.2

Fonctions anonymes

Il existe quantit e de fonctions sous Matlab, qui prennent en param` etre un pointeur (handler) vers une autre fonction. Si cette fonction est courte, nous naurons peut- etre pas lenvie de cr eer un chier .M. Les fonctions anonymes, vous vous en doutez, nont pas de nom. Une fois d eclar ee, elles renvoient un handler sur elle m eme. >> t = @(x,y) x+y; >> t(2,3) ans = 5 Dans cette exemple, je cr ee une fonction anonyme et je r ecup` ere son handler dans la variable t. Ensuite jutilise t comme une fonction. Cest le seul moyen de d enir une fonction dans linterpr eteur sans cr eer un chier <.M>. % Keep only workdays estNull = cellfun(@isnan,res(:,2:(end-1))); res = res(~estNull,:);

Dans cet exemple, je supprime de la matrice <res> toutes les lignes qui ont des NaN sur toutes les colonnes autre que la premi` ere. Notez le <. . .> qui permet de mettre un retour ` a la ligne dans une instruction. D etaillons : jai une matrice de 5 colonnes : la premi` ere est la date, les autres sont des donn ees. Cest pour cela que jexclus ` a chaque fois la premi` ere colonne avec <(:,2:(end-1))>. Avec <cellfun> japplique une fonction sur chaque cellule de <res(:,2:(end-1))>, cette fonction est une fonction Matlab standard dont je donne la r ef erence. Jaurais tr` es bien pu d enir ici une fonction anonyme. Jobtiens donc une matrice logique (de 0 et de 1). Si estNull vaut <true>, il sagit dune ligne que je veux supprimer. Cest pourquoi dans la derni` ere ligne, je ne garde que les lignes de res (et toutes les colonnes), dont lindice en ligne vaut <false> dans <estNull>.

4.3

Fonctions ` a arguments variables

14

4.3

Fonctions ` a arguments variables

Malheureusement, Matlab ne permet pas en natif de g erer des fonctions avec un nombre variable darguments. Il existe juste des variables sp eciales, appel ees <nvarargin> et <varargin> : la premi` ere donne le nombre darguments et la deuxi` eme sert ` a mettre des arguments optionnels, mais tout est ` a impl ementer a chaque fois. Toutefois il existe une solution pour g ` erer ses arguments optionnels tr` es simplement ; programm ee par Charles-Albert Lehalle, elle se trouve ici : http://literateprograms.org/Swiss_army_knife_Matlab_programs_for_quantitative_ finance.

Acc` es aux bases de donn ees

Matlab est un langage vectoriel, particuli` erement ` a son aise avec les gros volumes de donn ees.Il est donc particuli` erement avantageux dattaquer des bases de donn ees depuis Matlab. On peut ainsi prendre ses donn ees sous Oracle, Access et Excel ou chez dautres fournisseurs comme Bloomberg, Reuters et Datastream, si lon est abonn e.

5.1

Ex ecution dun Select sur Oracle

R ecup erer des donn ees sur une base Oracle est extr ement simple, comme un exemple vaut mieux quun long discours, voici : function out = execSQL(base,login,password,query) % EXECSQL - Execute an SQL query into the specified database. % use : % >> data = execSQL(base, login, password, query); conn=database(base,login,password); cur = exec(conn, query); res = fetch(cur); close(cur); close(conn); out = res.Data; Il manque ` a cette fonction une gestion des erreurs : une faute dans la requ ete serait fatale. La variable <base> est ici le nom dune connexion ODBC. Il est aussi possible dutiliser JDBC : conn=database(oracle,scott,tiger, oracle.jdbc.driver.OracleDriver,jdbc:oracle:oci7:)

5.2

R ecup eration de donn ees depuis Bloomberg

15

5.2

R ecup eration de donn ees depuis Bloomberg

La r ecup eration de donn ees chez un provider n ecessite la Datafeed Toolbox qui permet de se connecter chez un provider et de linterroger. Cet exemple ne peut marcher que sur un poste connect e au provider en question. bloom = bloomberg; data = fetch(b,IBM US Equity,GETDATA, {Open;Last_Price}) close(bloom); Comme vous le voyez, cest tr` es simple, si lon connait le ticker et les noms des colonnes que lon souhaite : dans ce cas rien ne vaut lexp erimentation sur un terminal.

6
6.1

Gestion des erreurs


TRY CATCH END

Syntaxe : try, statement, ..., statement, catch, statement, ..., statement, end Comme on peut sy attendre, tout comme en Java entre autres, toute instruction sous le <try> qui echoue lance lex ecution des instructions sous le <catch>. Lerreur est r ecup ere dans <lasterror>. On peut aussi relancer lerreur avec <rethrow>.

Vectorisation

Vectoriser ses traitements, voila enn le vif du sujet. Cela demande beaucoup de r eexion, pour ecrire 2 lignes qui feront autant que 10 ecrites rapidement avec des boucles imbriqu ees. Toutefois, vous verrez ` a lusage quil nest pas

7.1

Le pour et le contre

16

toujours souhaitable de vectoriser toutes les op erations : on revient au vieux dilemmes de linformatique : vitesse contre m emoire. En eet, certaines matrices interm ediaires seront tellement enormes que Matlab renverra une erreur, faute de m emoire vive. Il faut alors vectoriser par paquets de donn ees. Personnellement, je travaille avec 512 Mo de RAM, mais certains coll` egues se plaignent encore parfois avec leurs 2 Go.

7.1

Le pour et le contre

Vectoriser vos traitements a aussi du mauvais, par exemple la portabilit e de vos codes Matlab vers dautres langages est fortement amoindrie si vous avez correctement vectoris e votre code : il est bien plus simple de porter vers Java ou C un code bas niveau principalement ` a base de boucles imbriqu ees, plut ot que 3 lignes de Matlab ultra condens ees. Certains vous dirons quun code Matlab bien vectoris e est plus clair, car moins verbeux que le m eme code bas niveau. Je suis moyennement daccord ; ` a moins de conna tre Matlab sur le bout des doigts, un code non vectoris e me semble plus clair ` a lire moins dicile ` a ecrire.

7.2

Combinaison de fonctions de bases

Matlab combine d ej` a par lui m eme 6 de ses fonctions de bases quil est bon de conna tre : length(x) ndims(x) numel(x) isempty(x) isinf(x) isfinite(x) est est est est est est quivalent e equivalent equivalent equivalent equivalent equivalent ` a a ` a ` a ` a ` a ` max(size(x)) length(size(x)) prod(size(x)) numel(x) == 0 abs(x) == Inf abs(x) ~= Inf

7.3

Calculer la norme L2 dun vecteur

Tout simplement : m = sum(x.^2);

7.4

Utiliser les index

Utilisez le plus possible les index, quand vous d esirez s electionner des lignes ou des colonnes dans vos matrices, comme par exemple ici : X = 1:10; index = X>6;

7.5

Initialisation dune matrice

17

X = X(index); % retire de X toutes les valeurs <=6 Avec les index, vous pouvez ainsi extraire exactement en une instruction, les donn ees qui vous int eressent. Ici nous allons extraire gr ace aux index les valeurs sur la diagonales dune matrice : >> x = magic(5); x(logical(eye(5))) ans = 17 5 13 21 9 Evidement, on aurait pu simplement faire diag(x) ! Plus simplement, on peut extraire le 1er le second et le dernier element dun vecteur : v([1 2 end]). Si on veut les 10 derniers el ements : v(end-10:end)

7.5

Initialisation dune matrice

An de gagner en vitesse, on peut tr` es bien initialiser une matrice avec une valeur quelconque. Par exemple A = ones(5,5); va cr eer une matrice de (5x5) de 1 et B = zeros(3,5); une matrice de z eros. Si on souhaite une autre valeur, on peut simplement faire C = ones(5,5)*7 pour avoir une matrice de 7. Autre instruction gadget permettant surtout de faire des tests, O = magix(5); va cr eer un carr e magique de taille 5. Plus int eressant, avec Id = eye(4,4) permet de cr eer une matrice identit e de la taille souhait ee.

7.6

Les op erations matricielles

. Vous n etes pas en C ! Vous perdez votre energie ` a imbriquer les boucles pour parcourir vos Matrices, Matlab le fait d ej` a bien mieux que vous ne pourriez jamais le faire. Voici un exemple de ce quil en faut pas faire : for i = 1:n z(i) = x(i) * y(i); end for i = 1:n

7.7

Suppression des lignes NaN

18

for j = 1:m if A(i,j) > B(i,j) C(i,j) = D(i,j); else C(i,j) = F(i,j); end end end for i = 1:n-2 Z(i) = 4*X(i+2) + 2*X(i+1) + X(i); end Voici maintenant le m eme code, vectoris e: z = x .* y; J = A > B; C = D .* J + F .* (~J); W = [4 2 1]; Z = filter(W,1,X); Z = Z(3:n); Cet exemple est tir e de la FAQ du forum usenet comp.soft-sys.matlab. Voici maintenant la mauvaise et la bonne fa con de mettre les el ements dun vecteur ou dune matrice au carr e: % mauvais x = [ 1 2 3 4 5 ]; y = zeros(size(x)); for i = 1 : numel(x) y(i) = x(i)^2; end % bon ! x = [ 1 2 3 4 5 ]; y = x.^2;

7.7

Suppression des lignes NaN

Voici un petit exemple, qui permet de supprimer les lignes dune matrice si elles contiennent une valeur manquante :

7.8

Comment remplacer tous les NaN par z ero ?

19

out = []; for i=1:size(in,1) isAllNaN = true; for j=2:size(in,2) if ~isnan(in{i,j}) isAllNaN = false; end end if ~isAllNaN out = [out ; in(i,:)]; end end Voyons maintenant une version vectoris ee du m eme traitement, d ej` a utilis e pour illustrer les fonctions anonymes : notnan out = sum(cellfun(@(x) ~isnan(x),in(:,2:end)),2); = in(notnan~=0,:);

Non seulement ce code est plus cours, mais il est aussi plus robuste, plus exible et 2 fois plus rapide que le premier. Certains benchs mettent Matlab devant le C++ pour les calculs matriciels. Cest exemple a d ej` a et e explicit e en d etail dans cet article, dans le paragraphe sur les fonctions anonymes.

7.8

Comment remplacer tous les NaN par z ero ?

Si vous avez une version ancienne de Matlab (< R14) ceci fonctionne : >> x =[1 ; 3 ;NaN; 4 ; 5] x = 1 3 NaN 4 5 >> x(isnan(x)) = zeros(size(x(isnan(x)))) x =

20

1 3 0 4 5 Avec la 2006a, on peut tout simplement faire x(isnan(x)) = 0;

Programmation Objet

Matlab est etroitement li ea ` Matlab, il est possible dutiliser les API java depuis Matlab : on trouve par exemple des impl ementations Matlab de tables de hashages sappuyant sur lAPI Java. Par exemple mhashtable http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId= 9162&objectType=file d evelopp ee par Mikhail Poda Razumtsev.

8.1
8.1.1

Lobjet selon Matlab


Les types de base

Tous les types de bases d erivent les un des autres comme vous pouvez le voir sur ce sch ema. Ainsi vous pouvez utiliser class(x) pour conna tre la classe dun objet.

8.1

Lobjet selon Matlab

21

8.1.2

Cr eation dune classe

Il vous faut un r epertoire dont le nom commencera par @ suivi du nom de la classe. A lint erieur vous devrez mettre un r epertoire nomm e <private>. Chaque m ethode devra etre ecrire dans une chier <.M> s epar e et plac e soit ` a la racine (si la m ethode est publique) soit dans le r epertoire <private>. Le constructeur doit etre dans un chier <.M> du m eme nom que la classe et du m eme nom que le r epertoire en @. Je suis daccord, ce nest pas pratique du tout. 8.1.3 Surcharge dop erateurs

Par contre, gr ace ` a ce type dobjets (contrairement ` a la solution pratique de la section suivante), vous pourrez surcharger des op erateurs (oui comme en C++ ou en Python). Il vous sura de cr eer un chier <.M> appel e plus.m qui contiendra une fonction prenant 2 arguments, pour surcharger laddition. Voici la liste de ces noms dop erateurs : plus(a,b) a+b minus(a,b) ab uminus(a) a uplus(a) +a times(a,b) a. b mtimes(a,b) ab rdivide(a,b) a./b ldivide(a,b) a.\b mrdivide(a,b) a/b mldivide(a,b) a./b power(a,b) a. b

8.1

Lobjet selon Matlab

22

mpower(a,b) a b lt(a,b) a<b gt(a,b) a>b le(a,b) a <= b ge(a,b) a >= b ne(a,b) a =b eq(a,b) a == b and(a,b) a&b or(a,b) a|b not(a) a colon(a,d,b) a:d:b colon(a,b) a:b ctranspose(a) a transpose(a) a. display(a) : achage, sortie ` a l ecran. horzcat(a,b,...) [a b] vertcat(a,b,...) [a; b] subsref(a,s) a(s1, s2, ...sn)

8.2

Une classe plus simplement

23

subsasgn(a,s,b) a(s1, ..., sn) = b subsindex(a) b(a) 8.1.4 H eritage simple et multiple

Je lis dans la documentation de Matlab que la syntaxe est la suivante : derivedObj = class(derivedObj, der avec comme exemple : c = class(c, derivedClassname, baseObject);. Ce nest malheureusement pas tr` es clair, mais cest possible !

Ici : http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do? objectId=2915&objectType=file Stijn Helsen a mis les sources dexemples dh eritage avec Matlab. Il cr ee 2 classes : samplebase et samplederived. Dans le constructeur de samplederived (donc dans le chier \ldots\ backslash @samplederived\backslash sampled il ecrit juste : function c=samplederived % samplederived-constructor c=class(struct([]),samplederived,samplebase);

Il sagit donc, dune sorte d equivalent au super() de Java qui en plus d eni lh eritage.

8.2

Une classe plus simplement

Finalement, quest ce quun objet, sinon des donn ees et des pointeurs sur fonctions ? Cest exactement ce que jutilise ici, pour cr eer une classe pour la gestion des tables de hachage : function h = myhashtable() % MYHASHTABLE - my hashtable % use : % myhash = myhashtable % create % methods : % - get(key) % - add(key, value) % - remove(key) % - isKey(key) % - isValue(value)

8.2

Une classe plus simplement

24

% example : % myhash = myhashtable % myhash.add(toto,1); % myhash.add(tata,2); % [v,k] = myhash.get()

Donc, nous allons cr eer une classe <myhashtable> avec des nested tables et une structure. Noubliez pas que lusage des nested tables rend le <end> de n de fonction obligatoire. this = struct(keys, {{}}, values, {{}});

Voici la structure dans laquelle nous allons stocker notre table de hachage. Pourquoi les doubles accolades ? Si vous ne voyez vraiment pas retournez ` a la section sur les Cells Arrays ! Petite indication : je veux une structure contenant 2 Cells Arrays, et pas autant de structures quil ny a d el ements (ici vides !) dans les Cells Arrays. Je lai appel e <this> pour ne pas perturber les programmeurs Java mais on aurait aussi pu lappeler <self> pour les programmeurs Python. h = struct(get,@get_, ... getKey,@getKey, ... add,@add , ... remove,@remove, ... isKey,@iskey, ... isValue,@isvalue, ... isEmpty,@isempty_);

Voila notre structure, qui va nous permettre de cr eer une classe ` a base de nested tables. Notre fonction renverra cette structure faite de r ef erences sur fonctions. ej` a utilis e par une fonction Notez la fonction <@get >, car le mot get est d Matlab. Le reste du code est trivial, je vous encourage toutefois si vous d ebutez, dessayer dimpl ementer vous m emes chacune des m ethodes. % Ajoute un el ement ` a notre table de hachage function idx = add(key, value) if isempty(this.keys) this.keys{end+1} = key; this.values{end+1} = value; idx = length(this.keys);

8.2

Une classe plus simplement

25

return end [v, idx] = get_(key); if isempty(idx) this.keys{end+1} = key; this.values{end+1} = value; idx = length(this.keys); else this.values{idx} = value; end end % r ecup` ere la valeur de l el ement dont la cl e est key % ainsi que son indice function [value, idx] = get_(key) if nargin == 0 value = {this.keys,this.values}; return end value = []; idx = strmatch(key,this.keys,exact); if ~isempty(idx) value = this.values(idx); end end % renvoie la cl e ou les cl es correspondantes ` a une valeur function [key, idx] = getKey(value) if nargin == 0 idx = this.values; key = this. keys; return end key = []; idx = strmatch(value,this.values,exact); if ~isempty(idx) key = this.keys(idx); end end % Supprime l el ement dont la cl e est key

8.2

Une classe plus simplement

26

function idx = remove(key) [v,idx] = get_(key); if ~isempty(idx) this.keys{idx} = []; this.values{idx} = []; end end

% est ce que key est d ej` a utilis e comme cl e ? function out = iskey(key) if nargin == 0 out = 0; return; end out = strmatch(key,this.keys,exact); end % est ce quon a d ej` a val comme valeur dans la table ? function out = isvalue(val) if nargin == 0 out = 0; return; end out = strmatch(val,this.values); end % est ce que la table est vide ? function out = isempty_() if isempty(h.values) && isempty(h.keys) out = 1; else out = 0; end end end % fin de la fonction principale (ie de la classe)

En conclusion, si vous avez besoin dh eritage, utilisez lobjet Matlab ociel, sinon utilisez les structures et les r ef erences vers fonctions.

27

Licence

GNU Free Documentation License Avertissement Cette traduction na rien dociel. La seule copie ocielle est celle disponible sur le site de la copyleft. Ce document na quun caract` ere indicatif, an de vous permettre de mieux comprendre les subtilit es de cette Licence. Nh esitez pas ` a nous signaler toute incoh erence ou mauvaise traduction par rapport au texte original. Historique 6 mars 2001. Je passe le Petit Journal en GFDL et en entreprends une premi` ere traduction. 8 mars 2001. Jean-Luc Fortin menvoie la traduction quil en avait faite en juillet 2000, num erot ee 1.0 FR 11 mars 2001. Christian Casteyde a repris le b eb e et a enti` erement relu et corrig e le texte. 12 mars 2001. Je publie ici la version 1.1.1 FR que jai relue et corrig ee ce jour (quelques fautes dorthographe et omissions). 13 mars 2001. Apr` es relecture par Christian, quelques corrections mineures. 14 mars 2001. Voici la version stable de cette traduction num erot ee 1.1.2 FR Licence de documentation libre GNU Disclaimer This is an unocial translation of the GNU Free Documentation License into French. It was not published by the Free Software Foundation, and does not legally state the distribution terms for documentation that uses the GNU FDL only the original English text of the GNU FDL does that. However, we hope that this translation will help French speakers understand the GNU FDL better. Ceci est une traduction fran caise non ocielle de la Licence de documentation libre GNU. Elle na pas et e publi ee par la Free Software Foundation, et ne xe pas l egalement les conditions de redistribution des documents qui lutilisent seul le texte original en anglais le fait. Nous esp erons toutefois que cette traduction aidera les francophones ` a mieux comprendre la FDL GNU. Traduction fran caise non ocielle de la GFDL Version 1.1 (Mars 2000) Copyright original : Copyright (C) 2000 Free Sofware Foundation, inc 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Pour la traduction : Version 1.0 FR (Jean-Luc Fortin, juillet 2000) Version 1.1 FR (Christian Casteyde, mars 2001) Version 1.1.1 FR (C esar Alexanian, mars 2001) Version 1.1.2r2 FR (Christian Casteyde et C esar Alexanian, juin 2001) Chacun est libre de copier et de distribuer des copies conformes de cette Licence, mais nul nest autoris e` a la modier. 0 - PREAMBULE Lobjet de cette Licence est de rendre tout manuel, livre ou autre document ecrit libre au sens de la libert e dutilisation, ` a savoir : assurer ` a chacun la libert e eective de le copier ou de le redistribuer, avec ou sans modications,

28

commercialement ou non. En outre, cette Licence garantit ` a lauteur et ` a l editeur la reconnaissance de leur travail, sans quils soient pour autant consid er es comme responsables des modications r ealis ees par des tiers. Cette Licence est une sorte de copyleft , ce qui signie que les travaux d eriv es du document dorigine sont eux-m emes libres selon les m emes termes. Elle compl` ete la Licence Publique G en erale GNU, qui est egalement une Licence copyleft, con cue pour les logiciels libres. Nous avons con cu cette Licence pour la documentation des logiciels libres, car les logiciels libres ont besoin dune documentation elle-m eme libre : un logiciel libre doit etre accompagn e dun manuel garantissant les m emes libert es que celles accord ees par le logiciel lui-m eme. Mais cette Licence nest pas limit ee aux seuls manuels des logiciels ; elle peut etre utilis ee pour tous les documents ecrits, sans distinction particuli` ere relative au sujet trait e ou au mode de publication. Nous recommandons lusage de cette Licence principalement pour les travaux destin es a des ns denseignement ou devant servir de documents de r ` ef erence. ET DEFINITIONS 1 - APPLICABILITE Cette Licence couvre tout manuel ou tout autre travail ecrit contenant une notice de copyright autorisant la redistribution selon les termes de cette Licence. Le mot Document se r ef` ere ci-apr` es ` a un tel manuel ou travail. Toute personne en est par d enition concessionnaire et est r ef erenc ee ci-apr` es par le terme Vous . Une Version modi ee du Document d esigne tout travail en contenant la totalit e ou seulement une portion de celui-ci, copi ee mot pour mot, modi ee et/ou traduite dans une autre langue. Une Section secondaire d esigne une annexe au Document, ou toute information indiquant les rapports entre lauteur ou l editeur et le sujet (ou tout autre sujet connexe) du document, sans toutefois etre en rapport direct avec le sujet lui-m eme (par exemple, si le Document est un manuel de math ematiques, une Section secondaire ne traitera daucune notion math ematique). Cette section peut contenir des informations relatives ` a lhistorique du Document, des sources documentaires, des dispositions l egales, commerciales, philosophiques, ou des positions ethiques ou politiques susceptibles de concerner le sujet trait e. Les Sections inalt erables sont des sections secondaires consid er ees comme ne pouvant etre modi ees et cit ees comme telles dans la notice l egale qui place le Document sous cette Licence. Les Textes de couverture sont les textes courts situ es sur les pages de couverture avant et arri` ere du Document, et cit es comme tels dans la mention l egale de ce Document. Le terme Copie transparente d esigne une version num erique du Document

29

repr esent ee dans un format dont les sp ecications sont publiquement disponibles et dont le contenu peut etre visualis e et edit e directement et imm ediatement par un editeur de texte quelconque, ou (pour les images compos ees de pixels) par un programme de traitement dimages quelconque, ou (pour les dessins) par un editeur de dessins courant. Ce format doit pouvoir etre accept e directement ou etre convertible facilement dans des formats utilisables directement par des logiciels de formatage de texte. Une copie publi ee dans un quelconque format num erique ouvert mais dont la structure a et e con cue dans le but expr` es de pr evenir les modications ult erieures du Document ou dans le but den d ecourager les lecteurs nest pas consid er ee comme une Copie Transparente. Une copie qui nest pas Transparente est consid er ee, par opposition, comme Opaque . Le format de chier texte cod e en ASCII g en erique et nutilisant pas de balises, les formats de chiers Texinfo ou LaTeX, les formats de chiers SGML ou XML utilisant une DTD publiquement accessible, ainsi que les formats de chiers HTML simple et standard, ecrits de telle sorte quils sont modiables sans outil sp ecique, sont des exemples de formats acceptables pour la r ealisation de Copies Transparentes. Les formats suivants sont opaques : PostScript, PDF, formats de chiers propri etaires qui ne peuvent etre visualis es ou edit es que par des traitements de textes propri etaires, SGML et XML utilisant des DTD et/ou des outils de formatage qui ne sont pas disponibles publiquement, et du code HTML g en er e par une machine ` a laide dun traitement de texte quelconque et dans le seul but de la g en eration dun format de sortie. La Page de titre d esigne, pour les ouvrages imprim es, la page de titre ellem eme, ainsi que les pages suppl ementaires n ecessaires pour fournir clairement les informations dont cette Licence impose la pr esence sur la page de titre. Pour les travaux nayant pas de Page de titre comme d ecrit ci-dessus, la Page de titre d esigne le texte qui sapparente le plus au titre du document et situ e avant le texte principal. 2 - COPIES CONFORMES Vous pouvez copier et distribuer le Document sur tout type de support, commercialement ou non, ` a condition que cette Licence, la notice de copyright et la notice de la Licence indiquant que cette Licence sapplique ` a ce Document soient reproduits dans toutes les copies, et que vous ny ajoutiez aucune condition restrictive suppl ementaire. Vous ne pouvez pas utiliser un quelconque moyen technique visant ` a emp echer ou ` a contr oler la lecture ou la reproduction ult erieure des copies que vous avez cr e ees ou distribu ees. Toutefois, vous pouvez solliciter une r etribution en echange des copies. Si vous distribuez une grande quantit e de copies, r ef erez-vous aux dispositions de la section 3. Vous pouvez egalement pr eter des copies, sous les m emes conditions que celles suscit ees, et vous pouvez acher publiquement des copies de ce Document.

30

3 - COPIES EN NOMBRE Si vous publiez des copies imprim ees de ce Document ` a plus de 100 exemplaires et que la Licence du Document indique la pr esence de Textes de couverture, vous devez fournir une couverture pour chaque copie, qui pr esente les Textes de couverture des premi` ere et derni` ere pages de couverture du Document. Les premi` ere et derni` ere pages de couverture doivent egalement vous identier clairement et sans ambigu t e comme etant l editeur de ces copies. La premi` ere page de couverture doit comporter le titre du Document en mots dimportance et de visibilit e egales. Vous pouvez ajouter des informations compl ementaires sur les pages de couverture. Les copies du Document dont seule la couverture a et e modi ee peuvent etre consid er ees comme des copies conformes, ` a condition que le titre du Document soit pr eserv e et que les conditions indiqu ees pr ec edemment soient respect ees. Si les textes devant se trouver sur la couverture sont trop importants pour y tenir de mani` ere claire, vous pouvez ne placer que les premiers sur la premi` ere page et placer les suivants sur les pages cons ecutives. Si vous publiez plus de 100 Copies opaques du Document, vous devez soit fournir une Copie transparente pour chaque Copie opaque, soit pr eciser ou fournir avec chaque Copie opaque une adresse r eseau publiquement accessible dune Copie transparente et compl` ete du Document, sans aucun ajout ou modication, et ` a laquelle tout le monde peut acc eder en t el echargement anonyme et sans frais, selon des protocoles r eseau communs et standards. Si vous choisissez cette derni` ere option, vous devez prendre les dispositions n ecessaires, dans la limite du raisonnable, an de garantir lacc` es non restrictif ` a la Copie transparente durant une ann ee pleine apr` es la diusion publique de la derni` ere Copie opaque (directement ou via vos revendeurs). Nous recommandons, mais ce nest pas obligatoire, que vous contactiez lauteur du Document susamment t ot avant toute publication dun grand nombre de copies, an de lui permettre de vous donner une version ` a jour du Document. 4 - MODIFICATIONS Vous pouvez copier et distribuer une Version modi ee du Document en respectant les conditions des sections 2 et 3 pr ec edentes, ` a condition de placer cette Version modi ee sous la pr esente Licence, dans laquelle le terme Document doit etre remplac e par les termes Version modi ee , donnant ainsi lautorisation de redistribuer et de modier cette Version modi ee ` a quiconque en poss` ede une copie. De plus, vous devez eectuer les actions suivantes dans la Version modi ee : Utiliser sur la Page de titre (et sur la page de couverture eventuellement pr esente) un titre distinct de celui du Document dorigine et de toutes ses versions ant erieures (qui, si elles existent, doivent etre mentionn ees dans la section His-

31

torique du Document). Vous pouvez utiliser le m eme titre si l editeur dorigine vous en a donn e express ement la permission. Mentionner sur la Page de titre en tant quauteurs une ou plusieurs des personnes ou entit es responsables des modications de la Version modi ee, avec au moins les cinq principaux auteurs du Document (ou tous les auteurs sil y en a moins de cinq). Pr eciser sur la Page de titre le nom de l editeur de la Version modi ee, en tant qu editeur du Document. Pr eserver int egralement toutes les notices de copyright du Document. Ajouter une notice de copyright adjacente aux autres notices pour vos propres modications. Inclure imm ediatement apr` es les notices de copyright une notice donnant ` a quiconque lautorisation dutiliser la Version modi ee selon les termes de cette Licence, sous la forme pr esent ee dans lannexe indiqu ee ci-dessous. Pr eserver dans cette notice la liste compl` ete des Sections inalt erables et les Textes de couverture donn es avec la notice de la Licence du Document. Inclure une copie non modi ee de cette Licence. Pr eserver la section nomm ee Historique et son titre, et y ajouter une nouvelle entr ee d ecrivant le titre, lann ee, les nouveaux auteurs et l editeur de la Version modi ee, tels que d ecrits sur la Page de titre, ainsi quun descriptif des modications apport ees depuis la pr ec edente version. Conserver ladresse r eseau eventuellement indiqu ee dans le Document permettant ` a quiconque dacc eder ` a une Copie transparente du Document, ainsi que les adresses r eseau indiqu ees dans le Document pour les versions pr ec edentes sur lesquelles le Document se base. Ces liens peuvent etre plac es dans la section Historique . Vous pouvez ne pas conserver les liens pour un travail datant de plus de quatre ans avant la version courante ou si l editeur dorigine vous en accorde la permission. Si une section D edicaces ou une section Remerciements sont pr esentes, les informations et les appr eciations concernant les contributeurs et les personnes auxquelles sadressent ces remerciements doivent etre conserv ees, ainsi que le titre de ces sections. Conserver sans modication les Sections inalt erables du Document, ni dans leurs textes, ni dans leurs titres. Les num eros de sections ne sont pas consid er es comme faisant partie du texte des sections. Eacer toute section intitul ee Approbations . Une telle section ne peut pas etre incluse dans une Version modi ee.

32

Ne pas renommer une section existante sous le titre Approbations ou sous un autre titre entrant en conit avec le titre dune Section inalt erable. Si la Version modi ee contient de nouvelles sections pr eliminaires ou de nouvelles annexes consid er ees comme des Sections secondaires et que celles-ci ne contiennent aucun el ement copi e ` a partir du Document, vous pouvez ` a votre convenance en d esigner une ou plusieurs comme etant des Sections inalt erables. Pour ce faire, ajoutez leurs titres dans la liste des Sections inalt erables au sein de la notice de Licence de la version Modi ee. Ces titres doivent etres distincts des titres des autres sections. Vous pouvez ajouter une section nomm ee Approbations ` a condition que ces approbations ne concernent que les modications ayant donn e naissance ` a la Version modi ee (par exemple, comptes rendus de revue du document ou acceptation du texte par une organisation le reconnaissant comme etant la d enition dun standard). Vous pouvez ajouter un passage comprenant jusqu` a cinq mots en premi` ere page de couverture, et jusqu` a vingt-cinq mots en derni` ere page de couverture, ` a la liste des Textes de couverture de la Version modi ee. Il nest autoris e dajouter quun seul passage en premi` ere et en derni` ere pages de couverture par personne ou groupe de personnes ou organisation ayant contribu e ` a la modication du Document. Si le Document comporte d ej` a un passage sur la m eme couverture, ajout e en votre nom ou au nom de lorganisation au nom de laquelle vous agissez, vous ne pouvez pas ajouter de passage suppl ementaire ; mais vous pouvez remplacer un ancien passage si vous avez express ement obtenu lautorisation de l editeur de celui-ci. Cette Licence ne vous donne pas le droit dutiliser le nom des auteurs et des editeurs de ce Document ` a des ns publicitaires ou pour pr etendre ` a lapprobation dune Version modi ee. 5 - FUSION DE DOCUMENTS Vous pouvez fusionner le Document avec dautres documents soumis ` a cette Licence, suivant les sp ecications de la section 4 pour les Versions modi ees, ` a condition dinclure dans le document r esultant toutes les Sections inalt erables des documents originaux sans modication, et de toutes les lister dans la liste des Sections inalt erables de la notice de Licence du document r esultant de la fusion. Le document r esultant de la fusion na besoin que dune seule copie de cette Licence, et les Sections inalt erables existant en multiples exemplaires peuvent etre remplac ees par une copie unique. Sil existe plusieurs Sections inalt erables portant le m eme nom mais de contenu di erent, rendez unique le titre de chaque section en ajoutant, ` a la n de celui-ci, entre parenth` eses, le nom de lauteur ou de l editeur dorigine, ou, ` a d efaut, un num ero unique. Les m emes modications

33

doivent etre r ealis ees dans la liste des Sections inalt erables de la notice de Licence du document nal. Dans le document r esultant de la fusion, vous devez rassembler en une seule toutes les sections Historique des documents dorigine. De m eme, vous devez rassembler les sections Remerciements et D edicaces . Vous devez supprimer toutes les sections Approbations . 6 - REGROUPEMENTS DE DOCUMENTS Vous pouvez cr eer un regroupement de documents comprenant le Document et dautres documents soumis ` a cette Licence, et remplacer les copies individuelles de cette Licence des di erents documents par une unique copie incluse dans le regroupement de documents, ` a condition de respecter pour chacun de ces documents lensemble des r` egles de cette Licence concernant les copies conformes. Vous pouvez extraire un document dun tel regroupement et le distribuer individuellement sous couvert de cette Licence, ` a condition dy inclure une copie de cette Licence et den respecter lensemble des r` egles concernant les copies conformes. 7 - AGREGATION AVEC DES TRAVAUX INDEPENDANTS La compilation du Document ou de ses d eriv es avec dautres documents ou travaux s epar es et ind ependants sur un support de stockage ou sur un m edia de distribution quelconque ne repr esente pas une Version modi ee du Document tant quaucun copyright nest d epos e pour cette compilation. Une telle compilation est appel ee agr egat et cette Licence ne sapplique pas aux autres travaux ind ependants compil es avec le Document sils ne sont pas eux-m emes des travaux d eriv es du Document. Si les exigences de la section 3 concernant les Textes de couverture sont applicables ` a ces copies du Document, et si le Document repr esente un volume inf erieur ` a un quart du volume total de lagr egat, les Textes de couverture du Document peuvent etre plac es sur des pages de couverture qui nencadrent que le Document au sein de lagr egat. Dans le cas contraire, ils doivent appara tre sur les pages de couverture de lagr egat complet. 8 - TRADUCTION La traduction est consid er ee comme une forme de modication, vous pouvez donc distribuer les traductions du Document selon les termes de la section 4. Vous devez obtenir lautorisation sp eciale des auteurs des Sections inalt erables pour les remplacer par des traductions, mais vous pouvez inclure les traductions des Sections inalt erables en plus des textes originaux. Vous pouvez inclure une traduction de cette Licence a ` condition dinclure egalement la version originale en anglais. En cas de contradiction entre la traduction et la version originale en anglais, cest cette derni` ere qui pr evaut. 9 - REVOCATION

34

Vous ne pouvez pas copier, modier, sous-licencier ou distribuer le Document autrement que selon les termes de cette Licence. Tout autre acte de copie, modication, sous-Licence ou distribution du Document est sans objet et vous prive automatiquement des droits que cette Licence vous accorde. En revanche, les personnes qui ont re cu de votre part des copies ou les droits sur le document sous couvert de cette Licence ne voient pas leurs droits r evoqu es tant quelles en respectent les principes. 10 - REVISIONS FUTURES DE CETTE LICENCE La Free Software Foundation peut publier de temps en temps de nouvelles versions r evis ees de cette Licence. Ces nouvelles versions seront semblables ` a la pr esente version dans lesprit, mais pourront di erer sur des points particuliers en fonction de nouvelles questions ou nouveaux probl` emes. Voyez http ://www.gnu.org/copyleft/ pour plus de d etails. Chaque version de cette Licence est dot ee dun num ero de version distinct. Si un Document sp ecie un num ero de version particulier de cette Licence, et porte la mention ou toute autre version ult erieure , vous pouvez choisir de suivre les termes de la version sp eci ee ou ceux de nimporte quelle version ult erieure publi ee par la Free Software Foundation. Si aucun num ero de version nest sp eci e, vous pouvez choisir nimporte quelle version ocielle publi ee par la Free Sofware Foundation. Copyright (c) 2006 Thomas GRIN

Vous aimerez peut-être aussi