Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab...

17
SCALab Initiation MATLAB 1 Laurent Ott Initiation MATLAB 1 1 Introduction Le logiciel MATLAB, d´ evelopp´ e par la soci´ et´ e The MathWorks (http://www.mathworks.com), est devenu un langage de r´ ef´ erence pour l’analyse et la r´ esolution de probl` eme scientifique. Il int` egre ` a la fois des solutions de calcul, de visualisation et un environnement de d´ eveloppement. Son nom provient de MATrix LABoratory, l’objectif initial ´ etait de fournir un acc` es simplifi´ e aux biblioth` eques de fonctions des projets LINPACK et EISPACK (d´ edi´ ees au calcul matriciel et ` a l’alg` ebre lin´ eaire). MATLAB a de nombreux avantages par rapport aux langages de programmation traditionnels (tel que le C/C++). Il permet le d´ eveloppement int´ eractif de part l’utilisation d’un langage interpr´ et´ e. La structure de donn´ ees de base est le tableau ne n´ ecessitant pas de dimensionnement. Il fournit de nombreuses fonctions pr´ eprogramm´ ees regroup´ ees en boˆ ıtes ` a outils (toolbox) pour de nombreux domaines (par ex : signal processing, statistics, control theory, optimization, ...). De plus, MATLAB dispose d’un excellente documentation. 2 emarrer MATLAB Lorsque vous lancez MATLAB pour la premi` ere fois, l’´ ecran ressemble ` a celui de la Figure 1. Le ’bureau’ MATLAB est une fenˆ etre contenant d’autres sous-fenˆ etres. Les principaux outils disponibles depuis ce bureau sont : — COMMAND WINDOW : invite de commande permettant de taper des instructions, d’appeler des scripts, d’ex´ ecuter des fonctions MATLAB. — COMMAND HISTORY : historique des commandes lanc´ ees depuis l’invite de commande. — WORKSPACE : il liste les variables en m´ emoire, il permet ´ egalement de parcourir graphiquement le contenu des variables — CURRENT DIRECTORY : un navigateur de fichier int´ egr´ e` a MATLAB pour visualiser le r´ epertoire de travail courant et y effetuer les op´ erations classiques tel que renommer ou supprimer un fichier. — le HELP BROWSER : un navigateur permettant de parcourir l’aide de MATLAB. L’aide est un outil pr´ ecieux pour trouver les fonctions et apprendre leur fonctionnement (notamment le format des donn´ ees ` a fournir en entr´ ee ainsi que les valeurs renvoy´ ees par la fonction). Par la suite, il est conseill´ e de tester toutes les instructions pr´ ec´ ed´ ees de >> dans la command window. Lorsque vous optenez une erreur, essayez d’en comprendre la signification. Avec un peu de pratique, vous verrez que les messages d’erreur sont en g´ en´ eral explicites. 3 MATLAB comme calculette Comme tout langage de programmation, MATLAB dispose de fonctions de calculs math´ ematiques. Nous en voyons ici quelques exemples d’utilisation. 1

Transcript of Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab...

Page 1: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Initiation MATLAB 1

1 Introduction

Le logiciel MATLAB, developpe par la societe The MathWorks (http://www.mathworks.com), est devenuun langage de reference pour l’analyse et la resolution de probleme scientifique. Il integre a la fois des solutionsde calcul, de visualisation et un environnement de developpement. Son nom provient de MATrix LABoratory,l’objectif initial etait de fournir un acces simplifie aux bibliotheques de fonctions des projets LINPACK etEISPACK (dediees au calcul matriciel et a l’algebre lineaire).

MATLAB a de nombreux avantages par rapport aux langages de programmation traditionnels (tel quele C/C++). Il permet le developpement interactif de part l’utilisation d’un langage interprete. La structurede donnees de base est le tableau ne necessitant pas de dimensionnement. Il fournit de nombreuses fonctionspreprogrammees regroupees en boıtes a outils (toolbox) pour de nombreux domaines (par ex : signal processing,statistics, control theory, optimization, ...).

De plus, MATLAB dispose d’un excellente documentation.

2 Demarrer MATLAB

Lorsque vous lancez MATLAB pour la premiere fois, l’ecran ressemble a celui de la Figure 1. Le ’bureau’MATLAB est une fenetre contenant d’autres sous-fenetres. Les principaux outils disponibles depuis ce bureausont :

— COMMAND WINDOW : invite de commande permettant de taper des instructions, d’appeler des scripts,d’executer des fonctions MATLAB.

— COMMAND HISTORY : historique des commandes lancees depuis l’invite de commande.— WORKSPACE : il liste les variables en memoire, il permet egalement de parcourir graphiquement le

contenu des variables— CURRENT DIRECTORY : un navigateur de fichier integre a MATLAB pour visualiser le repertoire de

travail courant et y effetuer les operations classiques tel que renommer ou supprimer un fichier.— le HELP BROWSER : un navigateur permettant de parcourir l’aide de MATLAB. L’aide est un outil

precieux pour trouver les fonctions et apprendre leur fonctionnement (notamment le format des donneesa fournir en entree ainsi que les valeurs renvoyees par la fonction).

Par la suite, il est conseille de tester toutes les instructions precedees de >> dans la command window.Lorsque vous optenez une erreur, essayez d’en comprendre la signification. Avec un peu de pratique, vous verrezque les messages d’erreur sont en general explicites.

3 MATLAB comme calculette

Comme tout langage de programmation, MATLAB dispose de fonctions de calculs mathematiques. Nous envoyons ici quelques exemples d’utilisation.

1

Page 2: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Entrer les commandes à exécuterInvite de commandes : Voir ou réexécuter les

commandes précédemmentutilisées

Voir ou changerle répertoire de travail

Gestionnaire de fichier :liste les fichiers durépertoire de travail

liste les variables en mémoireWorkspace :

Obtenir de l’aide

Figure 1 – L’interface graphique de l’environnement MATLAB (version R2010b)

+ (addition) ⇒ >> 3+2

- (soustraction) ⇒ >> 3-2

* (multiplication) ⇒ >> 3*2

/ (division) ⇒ >> 3/2

^ (puissance) ⇒ >> 3^2

Si l’on regarde ce que donne l’exemple d’addition :>> 3+2

ans =

5

On peut remarquer que lorsqu’aucune variable d’affectation n’est specifiee pour stocker le resultat del’operation, MATLAB stocke le resultat dans une variable appelee ans (diminutif pour answer). Cette va-riable sera ecrasee a chaque nouvelle operation. Pour eviter cela, on peut specifier le nom d’une variable pourstocker le resultat. On pourra alors reutiliser le resultat de l’operation plus tard. Par ex :>>x = 3+2

x =

5

x prend alors la valeur 5. Cette variable peut alors etre reutilisee dans un calcul suivant :>>x/2

ans =

2.5000

3.1 Priorite des operateurs

Les operations sont evaluees en donnant la priorite aux operateurs selon l’ordre suivant :

2

Page 3: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

1. ()2. ^3. * /

4. + -

Exemple 1 :>> 3 + 2 * 4 ^ 2

-----

16 1) Evalutation de 4^2 car ^ a la priorite sur les autres operateurs * et +

---------

32 2) Evalutation de 2*16 car * a la priorite sur +-------------

