• Aucun résultat trouvé

[PDF] Cours du logiciel Matlab : les calcules matriciels | Formation informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours du logiciel Matlab : les calcules matriciels | Formation informatique"

Copied!
17
0
0

Texte intégral

(1)

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.

(2)

Entrer les commandes à exécuter

Invite de commandes : Voir ou réexécuter les commandes précédemment utilisées

Voir ou changer le répertoire de travail Gestionnaire de fichier :

liste les fichiers du

répertoire de travail Obtenir de l’aide liste les variables en mémoireWorkspace :

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 sp´ecifi´ee pour stocker le r´esultat de l’op´eration, MATLAB stocke le r´esultat dans une variable appel´ee ans (diminutif pour answer). Cette va-riable sera ´ecras´ee `a chaque nouvelle op´eration. Pour ´eviter cela, on peut sp´ecifier le nom d’une variable pour stocker le r´esultat. On pourra alors r´eutiliser le r´esultat de l’op´eration plus tard. Par ex :

>>x = 3+2

x =

5

x prend alors la valeur 5. Cette variable peut alors ˆetre r´eutilis´ee dans un calcul suivant : >>x/2

ans = 2.5000

3.1 Priorit´e des op´erateurs

(3)

1. () 2. ^ 3. * / 4. + -Exemple 1 : >> 3 + 2 * 4 ^ 2

---16 1) Evalutation de 4^2 car ^ `a la priorit´e sur les autres op´erateurs * et +

---32 2) Evalutation de 2*16 car * `a la priorit´e 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 priorit´e sur *

---20 2) Evalutation de 5*4 car () `a la priorit´e 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) 2 1 3+ 1 5+ 1 6 2 3+ 4 5+ 5 6

, vous devriez obtenir 0.6087 3) 12−61 2 +

2

3, vous devriez obtenir 0.625

4) 1+(

2 3)

1 2

12−62 , vous devriez obtenir -0.0757

4

Manipuler des variables