ans = 35 3) Pur finir, evalutation de 3+32

Exemple 2 :>> ( ( 3 + 2 ) * 4 ) ^ 2

---------

5 1) Evalutation de 3+2 car () a la priorite sur *----------------

20 2) Evalutation de 5*4 car () a la priorite sur ^---------------------

ans = 400 3) Pour finir, evalutation de 20^2

A titre d’exercice, evaluer les expressions suivantes :

1) 123∗456123+456 , vous devriez obtenir 96.8705

2) 213

+ 15

+ 16

23

+ 45

+ 56

, vous devriez obtenir 0.6087

3) 112−62

+ 23 , vous devriez obtenir 0.625

4)1+( 2

3)12

12−62, vous devriez obtenir -0.0757

4 Manipuler des variables

Une variable est un emplacement en memoire permettant de stocker provisoirement une donnee. On refere al’emplacement en memoire par le nom que l’on donne a la variable. On pourra utiliser le contenu de la variable(dans un calcul par exemple si la donnee stockee est une valeur numerique) ou modifier la donnee stockee al’emplacement memoire.

On distingue plusieurs types de variable selon les donnees qu’elles servent a stocker (nombre, caractere alpha-numerique, tableau, matrice, structure). Contrairement a d’autres langages de programmation, sous MATLABle type des variable n’a pas besoin d’etre specifie, MATLAB infere le type d’une variable en fonction de ladonnee que l’on y stocke.

Sous MATALB, les noms de variable doivent commencer par une lettre, sont sensibles a la casse (differenciationdes caracteres majuscule/minuscule) et ne peuvent contenir aucun caractere special excepte le tiret bas ( ,underscore). De meme, il faut eviter d’utiliser comme nom de variable des noms deja employes comme nom defonctions (par ex : min, max, exp ...). MATLAB generera egalement une erreur si un des mots-cles reserves

3

Page 4: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

suivant est utilise : for, end, if, while, function, return, elseif, case, otherwise, switch, continue, else,try, catch, global, persistent, break. Ces mots-cles font partie de la syntaxe du langage MATLAB, nousverrons dans la suite des exemples d’utilisation de certains de ces mots-clefs.

4.1 Utilisation d’une variable

Les variables sont creees lors de la premiere affectation (operation qui permet d’attribuer une valeur a unevariable).

A ← 0 on affecte la valeur 0 a la variable A, si A n’existait pas auparavant, elle est creee.

B ← 11 on affecte la valeur 11 a la variable B

On peut alors utiliser une variable dans un calcul ou pour affecter son contenu a une autre variable.

A ← B on affecte la valeur contenue ds B a la variable A, A vaut a present 11, B reste inchangee

A ← A + 1 on affecte la valeur contenue ds A incrementee de 1 a la variable A, A vaut a present 12

Sous MATLAB, l’affectation se fait a l’aide de l’operateur =

>> A = 0

>> B = 11

>> A = B

>> A = A + 1

4.2 Quelques types de variables : nombres, vecteurs (tableau 1D), matrices (tableau 2D)

- nombres :>>a = 0.66

>>deuxiemeNombre = 2/3

>>mon_nom_de_variable = -4

- tableau 1D en ligne :>>rowvect1 = [1,2,3]

On separe les elements du vecteur par une virgule pour obtenir un agencement en ligne>>rowvect2 = [a , mon_nom_de_variable , 12]

Nous avons ici utilise le contenu des variables a et mon_nom_de_variable pour affecter les 2 premiers elementsde la matrice rowvect2. Le resultat sera rowvect2 = [0.66 , -4 , 12]

- tableau 1D en colonne :>>colvect = [1;2;3] (on separe les elements par un point virgule pour obtenir un agencement en colonne)

- matrice :>>maPremiereMatrice = [1,2,3;4,5,6;7,8,9] %creation d’une matrice de dimension (3x3)

(les elements d’une meme ligne sont separes par des virgules, les lignes de la matrice sont separees par un pointvirgule)

Le caractere % permet de specifier un commentaire dans le code : ce qui suit sur une ligne le caractere % nesera pas interprete par MATLAB. Les commentaires dans un code source d’un programme informatique sonten general destines a un lecteur humain pour aider a la comprehension du programme. Vous n’avez pas besoinde recopier le commentaire dans les exemples sur une ligne de ce tutoriel.

4

Page 5: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

4.3 Acces aux elements des tableaux

Acces a un element unique :

Pour acceder a un element unique d’une variable de type tableau 1D, on specifie entre parantheses apres lenom de la variable l’indice de l’element (l’indice peut etre donner par le biais d’une variable) :

>>rowvect1(1) %acces au 1er element de rowvect1

>>colvect(3) %3eme element de colvect

>> ind = 2

>>rowvect1(ind) %acces au 2eme element car ind = 2

ne fonctionne que si la variable utlisee contient un entier>>rowvect1(end) %dernier element

le mot-cle end permet d’acceder au dernier element

Pour les tableaux a 2 dimensions, on specifie entre parentheses la position de l’element dans le tableau endonnant en premier la ligne puis la colonne :

>>maPremiereMatrice(2,3) %element de la 2eme ligne, 3eme colonne

>>maPremiereMatrice(1,end) %element de la 1eme ligne, derniere colonne

Acces a un sous-ensemble :

Si l’on souhaite extraire un sous-ensemble d’un tableau, on specifie pour chaque dimension un tableau desindices que l’on souhaite conserver. Pour un tableau 2D, on recupere alors l’intersection des lignes et colonnesspecifiees.

>>rowvect1( [1,3] ) %vecteur compose du 1er et 3eme element de rowvect1

>>maPremiereMatrice( [1,3] , [1,2] ) %Intersection des lignes 1 et 3 avec les colonnes 1 et 2

>>maPremiereMatrice([1,2],[2,3]) %matrice (2x2) extrait du coin superieur droit de maPremiereMatrice

>>maPremiereMatrice(2,:) %2eme ligne de la matrice maPremiereMatrice

>>maPremiereMatrice(:,3) %3eme colonne de la matrice maPremiereMatrice

L’operateur : (double point), lorsqu’utilise pour acceder aux elements d’un tableau, permet de conservertous les indices de la dimension.

L’operateur : permet egalement de creer un tableau 1D en ligne de la maniere suivante :

<debut>[:<increment>]:<fin>

5

Page 6: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Ceci va creer un vecteur en ligne de valeurs allant de <debut> jusqu’a <fin> par pas de <increment>.L’increment est optionnel. Si il n’est pas specifie, il sera par defaut pris egal a 1.

Exemple de creation de tableau avec l’operateur :>>D = 1:4

>>E = 0:0.1:2.5

Essayer avec 2.45 au lieu de 2.5. La valeur finale n’etant alors pas un multiple du pas. Le vecteur genere n’iraque jusqu’a la plus proche valeur inferieure.>>F = 10:-1:0 %fonctionne egalement avec un pas negatif.

Cette operation est utile pour :— creer/initialiser des vecteurs— acceder a des sous-ensembles de vecteurs ou matrices

>>E(1:10) %10 premiers elements de E

>>E(end-9:end) %10 derniers elements de E

— dans les boucles for (a venir)

Exercice : creer tout d’abord la matrice M, a partir de la commande suivante >>M = magic(10). Cettecommande va creer une matrice de dimension (10x10) ayant des proprietes particulieres.

— Creer une matrice M1 composee uniquement de la premiere colonne de M— Creer une matrice M2 composee uniquement de la deuxieme ligne de M— Creer une matrice M3 composee des 3 premieres colonnes de M— Creer une matrice M4 composee des 3 dernieres lignes de M— Creer une matrice M5 composee de l’intersection des 1ere, 5eme, et 7eme lignes de M et des 2eme,