Une variable est un emplacement en m´emoire permettant de stocker provisoirement une donn´ee. On r´ef`ere `a l’emplacement en m´emoire 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 donn´ee stock´ee est une valeur num´erique) ou modifier la donn´ee stock´ee `a l’emplacement m´emoire.

On distingue plusieurs types de variable selon les donn´ees qu’elles servent `a stocker (nombre, caract`ere alpha-num´erique, tableau, matrice, structure). Contrairement `a d’autres langages de programmation, sous MATLAB le type des variable n’a pas besoin d’ˆetre sp´ecifi´e, MATLAB inf`ere le type d’une variable en fonction de la donn´ee que l’on y stocke.

Sous MATALB, les noms de variabledoivent commencer par une lettre, sont sensibles `a la casse (diff´erenciation des caract`eres majuscule/minuscule) et ne peuvent contenir aucun caract`ere sp´ecial except´e le tiret bas ( , underscore). De mˆeme, il faut ´eviter d’utiliser comme nom de variable des noms d´ej`a employ´es comme nom de fonctions (par ex : min, max, exp ...). MATLAB g´en´erera ´egalement une erreur si un des mots-cl´es r´eserv´es

(4)

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

4.1 Utilisation d’une variable

Les variables sont cr´e´ees lors de la premi`ere affectation (op´eration qui permet d’attribuer une valeur `a une variable).

A ← 0 on affecte la valeur 0 `a la variable A, si A n’existait pas auparavant, elle est cr´e´ee. 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 pr´esent 11, B reste inchang´ee

A ← A + 1 on affecte la valeur contenue ds A incr´ement´ee de 1 `a la variable A, A vaut `a pr´esent 12 Sous MATLAB, l’affectation se fait `a l’aide de l’op´erateur =

>> 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 s´epare les ´el´ements du vecteur par une virgule pour obtenir un agencement en ligne >>rowvect2 = [a , mon_nom_de_variable , 12]

Nous avons ici utilis´e le contenu des variables a et mon_nom_de_variable pour affecter les 2 premiers ´el´ements de la matrice rowvect2. Le r´esultat sera rowvect2 = [0.66 , -4 , 12]

- tableau 1D en colonne :

>>colvect = [1;2;3] (on s´epare les ´el´ements 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 mˆeme ligne sont s´epar´es par des virgules, les lignes de la matrice sont s´epar´ees par un point virgule)

Le caract`ere % permet desp´ecifier un commentaire dans le code : ce qui suit sur une ligne le caract`ere % ne sera pas interpr´et´e par MATLAB. Les commentaires dans un code source d’un programme informatique sont en g´en´eral destin´es `a un lecteur humain pour aider `a la compr´ehension du programme. Vous n’avez pas besoin de recopier le commentaire dans les exemples sur une ligne de ce tutoriel.

(5)

4.3 Acc`es aux ´el´ements des tableaux

Acc`es `a un ´el´ement unique :

Pour acc´eder `a un ´el´ement unique d’une variable de type tableau 1D, on sp´ecifie entre paranth`eses apr`es le nom de la variable l’indice de l’´el´ement (l’indice peut ˆetre donner par le biais d’une variable) :

>>rowvect1(1) %acc`es au 1er ´el´ement de rowvect1 >>colvect(3) %3eme ´el´ement de colvect

>> ind = 2

>>rowvect1(ind) %acc`es au 2eme ´el´ement car ind = 2 ne fonctionne que si la variable utlis´ee contient un entier >>rowvect1(end) %dernier ´el´ement

le mot-cl´e end permet d’acc´eder au dernier ´element

Pour les tableaux `a 2 dimensions, on sp´ecifie entre parenth`eses la position de l’´el´ement dans le tableau en donnant en premier la ligne puis la colonne :

>>maPremiereMatrice(2,3) %´el´ement de la 2eme ligne, 3eme colonne

>>maPremiereMatrice(1,end) %´el´ement de la 1eme ligne, derni`ere colonne Acc`es `a un sous-ensemble :

Si l’on souhaite extraire un sous-ensemble d’un tableau, on sp´ecifie pour chaque dimension un tableau des indices que l’on souhaite conserver. Pour un tableau 2D, on r´ecup`ere alors l’intersection des lignes et colonnes sp´ecifi´ees.

>>rowvect1( [1,3] ) %vecteur compos´e du 1er et 3eme ´el´ement 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 sup´erieur droit de maPremiereMatrice

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

L’op´erateur : (double point), lorsqu’utilis´e pour acc´eder aux ´el´ements d’un tableau, permet de conserver tous les indices de la dimension.

L’op´erateur : permet ´egalement de cr´eer un tableau 1D en ligne de la mani`ere suivante : <debut>[:<incr´ement>]:<fin>

(6)

Ceci va cr´eer un vecteur en ligne de valeurs allant de <debut> jusqu’`a <fin> par pas de <incr´ement>. L’incr´ement est optionnel. Si il n’est pas sp´ecifi´e, il sera par d´efaut pris ´egal `a 1.

Exemple de cr´eation de tableau avec l’op´erateur : >>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 g´en´er´e n’ira que jusqu’`a la plus proche valeur inf´erieure.

>>F = 10:-1:0 %fonctionne ´egalement avec un pas n´egatif.

Cette op´eration est utile pour : — cr´eer/initialiser des vecteurs

— acc´eder `a des sous-ensembles de vecteurs ou matrices >>E(1:10) %10 premiers ´el´ements de E

>>E(end-9:end) %10 derniers ´el´ements de E — dans les boucles for (`a venir)

Exercice : cr´eer tout d’abord la matrice M, `a partir de la commande suivante >>M = magic(10). Cette commande va cr´eer une matrice de dimension (10x10) ayant des propri´et´es particuli`eres.

— Cr´eer une matrice M1 compos´ee uniquement de la premi`ere colonne de M — Cr´eer une matrice M2 compos´ee uniquement de la deuxi`eme ligne de M — Cr´eer une matrice M3 compos´ee des 3 premi`eres colonnes de M

— Cr´eer une matrice M4 compos´ee des 3 derni`eres lignes de M

— Cr´eer une matrice M5 compos´ee de l’intersection des 1`ere, 5`eme, et 7`eme lignes de M et des 2`eme, 4`eme et 8`eme colonnes de M

Vous devriez obtenir : M5 =

99 8 51

93 2 75

5 89 32

4.4 Plus sur les matrices

4.4.1 Cr´eation de matrices sp´eciales

La matrice est la structure de donn´ees de base de MATLAB. Pour rappel, MATLAB a ´et´e initialement cr´e´e comme solution de calcul matriciel (alg`ebre lin´eaire). De ce fait, MATLAB dispose de fonctions pour cr´eer diff´erents types de matrices utiles.

— La fonction ones : cr´eer une matrice dont tous les ´el´ements sont des 1. >>Mones1 = ones(4) %matrice de taille (4x4)

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

— La fonction zeros : cr´eer une matrice dont tous les ´el´ements sont des 0.

— La fonction rand : cr´eer une matrice de nombres al´eatoires uniform´ement distribu´e 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 : cr´eer une matrice de nombres al´eatoires suivant une loi normale centr´ee r´eduite. — La fonction randperm : cr´eer un vecteur ligne (matrice 1xn) contenant une permutation al´eatoire du

nombre entier sp´ecifi´e.

>>randperm(6) pourrait renvoyer le vecteur suivant

[4 1 2 5 3 6 ]

(7)

4.4.2 Assemblage de matrices (concat´enation)

La concatenation de matrices permet de rassembler une ou plusieurs matrices pour en cr´eer une nou-velle. Les crochets [] que nous avons vu plus tˆot pour construire des tableaux servent ´egalement `a r´ealiser la concat´enation. Par exemple, l’expression C = [A , B] va concat´ener horizontalement les matrices A et B. Tan-dis que l’expression C = [A ; B] va r´ealiser une concat´enation verticale. L’op´eration de concat´enation ´echoura si les dimensions des matrices `a concat´ener ne sont pas compatibles, i.e. pour r´ealiser une concat´enation hori-zontal les matrices doivent avoir le mˆeme nombre de lignes et pour r´ealiser une concat´enation verticale le mˆeme nombre 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 probl`eme, les 2 matrices on bien le mˆeme nombre de colonnes. Essayer maintenant de faire la concat´enation horizontale, que ce passe-t-il ?

Exercice : - Utiliser les fonctions ones, zeros et rand ainsi que la concat´enation de matrices pour cr´eer une 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 pr´esent souhaiter randomiser l’ordre des colonnes de la matrice G.

>>G = G(:,randperm(10))

4.4.3 Op´erations sur les matrices

Les op´erations math´ematiques sur les matrices suivent les r`egles de l’alg`ebre lin´eaire. Des contraintes sur la taille et la forme des matrices existent pour permettre de r´ealiser la multiplication (avec l’op´erateur *), la division (avec l’op´erateur / ou \), l’exponentiation (avec l’op´erateur ^) de matrices. Dans nos applications `a nous ce ne sont en g´en´eral pas ces op´erations d’alg`ebre lin´eaire que nous souhaitons r´ealiser sur nos donn´ees.

Les op´erations que nous sommes plus susceptible d’effectuer sur des matrices sont les op´erations qui s’ap-pliquent sur les ´el´ements correspondant de 2 matrices de mˆeme dimension. Pour les vecteurs, matrices et tableaux de dimension sup´erieure, les 2 op´erandes doivent avoir la mˆeme taille. Chaque ´el´ement du premier op´erande est associ´e avec l’´el´ement du deuxi`eme op´erande `a la mˆeme position pour r´ealiser l’op´eration math´ematique. Si les op´erandes sont de tailles diff´erentes cette association d’´el´ements ”un `a un” n’est plus possible.

Voici la liste des op´erateurs ”un `a un”

— 1. + L’addition et la soustraction fonctionne de la mˆeme mani`ere qu’en alg`ebre lin´eaire — 2.

-— 3. .* Pour la multiplication, la division et l’exponentiation, il faut adjoindre un point `a l’op´erateur pour signifier que l’on souhaite effectuer l’op´eration ´el´ement par ´el´ement.

— 4. .^ — 5. ./

(8)

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 mani`eres de g´erer ce cas. La premi`ere mani`ere est de r´eaffecter `a la variable contenant la matrice le sous-ensemble que l’on souhaite garder. Par exemple, pour supprimer la 5eme ligne de la matrice H

>> H = magic(10) %cr´eer une matrice (10x10)

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

La deuxi`eme mani`ere consiste `a effecter une matrice vide aux lignes ou aux colonnes que l’on souhaite supprimer. Par exemple,

>> I = rand(13) %cr´eer une matrice (13x13)

>> I([1:3,:) = [] %supprimons les 3 premi`eres lignes

>> I([:,end-4:end) = [] %supprimons les 5 derni`eres 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’entr´ee plac´es entre parenth`eses apr`es le nom de la fonction (ce sont les donn´ees `a traiter).

- une fonction peut renvoyer une ou plusieurs valeurs de retour (ce sont le/les r´esultat(s) du traitement effectu´e(s) par la fonction)

Exemple 1 : la fonction max renvoie le maximum du vecteur donn´e en entr´ee, mais elle peut aussi renvoyer la 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 variable pass´ee 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 r´esultat ds la variable dim >>[dim1 , dim2] = size(maPremiereMatrice)

Exercice : Cr´eer 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 deuxi`eme 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 transform´ee de fourier discr`ete)

>>help fft (obtenir de l’aide sur la fonction fft en ligne de commande)

>>doc fft (ouvre un browser, aide plus d´etaill´ee. Le browser contient un moteur de recherche et des menus permettant de facilement trouver une fonction)

(9)

6

Ecrire des scripts M-files

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

Exemple : cr´eer le script ”test script” (soit vous tapez >>edit test_script.m, soit vous faites ’File’->’New’->’Script’ puis ’Save As’ en sp´ecifiant ”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 ex´ecutez le script (menu Debug->Save&Run ou Fleche verte ou F5). Observez la sortie sur 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 Op´erateurs de comparaisons

Les op´erateurs 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) ~= : diff´erent de (x ~= y)

Le r´esultat d’une ´evaluation d’un test logique `a l’aide d’op´erateurs de comparaisons peut-ˆetre Vrai ou Faux qui sont respectivement repr´esent´es 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 % diff´erent 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

(10)

7.2 Op´erateurs logiques

Cr´eer 4 variables bool´eennes pour tester les diff´erents op´erateurs >>a = 1; b = 0; c = 1; d = 0;

Puis tester les 3 op´erateurs logiques : - l’op´erateur & (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’op´erateur | (OU logique),

>>a|c >>a|b >>b|d >>b|a

Un OU logique entre 2 propositions renvoie FAUX si et seulement si les deux propositions sont fausses. l’op´erateur ~ (NON logique),

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

Exemple concret : on veut savoir si un individu a 25 ans r´evolus et mesure moins 180cm. Si le test (age>25) & (taille<180) retourne 1 les deux conditions sont v´erifi´ees, 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 acc`es au grand 8 du parc d’attraction. Un individu a acc`es au man`ege dans les cas suivants :

- il a plus d’1m30

- il est majeur ou accompagn´e d’un individu majeur.

Pour cela, cr´eer 3 variables age , taille , accompagne et test´e les diff´erents cas de figure.

Les op´erateurs de comparaison et les op´erateurs logiques sont utilis´es essentiellement dans les instructions de contrˆole if et while.

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

On a parfois besoin d’ex´ecuter une s´equence d’instructions seulement dans le cas o`u une condition donn´ee est v´erifi´ee au pr´ealable. Diff´erentes formes d’instruction conditionn´ee existent sous MATLAB.

— Forme 1

if <expression bool´eenne>

<suite d’instructions ex´ecut´ee si l’expression est VRAI> end

(11)

— Forme 2

if <expression bool´eenne>

<suite d’instructions 1 ex´ecut´ee si l’expression est VRAI> else

<suite d’instructions 2 ex´ecut´ee si l’expression est FAUSSE> end

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

if <expression bool´eenne 1>

<suite d’instructions 1 ex´ecut´ee si l’expression 1 est VRAI> elseif <expression bool´eenne 2

<suite d’instructions 2 ex´ecut´ee si l’expression 1 est FAUSSE et que l’expression 2 est VRAI> .

. . else

<suite d’instructions n ex´ecut´ee 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 al´eatoire 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 r´ealisant la r´esolution d’une ´equation du second ordre ax2 + bx + c = 0.

Connaissant a,b,c (variables qu’on pourra initialiser au d´ebut du script), trouver x dans l’ensemble des nombres r´eels.

Rappel :

- si ∆ = b2− 4ac est sup´erieur `a 0, alors il existe 2 solutions r´eelles, x1 = −b−

√ ∆

2a et x2 =

−b+√∆ 2a

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

- si ∆ est inf´ereur `a 0, il n’y a pas de solution ds l’ensemble des r´eels. On affichera alors ’pas de solution’. Indication : la racine carr´e s’obtient avec la fonction sqrt ou en ´elevant `a la puissance 12

7.4 Boucle for

La boucle for r´ep´ete une suite d’instruction un nombre pr´ed´etermin´e 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 ´el´ement de la <list-of-values> en affectant l’´el´ement `a la variable var.

(12)

Exemple 1 : i = 0;

for k = 0:0.1:1 i = i + 1;

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

En g´en´eral, la liste de valeurs sert `a indexer un vecteur (ou matrice), on doit alors se limiter `a des valeurs enti`eres.

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 suivant note2 = [ 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’est qu’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 ´el´ement du vecteur, puis ´ecrire une boucle for qui passera en revue chaque ´el´ement du vecteur et qui testera si celui-ci est sup´erieur `a maxi, si il est sup´erieur, on mettra `a jour maxi avec l’´el´ement courant du vecteur. Ainsi une fois tout le vecteur parcouru, maxi devrait contenir 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 r´ep´eter une suite d’instructions jusqu’`a qu’une condition soit satisfaite. Si l’on ne connait pas le nombre d’it´erations n´ecessaire `a l’avance, une boucle while est pr´ef´erable par rapport `a une boucle for

while <expression bool´eenne> <suite d’instructions> end

La <suite d’instructions> va ˆetre r´ep´et´ee tant que l’<expression bool´eenne> est vrai, ou dit autrement jusqu’`a ce que l’<expression bool´eenne> soit fausse.

Exemple 1 : on cherche le premier ´el´ement n´egatif d’un vecteur vec = [1,1,1,1,1,1,-1,1,-1]

(13)

i = 1;

while vec(i) >= 0 %tant que vec(i) est sup´erieur `a 0

i = i+1; %on incr´emente i pour regarder l’´el´ement suivant de vec end

i %indice du premier ´el´ement n´egatif vec(i) %premier ´el´ement n´egatif

R´eessayer 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 ´el´ements sont positifs’) end

R´eessayer avec vec = [1,1,1,1,1,1,1,1,1]

7.6 Instructions break

L’instruction break : provoque l’arrˆet de la premi`ere boucle for, while englobante. L’instruction for ci-dessous est stopp´ee 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’arrˆet de l’it´eration courante, et le passage au d´ebut de l’it´eration suivante.

Supposons que l’on parcoure un tableau t pour r´ealiser un certain traitement sur tous les ´el´ements, sauf ceux qui sont n´egatifs :

for i = 1:length(t) if (t(i) < 0 )

continue; % on passe au i suivant dans le for end

... % traitement de l’´el´ement courant end

(14)

Num´eros Element du M-file Description

(1) Ligne de d´efinition D´efinie le nom de la fonction ainsi

de fonction que le nombre et l’ordre des arguments d’entr´ee et de sortie (2-5) Texte d’aide Description du programme qui sera

affich´ee lorsqu’on demandera de l’aide sur la fonction (6+) Corps de la fonction Code de la fonction r´ealisant les calculs n´ecessaires.

Table 1 – D´etail des ´el´ements constituant une fonction MATLAB

8

Cr´

eation d’une fonction

Nous avons ´evoqu´e pr´ec´edemment l’utilisation de fonctions MATLAB pr´eprogramm´ees telle la fonction max() et size(). Tout comme pour les scripts, il est possible de cr´eer ses propres fonctions au sein d’un M-file. Contrairement aux scripts, les fonctions peuvent accepter des donn´ees en entr´ee et renvoyer des donn´ees en sortie. Chaque fonction a son propre espace en m´emoire et ne voie pas les donn´ees du workspace. Seules les donn´ees qu’on aura sp´ecifi´e comme arguments d’entr´ee seront utilisables par la fonction.

A titre d’exemple, nous allons cr´eer une fonction de calcul de moyenne. Ds le r´ep´ertoire courant, cr´eer le fichier 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)

%´el´ements 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 premi`ere ligne d’une fonction commence avec le mot-cl´e function. Cette ligne donne le nom de la fonction ainsi que la liste des arguments d’entr´ee et de sortie. Dans le cas de cette fonction, elle ne prend qu’un seul argument en entr´ee mais peut renvoyer de 1 `a 3 valeurs. Il est possible mais pas obligatoire de rajouter en commentaires sous la premi`ere ligne de d´efinition de la fonction un descriptif de ce que fait la fonction. Ces lignes en commentaires seront affich´es lorsqu’on demandera de l’aide sur la fonction. Il est important de noter que le nom du fichier .m contenant notre fonction doit ˆetre form´e 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 r´ecapitulatif des ´el´ements constituants une fonction MATLAB.

- Cr´eer un vecteur (par ex, >>note = [2,18,5,15] ) et appeler la fonction myMean() des mani`eres suivantes : >>myMean(note)

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

(15)

Exercices :

— Ecrivez une fonction de conversion de degr´es Fahrenheit vers des degr´es Celsius. (Rappel : C =

5

9(F − 32))

— Ecrivez une fonction prenant 2 arguments d’entr´ee et 2 arguments de sortie qui permettra de d´eterminer 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 ´el´ementaire

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

>>N = 10; h = 1/N; x=0:h:1 >>y = sin(2*pi*x)

Pour afficher les donn´ees sur un graphique, on utlise la fonction plot(). Elle prend un ou 2 tableaux 1D en entr´ee. Si utilis´ee avec 2 tableaux, ceux-ci doivent ˆetre de mˆeme 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 cr´eer un nouvelle fenˆetre pouvant contenir des graphes

Il peut ˆetre utile de fermer toutes les fenˆetres de graphique en d´ebut de script. Pour cela, on appelle la fonction 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 pointill´es peut ´egalment ˆetre rajout´ee >>grid on %affichage de la grille

>>grid off %masquage de la grille

9.3 Styles de ligne et couleurs

Par d´efaut, les lignes sont bleues en trait plein. Il est possible de modifier le style et la couleur de la ligne en rajoutant un 3`eme argument `a la fonction plot(). La figure 2 pr´esente les couleurs et styles de ligne disponibles ainsi que les codes associ´es. Par exemple, pour afficher notre courbe avec un point vert par donn´ee, nous utiliserons l’option ’g.’.

(16)

Figure 2 – Styles de ligne

9.4 Plusieurs courbes sur le mˆeme graphique

Un nouvel appel de la fonction plot efface le graphique pr´ec´edent. Ce n’est pas souhaitable si l’on souhaite afficher plusieurs courbes sur le mˆeme graphe. Pour emp´echer 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 l´egende peut ˆetre affich´ee donnant la liste des styles de lignes suivie de la description sp´ecifi´ee par l’utilisateur

9.5 Affichage de plusieurs graphes cˆote `a cˆote (subplot)

Une fenˆetre d’un graphique peut ˆetre divis´ee en sous-fenˆetres suivant un tableau de dimension (mxn). On peut alors afficher dans chaque sous-fenˆetre une ou plusieurs courbes. Les fenˆetres sont index´ees de 1 `a m · n en ligne en partant du coin sup´erieur gauche. (subplot(2,2,k), pour la k i`eme fenˆetre d’un tableau (2x2)). Les instructions 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’)

(17)

Figure

Figure 1 – L’interface graphique de l’environnement MATLAB (version R2010b) + (addition) ⇒ &gt;&gt; 3+2
Table 1 – D´ etail des ´ el´ ements constituant une fonction MATLAB
Figure 2 – Styles de ligne 9.4 Plusieurs courbes sur le mˆ eme graphique
Figure 3 – Liste des fonctions graphiques 2D

Références

Documents relatifs

If the difference between the number of children that White and Visible Minorities females have were significant, then the discrimination portion of the wage

générer cette dernière est liée au pouvoir de marché de la société acquéreuse. Mais bien souvent, la création de valeur dans les F&amp;A n’est pas toujours au rendez-vous. De

We examine the impact of the abnormal part of recognized goodwill (proxy for PPA quality) on revisions of analyst expectations (i.e. revision of target prices, earnings

2.1 Essai de classement des actions de l’entreprise en niveau de responsabilité Afin d’établir des « portraits » de la RSE, nous avons retenu pour notre étude trois entreprises

Les nouvelles informations disponibles (honoraires d’audit, honoraires de non-audit, ratio des honoraires de non-audit et calcul des honoraires anormaux) peuvent

Critics such as Hamilton have claimed that the difference between the treatment of Goneril and Regan's bodies, in contrast to Cordelia's, is that &#34;we watching this

Abstract Parsing and its impact on The Quranic understanding This research aims at illustrating the impact of parsing on the understanding of the reader and listener to the Quranic

 a minimal configuration list MinConfig(S*) of functions that can be allocated to a resource and are “expected” in a complex situation. The list is composed of the