4eme et 8eme colonnes de MVous devriez obtenir :M5 =

99 8 51

93 2 75

5 89 32

4.4 Plus sur les matrices

4.4.1 Creation de matrices speciales

La matrice est la structure de donnees de base de MATLAB. Pour rappel, MATLAB a ete initialementcree comme solution de calcul matriciel (algebre lineaire). De ce fait, MATLAB dispose de fonctions pour creerdifferents types de matrices utiles.

— La fonction ones : creer une matrice dont tous les elements sont des 1.>>Mones1 = ones(4) %matrice de taille (4x4)

>>Mones2 = ones(10,2) %matrice de taille (10x2)

— La fonction zeros : creer une matrice dont tous les elements sont des 0.— La fonction rand : creer une matrice de nombres aleatoires uniformement distribue compris entre 0 et 1.

>>Mrand1 = rand(5) %matrice de taille (5x5)

>>Mrand2 = rand(2,7) * 10 + 5 %matrice de taille (2x7) de nombres compris entre 5 et 15

— La fonction randn : creer une matrice de nombres aleatoires suivant une loi normale centree reduite.— La fonction randperm : creer un vecteur ligne (matrice 1xn) contenant une permutation aleatoire du

nombre entier specifie.>>randperm(6) pourrait renvoyer le vecteur suivant[4 1 2 5 3 6 ]

Cette fonction est tres utile pour randomiser un vecteur ou les lignes ou colonnes d’une matrice.

6

Page 7: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

4.4.2 Assemblage de matrices (concatenation)

La concatenation de matrices permet de rassembler une ou plusieurs matrices pour en creer une nou-velle. Les crochets [] que nous avons vu plus tot pour construire des tableaux servent egalement a realiser laconcatenation. Par exemple, l’expression C = [A , B] va concatener horizontalement les matrices A et B. Tan-dis que l’expression C = [A ; B] va realiser une concatenation verticale. L’operation de concatenation echourasi les dimensions des matrices a concatener ne sont pas compatibles, i.e. pour realiser une concatenation hori-zontal les matrices doivent avoir le meme nombre de lignes et pour realiser une concatenation verticale le memenombre de colonnes.

This example constructs a new matrix C by concatenating matrices A and B in a vertical direction :

>>A = ones(2, 5) * 6; % 2-by-5 matrix of 6’s

>>B = rand(3, 5); % 3-by-5 matrix of random values

>>C = [A; B] % Vertically concatenate A and B

C =

6.0000 6.0000 6.0000 6.0000 6.0000

6.0000 6.0000 6.0000 6.0000 6.0000

0.9501 0.4860 0.4565 0.4447 0.9218

0.2311 0.8913 0.0185 0.6154 0.7382

0.6068 0.7621 0.8214 0.7919 0.1763

Pas de probleme, les 2 matrices on bien le meme nombre de colonnes. Essayer maintenant de faire laconcatenation horizontale, que ce passe-t-il ?

Exercice : - Utiliser les fonctions ones, zeros et rand ainsi que la concatenation de matrices pour creerune matrice G de taille (3x10) de la forme suivante.

G =

0 0 0 0 0 1 1 1 1 1

1 1 1 1 1 0 0 0 0 0

0.5831 0.4062 0.2354 0.4088 0.9711 0.8083 0.6523 0.2193 0.3891 0.5491

A titre d’exemple d’utilisation de la fonction randperm, nous pourrions a present souhaiter randomiserl’ordre des colonnes de la matrice G.>>G = G(:,randperm(10))

4.4.3 Operations sur les matrices

Les operations mathematiques sur les matrices suivent les regles de l’algebre lineaire. Des contraintes surla taille et la forme des matrices existent pour permettre de realiser la multiplication (avec l’operateur *), ladivision (avec l’operateur / ou \), l’exponentiation (avec l’operateur ^) de matrices. Dans nos applications anous ce ne sont en general pas ces operations d’algebre lineaire que nous souhaitons realiser sur nos donnees.

Les operations que nous sommes plus susceptible d’effectuer sur des matrices sont les operations qui s’ap-pliquent sur les elements correspondant de 2 matrices de meme dimension. Pour les vecteurs, matrices et tableauxde dimension superieure, les 2 operandes doivent avoir la meme taille. Chaque element du premier operande estassocie avec l’element du deuxieme operande a la meme position pour realiser l’operation mathematique. Si lesoperandes sont de tailles differentes cette association d’elements ”un a un” n’est plus possible.

Voici la liste des operateurs ”un a un”— 1. + L’addition et la soustraction fonctionne de la meme maniere qu’en algebre lineaire— 2. -— 3. .* Pour la multiplication, la division et l’exponentiation, il faut adjoindre un point a l’operateur pour

signifier que l’on souhaite effectuer l’operation element par element.— 4. .^— 5. ./

7

Page 8: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

4.4.4 Suppression de lignes ou colonnes d’une matrice

Parfois, l’on peut vouloir supprimer certaines lignes ou certaines colonnes d’une matrice. Il y a 2 manieresde gerer ce cas. La premiere maniere est de reaffecter a la variable contenant la matrice le sous-ensemble quel’on souhaite garder. Par exemple, pour supprimer la 5eme ligne de la matrice H>> H = magic(10) %creer une matrice (10x10)

>> H = H([1:4,6:end],:) %on reaffecte H en gardant toutes les lignes sauf la 5eme

La deuxieme maniere consiste a effecter une matrice vide aux lignes ou aux colonnes que l’on souhaitesupprimer. Par exemple,>> I = rand(13) %creer une matrice (13x13)

>> I([1:3,:) = [] %supprimons les 3 premieres lignes

>> I([:,end-4:end) = [] %supprimons les 5 dernieres colonnes

5 Appeler/utiliser des fonctions de MATLAB

Prototype d’une fonction type :

[out1,out2,...] = function_name(in1,in2,...)

- une fonction peut prendre des arguments d’entree places entre parentheses apres le nom de la fonction (cesont les donnees a traiter).- une fonction peut renvoyer une ou plusieurs valeurs de retour (ce sont le/les resultat(s) du traitement effectue(s)par la fonction)

Exemple 1 : la fonction max renvoie le maximum du vecteur donne en entree, mais elle peut aussi renvoyerla position du maximum dans ce vecteur. Voir l’aide (>>doc max)

>>notes = [12 , 3 , 17 , 15 , 13 ]

>>max(notes) %affiche la note maximale

>>noteMax = max(notes) %stocke la note maximale ds la variable noteMax

>>[noteMax , ind] = max(notes) %ici, en plus ind contiendra la position de ’noteMax’ dans ’notes’

Exemple 2 : la fonction size renvoie un vecteur contenant la taille selon chaque dimension de la variablepassee en argument (voir l’aide >>doc size)

>>size(ind) %un scalaire est une matrice de dimension (1x1)

>>size(rowvect)

>>size(maPremiereMatrice)

>>dim = size(maPremiereMatrice) %sauvegarde du resultat ds la variable dim

>>[dim1 , dim2] = size(maPremiereMatrice)

Exercice : Creer la matrice F en utilisant la commande suivante :>>F = []; for i=11:10:91; F = [F;i:i+8]; end;

— Quelle est la dimension de la matrice F ?— Quelle est la taille selon chaque dimension ?— Quelle est le maximum de la deuxieme ligne de F ?

Trouver une fonction et de l’aide sur son fonctionnement :

>>lookfor fourier (recherche de fonction par mot-clef, par exemple pour trouver la transformee de fourierdiscrete)>>help fft (obtenir de l’aide sur la fonction fft en ligne de commande)>>doc fft (ouvre un browser, aide plus detaillee. Le browser contient un moteur de recherche et des menuspermettant de facilement trouver une fonction)

8

Page 9: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

6 Ecrire des scripts M-files

Un fichier de script est un fichier externe contenant une suite d’instruction MATLAB. Les fichiers de scriptont une extension de nom de fichier .m. Les M-files peuvent etre des scripts qui executent simplement une suited’instructions ou peuvent etre des fonctions (nous verrons les fonctions plus loin).

Exemple : creer le script ”test script” (soit vous tapez >>edit test_script.m, soit vous faites ’File’->’New’->’Script’ puis ’Save As’ en specifiant ”test script.m” comme nom) avec la suite d’instructions suivante :

clear all %efface toutes les variables du workspace

a = 1

b = 2;

c = 3, d = 4;

e = a*b/(c+d),

scal = 11;

Sauvegardez puis executez le script (menu Debug->Save&Run ou Fleche verte ou F5). Observez la sortiesur la ligne de commande et conclure quant a l’utilisation des ; et ,

Il est egalement possible d’appeler le script depuis la ligne de commande, taper >>test_script

7 Programmer avec MATLAB

7.1 Operateurs de comparaisons

Les operateurs de comparaison sont :== : egal a (x == y)> : strictement plus grand que (x > y)< : strictement plus petit que (x < y)>= : plus grand ou egal a (x >= y)<= : plus petit ou egal a (x <= y)~= : different de (x ~= y)

Le resultat d’une evaluation d’un test logique a l’aide d’operateurs de comparaisons peut-etre Vrai ou Fauxqui sont respectivement representes par les entiers 1 et 0 sous MATLAB ( VRAI <==> 1 , FAUX <==> 0 ).

Exemple :

>>toto = 3 %on affecte a toto la valeur 3

>>titi = 4 %on affecte a titi la valeur 4

>>toto == 3 % egal a ?

>>toto == titi

>>toto ~= 3 % different de ?

>>toto ~= titi

>>toto > 3 % plus grand que ?

>>toto > titi

>>toto < 3 % plus petit que ?

>>toto < titi

>>toto >= 3 % plus grand ou egal a ?

>>toto >= titi

>>toto <= 3 % plus petit ou egal a ?

>>toto <= titi

9

Page 10: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

7.2 Operateurs logiques

Creer 4 variables booleennes pour tester les differents operateurs>>a = 1; b = 0; c = 1; d = 0;

Puis tester les 3 operateurs logiques :

- l’operateur & (ET logique),>>a&c

>>a&b

>>b&d

>>b&a

Un ET logique entre 2 propositions renvoie VRAI si et seulement si les deux propositions sont vraies.

- l’operateur | (OU logique),>>a|c>>a|b>>b|d>>b|aUn OU logique entre 2 propositions renvoie FAUX si et seulement si les deux propositions sont fausses.

l’operateur ~ (NON logique),>>~a

>>~b

>>~b|a>>~(b|a)

Exemple concret : on veut savoir si un individu a 25 ans revolus et mesure moins 180cm. Si le test(age>25) & (taille<180) retourne 1 les deux conditions sont verifiees, si il retourne 0 au moins une des

deux conditions est fausse.>> age = 30; taille = 170; (age>25) & (taille<180)

>> age = 24; taille = 165; (age>25) & (taille<180)

>> age = 35; taille = 185; (age>25) & (taille<180)

>> age = 20; taille = 195; (age>25) & (taille<180)

A titre d’exercice, ecrire l’equation logique permettant de savoir si un individu peut avoir acces au grand8 du parc d’attraction. Un individu a acces au manege dans les cas suivants :- il a plus d’1m30- il est majeur ou accompagne d’un individu majeur.Pour cela, creer 3 variables age , taille , accompagne et teste les differents cas de figure.

Les operateurs de comparaison et les operateurs logiques sont utilises essentiellement dans les instructionsde controle if et while.

7.3 Branchement conditionnel (IF ... THEN ... ELSE ...)

On a parfois besoin d’executer une sequence d’instructions seulement dans le cas ou une condition donneeest verifiee au prealable. Differentes formes d’instruction conditionnee existent sous MATLAB.

— Forme 1if <expression booleenne>

<suite d’instructions executee si l’expression est VRAI>

end

10

Page 11: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

— Forme 2if <expression booleenne>

<suite d’instructions 1 executee si l’expression est VRAI>

else

<suite d’instructions 2 executee si l’expression est FAUSSE>

end

L’indentation n’est pas obligatoire, mais elle permet de rendre le programme plus lisible.

— Forme 3if <expression booleenne 1>

<suite d’instructions 1 executee si l’expression 1 est VRAI>

elseif <expression booleenne 2

<suite d’instructions 2 executee si l’expression 1 est FAUSSE

et que l’expression 2 est VRAI>

.

.

.

else

<suite d’instructions n executee si aucune des expressions n’est VRAI >

end

Exemple : ecrire un script pile_face.m pour simuler un tirage a pile ou face

x = rand(); %renvoie un nombre aleatoire compris

% entre 0 et 1 selon une loi uniforme

if x > 0.5

disp(’pile’)

else

disp(’face’)

end

Exercice : ecrire un script solve_eq_2.m realisant la resolution d’une equation du second ordre ax2 +bx+ c = 0.

Connaissant a,b,c (variables qu’on pourra initialiser au debut du script), trouver x dans l’ensemble desnombres reels.

Rappel :

- si ∆ = b2 − 4ac est superieur a 0, alors il existe 2 solutions reelles, x1 = −b−√

∆2a et x2 = −b+

√∆

2a

- si ∆ est nul, alors il existe 1 solution unique, x = −b2a

- si ∆ est infereur a 0, il n’y a pas de solution ds l’ensemble des reels. On affichera alors ’pas de solution’.

Indication : la racine carre s’obtient avec la fonction sqrt ou en elevant a la puissance 12

7.4 Boucle for

La boucle for repete une suite d’instruction un nombre predetermine de fois. Sa structure est la suivante :

for var = <list-of-values>

<suite d’instruction>

end

La boucle for va executer la <suite d’instruction> pour chaque element de la <list-of-values> enaffectant l’element a la variable var.

11

Page 12: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Exemple 1 :i = 0;

for k = 0:0.1:1

i = i + 1;

disp([’Iteration ’,num2str(i),’, k vaut ’,num2str(k)]);

end

En general, la liste de valeurs sert a indexer un vecteur (ou matrice), on doit alors se limiter a des valeursentieres.

Exemple 2 : (on rajoute plus 2 a tout le monde) :note1 = [ 4 , 12 , 7 , 15 , 12 ]

for i = 1:length(note1) %voir l’aide de length

note1(i) = note1(i) + 2;

end

Exemple 3 : calcul de moyenne sur un vecteur. Ecrire le script suivantnote2 = [ 4 , 18 , 7 , 15 , 12 ]

somme = 0;

for i = 1:length(note2)

%on fait la somme des notes

somme = somme + note2(i);

end

%on divise la somme des notes par le nombre de notes

moyenne = somme / length(note2)

Il existe bien entendu dans MATLAB des fonctions permettant le calcul direct d’une moyenne, ce n’estqu’un exemple. Pour info, >>moyenne2 = mean(note2)

Exercice :

1) Ecrire un script qui cherche le maximum d’un vecteur sans utiliser la fonction max. Pour se faire,initialiser une variable maxi avec le premier element du vecteur, puis ecrire une boucle for qui passeraen revue chaque element du vecteur et qui testera si celui-ci est superieur a maxi, si il est superieur, onmettra a jour maxi avec l’element courant du vecteur. Ainsi une fois tout le vecteur parcouru, maxi devraitcontenir la valeur maximum du vecteur.

2) Modifier le script pour egalement sauvegarder la position du maximum dans le vecteur.

7.5 Boucle while

Il arrive que nous souhaitions repeter une suite d’instructions jusqu’a qu’une condition soit satisfaite. Si l’onne connait pas le nombre d’iterations necessaire a l’avance, une boucle while est preferable par rapport a uneboucle for

while <expression booleenne>

<suite d’instructions>

end

La <suite d’instructions> va etre repetee tant que l’<expression booleenne> est vrai, ou dit autrementjusqu’a ce que l’<expression booleenne> soit fausse.

Exemple 1 : on cherche le premier element negatif d’un vecteurvec = [1,1,1,1,1,1,-1,1,-1]

12

Page 13: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

i = 1;

while vec(i) >= 0 %tant que vec(i) est superieur a 0

i = i+1; %on incremente i pour regarder l’element suivant de vec

end

i %indice du premier element negatif

vec(i) %premier element negatif

Reessayer avec vec = [1,1,1,1,1,1,1,1,1], que ce passe-t-il ?

Modifions le script pour prendre en compte ce cas limite :vec = [1,1,1,1,1,1,-1,1,-1]

i = 1;

while (i <= length(vec)) && (vec(i) >= 0)

i = i+1;

end

if i <= length(vec)

disp( [’i = ’ ,num2str(i)] )

disp( [’vec(i) = ’ ,num2str( vec(i) )] )

else

disp(’Tous les elements sont positifs’)

end

Reessayer avec vec = [1,1,1,1,1,1,1,1,1]

7.6 Instructions break

L’instruction break : provoque l’arret de la premiere boucle for, while englobante.

L’instruction for ci-dessous est stoppee au premier i tel que t(i) est nul :t = -2:10;

for i = 1:length(t)

if t(i) == 0

break;

end

end

disp( [’i = ’ ,num2str(i)] )

disp( [’t(i) = ’ ,num2str( t(i) )] )

7.7 Instructions continue

L’instruction continue : dans une instruction for, while, l’instruction continue provoque l’arret del’iteration courante, et le passage au debut de l’iteration suivante.

Supposons que l’on parcoure un tableau t pour realiser un certain traitement sur tous les elements, saufceux qui sont negatifs :

for i = 1:length(t)

if (t(i) < 0 )

continue; % on passe au i suivant dans le for

end

... % traitement de l’element courant

end

13

Page 14: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Numeros Element du M-file Description

(1) Ligne de definition Definie le nom de la fonction ainsi

de fonction que le nombre et l’ordre des arguments d’entree et de sortie

(2-5) Texte d’aide Description du programme qui sera

affichee lorsqu’on demandera de l’aide sur la fonction

(6+) Corps de la fonction Code de la fonction realisant les calculs necessaires.

Table 1 – Detail des elements constituant une fonction MATLAB

8 Creation d’une fonction

Nous avons evoque precedemment l’utilisation de fonctions MATLAB preprogrammees telle la fonctionmax() et size(). Tout comme pour les scripts, il est possible de creer ses propres fonctions au sein d’un M-file.Contrairement aux scripts, les fonctions peuvent accepter des donnees en entree et renvoyer des donnees ensortie. Chaque fonction a son propre espace en memoire et ne voie pas les donnees du workspace. Seules lesdonnees qu’on aura specifie comme arguments d’entree seront utilisables par la fonction.

A titre d’exemple, nous allons creer une fonction de calcul de moyenne. Ds le repertoire courant, creer lefichier myMean.m (>>edit myMean.m) contenant le code suivant :

function [mu,minv,maxv] = myMean( tab ) (1)

%MYMEAN(TAB) calcul de moyenne sur un tableau 1D (2)

%Pour un tableau ’tab’ a 1 dimension [mu,minv,maxv] = myMean( tab ) (3)

%retourne la moyenne ’mu’, le minimum ’minv’ le maximum ’maxv’ des (4)

%elements de ’tab’. (5)

mu = 0; (6)

for i = 1:length(tab) (7)

mu = mu + tab(i); (8)

end (9)

mu = mu / length(tab); (10)

minv = min(tab); (11)

maxv = max(tab); (12)

La premiere ligne d’une fonction commence avec le mot-cle function. Cette ligne donne le nom de la fonctionainsi que la liste des arguments d’entree et de sortie. Dans le cas de cette fonction, elle ne prend qu’un seulargument en entree mais peut renvoyer de 1 a 3 valeurs. Il est possible mais pas obligatoire de rajouter encommentaires sous la premiere ligne de definition de la fonction un descriptif de ce que fait la fonction. Ceslignes en commentaires seront affiches lorsqu’on demandera de l’aide sur la fonction. Il est important de noterque le nom du fichier .m contenant notre fonction doit etre forme du nom de la fonction suivi de l’extension .m

. Pour notre exemple de calcul de moyenne, le fichier devra obligatoire s’appeler myMean.m.

Le tableau 1 donne un recapitulatif des elements constituants une fonction MATLAB.

- Creer un vecteur (par ex, >>note = [2,18,5,15] ) et appeler la fonction myMean() des manieres suivantes :>>myMean(note)

>>a = myMean(note)

>>[a,b] = myMean(note)

>>[a,b,c] = myMean(note)

- Essayer d’acceder a l’aide (>>help myMean)

14

Page 15: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Exercices :— Ecrivez une fonction de conversion de degres Fahrenheit vers des degres Celsius. (Rappel : C =

59(F − 32))

— Ecrivez une fonction prenant 2 arguments d’entree et 2 arguments de sortie qui permettra dedeterminer la taille en cm et le poids en kg d’une personne a partir de sa taille en pouces (1 in= 2.54 cm) et son poids en livres (1 lb = 0.453 kg).

9 Graphique 2D

9.1 Fonction elementaire

On souhaite afficher la fonction y = sin(3πx) sur 0 < x < 1. Pour cela, on evalue un certain nombre depoints sur l’intervalle.

>>N = 10; h = 1/N; x=0:h:1

>>y = sin(2*pi*x)

Pour afficher les donnees sur un graphique, on utlise la fonction plot(). Elle prend un ou 2 tableaux 1D enentree. Si utilisee avec 2 tableaux, ceux-ci doivent etre de meme taille.

>>figure(1), plot(y)

>>figure(2), plot(x,y)

Comparez les figures 1 et 2, et conclure quant a l’utilisation d’1 ou 2 tableaux.

La fonction figure permet de creer un nouvelle fenetre pouvant contenir des graphes

Il peut etre utile de fermer toutes les fenetres de graphique en debut de script. Pour cela, on appelle lafonction close all

Effectuer un nouvel affichage pour N = 100

9.2 Titres, labels et grille

Pour rajouter un titre et des labels d’axes a notre figures, on utilise

>>title(’Graph de y = sin(3 pi x)’)

>>xlabel(’Axe x’)

>>ylabel(’Axe y’)

Une grille en pointilles peut egalment etre rajoutee

>>grid on %affichage de la grille

>>grid off %masquage de la grille

9.3 Styles de ligne et couleurs

Par defaut, les lignes sont bleues en trait plein. Il est possible de modifier le style et la couleur de laligne en rajoutant un 3eme argument a la fonction plot(). La figure 2 presente les couleurs et styles de lignedisponibles ainsi que les codes associes. Par exemple, pour afficher notre courbe avec un point vert par donnee,nous utiliserons l’option ’g.’.

>>plot(x,y,’g.’)

15

Page 16: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Figure 2 – Styles de ligne

9.4 Plusieurs courbes sur le meme graphique

Un nouvel appel de la fonction plot efface le graphique precedent. Ce n’est pas souhaitable si l’on souhaiteafficher plusieurs courbes sur le meme graphe. Pour empecher MATLAB d’effacer le graphe, on utilise hold on

>>plot(x,sin(3*pi*x),’r-’), hold on

>>plot(x,cos(3*pi*x),’kx’)

>>title(’Plusieurs courbes’), xlabel(’Axe x’),ylabel(’Axe y’)

>>legend(’Sinus’,’Cosinus’)

Une legende peut etre affichee donnant la liste des styles de lignes suivie de la description specifiee parl’utilisateur

9.5 Affichage de plusieurs graphes cote a cote (subplot)

Une fenetre d’un graphique peut etre divisee en sous-fenetres suivant un tableau de dimension (mxn). Onpeut alors afficher dans chaque sous-fenetre une ou plusieurs courbes. Les fenetres sont indexees de 1 a m ·n enligne en partant du coin superieur gauche. (subplot(2,2,k), pour la k ieme fenetre d’un tableau (2x2)). Lesinstructions hold et grid fonctionnent sur le subplot courant

Exemple :>>subplot(2,2,1), plot(x,sin(3*pi*x))

>> ylabel(’sin 3 pi x’)

>>subplot(2,2,2), plot(x,cos(3*pi*x))

>> ylabel(’cos 3 pi x’)

>>subplot(2,2,3), plot(x,sin(6*pi*x))

>> ylabel(’sin 6 pi x’)

>>subplot(2,2,4), plot(x,cos(6*pi*x)), hold on, plot(x(1:10:end),cos(6*pi*x(1:10:end)),’r.’)

>> ylabel(’sin 6 pi x’)

16

Page 17: Initiation MATLAB 1 - scalab.cnrs.frscalab.cnrs.fr/images/Pages_perso/lott/Matlab_s1.pdf · SCALab Initiation MATLAB 1 Laurent Ott Entrer les commandes à exécuter Invite de commandes

SCALab Initiation MATLAB 1 Laurent Ott

Figure 3 – Liste des fonctions graphiques 2D

17