Vous êtes sur la page 1sur 36
Florence Nicol Unité de Neurosciences Cognitives Université Catholique de Louvain Louvain-la-Neuve, Belgique
Florence Nicol Unité de Neurosciences Cognitives Université Catholique de Louvain Louvain-la-Neuve, Belgique
Florence Nicol Unité de Neurosciences Cognitives Université Catholique de Louvain Louvain-la-Neuve, Belgique
Florence Nicol Unité de Neurosciences Cognitives Université Catholique de Louvain Louvain-la-Neuve, Belgique

Florence Nicol Unité de Neurosciences Cognitives Université Catholique de Louvain Louvain-la-Neuve, Belgique florence.nicol@psp.ucl.ac.be 15 Septembre 2004

F.Nicol – M Files - 1

• Fichier d’instructions : » Enregistrer une séquence d’instructions (programme) dans un fichier M (extension

• Fichier d’instructions :

» Enregistrer une séquence d’instructions (programme) dans un fichier M (extension « .m ») et les faire exécuter par Matlab en appelant une seule commande associée au programme

• Deux types de fichiers M :

» Le fichier de scripts : exécuter simplement une suite d’instructions

» Le fichier de fonctions : peut prendre des arguments à l’entrée (inputs) et produit un résultat (outputs)

INPUTS

Fonction : instructions agissant sur les INPUTS

) INPUTS Fonction : instructions agissant sur les INPUTS OUTPUTS Met en relation des variables d’entrés
) INPUTS Fonction : instructions agissant sur les INPUTS OUTPUTS Met en relation des variables d’entrés

OUTPUTS

Fonction : instructions agissant sur les INPUTS OUTPUTS Met en relation des variables d’entrés (INPUTS) et

Met en relation des variables d’entrés (INPUTS) et des variables de sortie (OUTPUTS)

Ex :

x

variables d’entrés (INPUTS) et des variables de sortie (OUTPUTS) Ex : x fonction sinus F.Nicol –

fonction sinus

F.Nicol – M Files - 2

variables d’entrés (INPUTS) et des variables de sortie (OUTPUTS) Ex : x fonction sinus F.Nicol –

sinus(x)

• Scripts : exécuter simplement une suite d’instructions – Le gâteau au chocolat : 4

• Scripts : exécuter simplement une suite d’instructions

– Le gâteau au chocolat :

4 œufs, 40g de farine, 200g de chocolat, 100g de beurre, 100g de sucre préchauffer le four à 180°C faire fondre le chocolat ajouter le beurre au chocolat battre les œufs avec le sucre

incorporer la farine mélanger avec le mélange précédent verser dans un moule mettre au four 30mn

précédent verser dans un moule mettre au four 30mn recette • Fonction : peut prendre des
précédent verser dans un moule mettre au four 30mn recette • Fonction : peut prendre des

recette

• Fonction : peut prendre des arguments à l’entrée (inputs) et produit un résultat (outputs)

– La recette d’une pâtisserie

Inputs (ingrédients) : œufs, sucre, farine, chocolat, beurre Fonction : function gâteau = recette(œufs, sucre, beurre, farine, chocolat) Outputs : une pâtisserie

On obtient le gâteau au chocolat précédent si les inputs spécifiés par l’utilisateur sont :

4 œufs, 40g de farine, 200g de chocolat, 100g de beurre, 100g de sucre

F.Nicol – M Files - 3

• Fichier M : » généralement un fichier texte créé dans un éditeur de texte
• Fichier M : » généralement un fichier texte créé dans un éditeur de texte

• Fichier M :

» généralement un fichier texte créé dans un éditeur de texte

• Editeur de texte sous Matlab :

» Menu File>New>M-File

» Commande edit :

edit : ouvre l’éditeur de texte edit nomfich : ouvre le fichier nomfich.m dans l’éditeur de texte Ex : edit mean

• Autres commandes utiles :

» Commande what :

liste des noms des fichiers du répertoire courant

» Commande type :

type nomfich.m : affiche dans la fenêtre de commandes le contenu du fichier nomfich.m Ex : type mean

F.Nicol – M Files - 4

• Fichier de scripts : » Forme la plus simple d’un fichier M : ensemble

• Fichier de scripts :

» Forme la plus simple d’un fichier M : ensemble d’instructions Matlab qui joue le rôle de programme principal

» Instructions enregistrées dans un fichier M nomscript.m

» Crée ou opère sur des données de l’espace de travail

• Structure de base d’un script :

%lignes d’aide séquence d’instructions

• Exécution d’un script :

» Dans l’éditeur de texte : Menu Debug>Run ou l’icône

l’éditeur de texte : Menu Debug>Run ou l’icône » Taper nomscript dans la fenêtre de commande

» Taper nomscript dans la fenêtre de commande ou le programme appelant

• Utilité d’un script:

» Automatiser un ensemble d’instructions à exécuter plusieurs fois

» Modifier un ensemble d’instructions dans un éditeur de texte

F.Nicol – M Files - 5

• Exemple 1 : dans le répertoire de travail, fichier scriptsinus.m Ecrire un script traçant

• Exemple 1 : dans le répertoire de travail, fichier scriptsinus.m

Ecrire un script traçant le plot de la fonction sinus pour un intervalle allant de 0 à 2pi avec un pas de pi/100 (201 valeurs)

%SINUS : plot de la fonction sinus sur l'intervalle x=0:pi/100:2*pi

x = 0:pi/100:2*pi;

y = sin(x); plot(x,y); title('sinus');

Appel du script :

dans la fenêtre de commande, taper scriptsinus

F.Nicol – M Files - 6

• Exemple 2 : dans le répertoire de travail, fichier scriptplot.m %ligne H1 : visualiser

• Exemple 2 : dans le répertoire de travail, fichier scriptplot.m

%ligne H1 : visualiser une suite d’images de coupes de cerveau dans la même fenêtre graphique %images provenant du fichier mri %définir la première et la dernière coupe en initialisant les variables image_start et image_end %définir le nombre de plots dans la fenêtre graphique en initialisant les variables nbl et nbcol

load mri; D = squeeze(D); image_start = 4; image_end = 18; image_num = image_start; nbl = 3; nbcol = 5; hold on; while image_num <= image_end

%charger les données

%première image %dernière image %initialisation du compteur d’images %nombre de lignes et de colonnes dans la fenêtre graphique

%tant que le compteur n’atteint pas la dernière image

subplot(nbl,nbcol,image_num-image_start+1); %tracer l’image de la coupe de cerveau image(D(:,:,image_num)); title(['Slice ', num2str(image_num)]); axis image; axis off; colormap(map);

image_num = image_num+1;

%incrémenter le compteur d’image

end

hold off;

Appel du script : dans la fenêtre de commande, taper scriptplot

F.Nicol – M Files - 7

• Fichiers de fonctions : » Définir des fonctions utilisateur : créer des fonctions qui

• Fichiers de fonctions :

» Définir des fonctions utilisateur : créer des fonctions qui ne figurent pas parmi les fonctions Matlab intégrées

» Programmation d’applications

» Peut prendre des arguments à l’entrée (inputs) et retourne des arguments à la sortie (outputs)

• Définition d’une fonction :

OUTPUT

sortie ( outputs ) • Définition d’une fonction : OUTPUT INPUT mot-clé function vars = nomfonc
INPUT
INPUT

mot-clé

function vars = nomfonc(vare)

: OUTPUT INPUT mot-clé function vars = nomfonc ( vare ) séquence d’instructions vars = variable

séquence d’instructions

vars = variable de sortie de la fonction (input) vare = variable d’entrée de la fonction (output) nomfonc = nom de la fonction séquence d’instructions = corps de la fonction

F.Nicol – M Files - 8

Nom de la fonction

Corps de la fonction

• Structure de base : 1. Définition de la fonction : une ligne qui définit

• Structure de base :

1. Définition de la fonction : une ligne qui définit le nom de la fonction, le nombre et l’ordre des inputs et des outputs.

2. La ligne H1 : première ligne d’aide « help1 » recherchée quand on utilise la commande look for. Cette ligne commence par le caractère %.

3. Le texte d’aide : texte d’aide affiché à la suite de la ligne H1 quand on utilise la commande help. Chaque ligne du texte commence par le caractère %.

4. Le corps de la fonction : contient le code qui exécute les calculs et assigne des valeurs aux arguments outputs.

5. Les commentaires : une ligne de commentaires commence impérativement par le caractère % et peut apparaître à n’importe quel endroit dans le fichier.

• Remarque :

» Le texte d’aide est suivi d’une ligne vide ou d’une instruction exécutable (ne commençant pas par le caractère %)

F.Nicol – M Files - 9

• Sauvegarder une fonction : » Enregistrer impérativement la fonction dans le fichier nomfonc.m »

• Sauvegarder une fonction :

» Enregistrer impérativement la fonction dans le fichier nomfonc.m

» Le fichier M doit porter le nom de la fonction qu’il appelle

• Exécuter une fonction :

– Appeler la fonction par son nom nomfonc :

» Affecter une valeur à la variable d’entrée inp

» Taper nomfonc(inp) dans la fenêtre de commande retourne le résultat dans la fenêtre de commande

» Taper out=nomfonc(inp) sauvegarde le résultat dans une variable out

– Remarque :

» on peut aussi entrer directement les valeurs de l’input dans la fonction

Ex : taper nomfonc(3) est équivalent à

inp=3;

nomfonc(inp);

• Fin de la fonction :

» pas de mot-clé

» la fonction est supposée se terminer à la fin du fichier

• Commande return

» provoquer un retour au programme appelant

F.Nicol – M Files - 10

• Exemple 1 : construire une fonction qui calcule la somme des éléments d’un vecteur

• Exemple 1 : construire une fonction qui calcule la somme des éléments d’un vecteur dans le répertoire de travail : fichier somme.m

function s = somme(x) %SOMME : calcule la somme des éléments du vecteur x %Input : le vecteur d’éléments x %Output : la somme des éléments s

n = length(x);

s=0;

for i=1:n

end

s=s+x(i);

Appel de la fonction :

ou

x = 1:10;

somme(x)

somme(1:10)

som=somme(x);

%longueur du vecteur x %initialiser la somme

%le nom de la variable d’entrée n’est pas %nécessairement celui utilisé dans la fonction %afficher le résultat dans la fenêtre de commande

%on peut directement entrer les valeurs de l’input

%sauvegarder le résultat dans l’espace de travail

F.Nicol – M Files - 11

• Définition d’une fonction : multiples inputs/outputs OUTPUTS INPUTS Nom de la fonction function [

• Définition d’une fonction : multiples inputs/outputs

OUTPUTS

d’une fonction : multiples inputs/outputs OUTPUTS INPUTS Nom de la fonction function [ vars 1 ,
INPUTS
INPUTS

Nom de la fonction

function [vars 1 , …, vars m ] = nomfonc(vare 1 , …, vare n )

mot-clé

m ] = nomfonc ( vare 1 , …, vare n ) mot-clé séquence d’instructions Corps

séquence d’instructions

Corps de la fonction

vars 1 , …, vars m = variables de sortie de la fonction (inputs) vare 1 , …, vare n = variables d’entrée de la fonction (outputs) nomfonc = nom de la fonction séquence d’instructions = corps de la fonction

• Définition d’une fonction : pas d’outputs

function nomfonc(vare 1 , …, vare n ) function [ ] = nomfonc(vare 1 , …, vare n )

F.Nicol – M Files - 12

• Exécuter une fonction : multiples outputs function [ vars 1 , …, vars m

• Exécuter une fonction : multiples outputs

function [vars 1 , …, vars m ] = nomfonc(vare 1 , …, vare n )

– Affecter une valeur aux variables inputs inp 1 , …, inp n

– Quand la fonction retourne plus d’un output :

[out 1 , …, out m ] = nomfonc(inp 1 ,…,inp n )

» retourne dans les variables out 1 , …, out m les valeurs des outputs

[out 1 , …, out k ] = nomfonc(inp 1 ,…,inp n )

» retourne dans les variables out 1 , …, out k les k premiers outputs

nomfonc(inp 1 ,…,inp n )

» retourne uniquement le premier output

• Remarque :

– L’ordre d’appel des arguments input et output est important !

– Ranger les variables de sortie (outputs) par ordre d’importance

F.Nicol – M Files - 13

• Exemple 1 : dans le répertoire de travail, fichier sliceplot.m (pas d’ouputs) function

• Exemple 1 : dans le répertoire de travail, fichier sliceplot.m (pas d’ouputs)

function sliceplot(image_start,image_end,nbl,nbcol) %ligne H1 : visualiser une suite d’images de coupes de cerveau dans la même fenêtre graphique %images provenant du fichier mri %argulents inputs : la première et la dernière coupe en initialisant les variables image_start et image_end %arguments inputs : le nombre de plots dans la fenêtre graphique en initialisant les variables nbl et nbcol

load mri; D = squeeze(D); image_num = image_start; hold on; while image_num <= image_end

%charger les données

%initialisation du compteur d’images

%tant que le compteur n’atteint pas la dernière image

subplot(nbl,nbcol,image_num-image_start+1); %tracer l’image de la coupe de cerveau image(D(:,:,image_num)); title(['Slice ', num2str(image_num)]); axis image; axis off; colormap(map);

image_num = image_num+1;

%incrémenter le compteur d’image

end

hold off;

Appel de la fonction :

ou

image_start = 4; image_end = 18; nbl = 3; nbcol = 5; sliceplot(image_start,image_end,nbl,nbcol)

sliceplot(4, 18, 3, 5)

F.Nicol – M Files - 14

• Exemple 2 : 3 inputs, 1 output dans le répertoire de travail, fichier max3.m

• Exemple 2 : 3 inputs, 1 output

dans le répertoire de travail, fichier max3.m

function G=max3(A,B,C) %ligne H1 : calculer le plus grand de trois nombres %arguments inputs : les trois nombres à comparer A, B et C %arguments outputs : le plus grand des trois nombres G

if A>B

%comparer les deux premiers nombres A et B

G

= A;

else

G

= B;

end

if C>G

%comparer avec le troisième nombre C

G = C;

end

Appel de la fonction :

ou

max3(5, -1, 10)

A = 5; B = -1; C = 10; max3(A, B, C)

F.Nicol – M Files - 15

• Exemple 4 : 3 inputs, 3 ouputs dans le répertoire de travail, fichier maxmin3.m

• Exemple 4 : 3 inputs, 3 ouputs dans le répertoire de travail, fichier maxmin3.m

function [min, max,dist]=maxmin3(A,B,C) %ligne H1 : calculer le plus grand et le plus petit de trois nombres %arguments inputs : les trois nombres à comparer A, B et C %arguments outputs : le plus grand et le plus petit des trois nombres, l’étendue en les deux

if A>B max = A; min = B; else max = B; min = A; end if C>max max = C; elseif C<min min = C; end dist = abs(max-min);

%comparer les deux premiers nombres A et B

%comparer avec le troisième nombre C

Appel de la fonction :

maxmin3(5, -1, 10) [m, n] = maxmin3(5, -1, 10) [m, n, d] = maxmin3(5, -1, 10)

renvoie le premier output (le min) renvoie les deux premiers outputs (les min et max) renvoie les 3 outputs (les min, max et l’étendue)

F.Nicol – M Files - 16

• Fichier M et sous fonctions : – un fichier M peut contenir le code

• Fichier M et sous fonctions :

– un fichier M peut contenir le code de plusieurs fonctions :

» la première fonction du fichier sera la fonction principale i.e. la fonction appelée par le fichier M

» les fonctions suivantes sont les sous fonctions appelées par la fonction principale

• Remarque :

– l’ordre d’apparition des sous fonctions est indifférent du moment que la fonction principale apparaît en premier

– Matlab contrôle si une fonction est (par ordre de priorité) :

1. une sous fonction

2. une fonction privée (cf. section suivante)

3. une fonction standard du « search path »

suivante) 3. une fonction standard du « search path » On peut donc utiliser une sous

On peut donc utiliser une sous fonction du même nom qu’une fonction standard : elle sera d’abord reconnue comme une sous fonction du fichier M plutôt qu’une fonction standard du même nom implémentée dans le « search path »

F.Nicol – M Files - 17

• Exemple : fichier newstats.m function [avg, med] = newstats(u) %NEWSTATS calcule la moyenne et

• Exemple : fichier newstats.m

function [avg, med] = newstats(u)

%NEWSTATS calcule la moyenne et la médiane en utilisant des sous fonctions

%fonction principale

n = length(u);

avg = mean(u,n); med = median(u,n);

%appel de la sous fonction mean %appel de la sous fonction median

function a = mean(v,n)

%sous fonction

%calcule la moyenne du vecteur v de longueur n

a

= sum(v)/n;

function m = median(v,n)

%sous fonction

%calcule la médiane du vecteur v de longueur n

w

= sort(v);

if

rem(n,2) == 1

m

= w((n+1)/2);

else

 

m

= (w(n/2)+w(n/2+1))/2;

end

Matlab reconnaît la fonction mean comme étant la sous fonction du fichier M newstats.m plutôt que la fonction standard implémentée dans le « search path »

Ex :

x = 0:10; [moy,med] = newstats(x.^2)

F.Nicol – M Files - 18

• Fonction privée : – Fonction se trouvant dans un sous répertoire appelé « private

• Fonction privée :

– Fonction se trouvant dans un sous répertoire appelé « private »

– Accessible seulement pour les fonctions contenues dans le répertoire parent

– Ex : dans le répertoire newmath, le sous répertoire private contient des fonctions que seules les fonctions du répertoire newmath peuvent appeler

– Avantages :

• Utiliser le même nom que celui de fonctions utilisées dans d’autres répertoires

• Créer sa version d’une fonction en gardant l’original dans un autre répertoire

• Matlab cherche en priorité les fonctions privées avant les fonctions standard

• Attention, ne pas placer un sous répertoire private dans le « search path »

• Remarque :

– Si le répertoire newmath se trouve dans le « search path », les fonctions de ce répertoire sont accessibles sauf celles contenues dans le sous répertoire private :

» Les fonctions du sous répertoire private sont uniquement accessibles aux fonctions du répertoire parent

F.Nicol – M Files - 19

• Exemple : faire la somme des éléments des colonnes d’une matrice (Exercice 5) 1)

• Exemple : faire la somme des éléments des colonnes d’une matrice (Exercice 5)

1) dans le répertoire newmath, fichier somcol.m

function s=somcol(A) %SOMCOL : Somme des éléments des colonnes d’une matrice A

Ex :

taille = size(A); nbcol = taille(2); for j=1:nbcol

s(j) = somme(A(:,j));

end

%pour chaque colonne %faire la somme des éléments colonne A(:,j)

2) dans un sous répertoire private, fichier somme.m

function s = somme(x) %SOMME : calcule la somme des éléments du vecteur x %Input : le vecteur d’éléments x %Output : la somme des éléments s

n = length(x);

s=0;

for i=1:n

end

s=s+x(i);

%longueur du vecteur x %initialiser la somme

A = [1 2 3; 4 5 6]; somcol(A)

%la fonction somcol fera appel à la fonction somme contenue dans le sous répertoire private

F.Nicol – M Files - 20

• Fonctions : – A chaque fonction est alloué un espace mémoire distinct de l’espace

• Fonctions :

– A chaque fonction est alloué un espace mémoire distinct de l’espace de travail de base : on a un espace de travail propre à chaque fonction créé lors de l’appel de la fonction et détruit après son exécution

INPUTS

Espace de travail appelant

Espace de travail appelant

Espace de travail appelant

scripts

Espace de travail appelant scripts

Espace de travail de la fonction (principale)

OUTPUTS

INPUTS

Espace de travail des sous fonctions

OUTPUTS INPUTS Espace de travail des sous fonctions OUTPUTS • Scripts : Variables locales – Les
OUTPUTS INPUTS Espace de travail des sous fonctions OUTPUTS • Scripts : Variables locales – Les

OUTPUTS

• Scripts :

Variables locales
Variables locales

– Les scripts n’ont pas d’espace de travail qui leur est propre

– L’espace de travail sera partagé avec le programme appelant

F.Nicol – M Files - 21

• Variable locale dans une fonction : – Variables définies dans le corps de la

• Variable locale dans une fonction :

– Variables définies dans le corps de la fonction

– Ne restent pas en mémoire après l’exécution de la fonction

– Les variables locales sont propres à chaque fonction que les utilisent

– Séparées des variables de l’espace de travail de base et des variables des autres fonctions

• Variable locale dans un script :

– Les scripts n’ont pas d’espace de travail qui leur est propre

– Les variables sont stockées dans l’espace de travail partagé avec le programme appelant

» depuis une ligne de commande : espace de travail de base

» depuis une fonction : espace de travail de la fonction

• Remarque :

– Si un script utilise et modifie une variable existante dans l’espace de travail relatif au script alors cette variable sera écrasée

F.Nicol – M Files - 22

• Variable globale : » La valeur de la variable peut être partagée par plusieurs

• Variable globale :

» La valeur de la variable peut être partagée par plusieurs fonctions et éventuellement par l’espace de travail de base

» Toute affectation d’une valeur à une variable globale est accessible à toutes les fonctions et l’espace de travail de base qui l’auront déclarée comme variable globale

• Déclaration de variables globales :

» Déclarer la variable comme étant globale avant toute utilisation de la variable

function [vars 1 , …, vars m ] = nomfonc(vare 1 , …, vare n ) global VAR 1 VAR 2 VAR 3 … VAR N ….

VAR 1 , VAR 2 , …, VAR N sont des variables globales par convention, déclarées en début du fichier après la ligne de définition de la fonction

» Nom des variables globales : explicite et en majuscules (convention pour améliorer la lisibilité du code)

» Si des sous fonctions utilisent des variables globales, elle doivent être déclarées comme globales au début de chaque sous fonction

F.Nicol – M Files - 23

• Exemple 1 : plots des fonctions sinus et cosinus sur un intervalle [a, b]

• Exemple 1 : plots des fonctions sinus et cosinus sur un intervalle [a, b]

– variable globale H : subdivision de l’intervalle (H+1 valeurs)

function sinus1(a,b) global H

x = a:(b-a)/H:b;

y = sin(x);

plot(x,y);

title('sinus');

function cosinus1(a,b) global H

x = a:(b-a)/H:b;

y = cos(x);

plot(x,y);

title(‘cosinus');

dans la fenêtre de commande :

global H

H=100;

sinus1(0,2*pi)

cosinus1(0,2*pi)

%fichier sinus1.m

%fichier cosinus1.m

H est une variable globale disponible dans l’espace de travail de base et dans les espaces de travail des deux fonctions Son affectation interactive dans la fenêtre de commande sera accessible aux deux fonctions

F.Nicol – M Files - 24

• Exemple 2 : plots des fonctions sinus et cosinus sur un intervalle [a, b]

• Exemple 2 : plots des fonctions sinus et cosinus sur un intervalle [a, b]

– variable globale H : subdivision de l’intervalle (H+1 valeurs)

function sinus2(a,b) global H H = 100;

x = a:(b-a)/H:b;

y = sin(x);

plot(x,y);

title('sinus');

function cosinus2(a,b) global H

x = a:(b-a)/H:b;

y = cos(x);

plot(x,y);

title(‘cosinus');

Appel des fonctions :

Remarque :

sinus2(0,2*pi)

cosinus2(0,2*pi)

%fichier sinus2.m

%fichier cosinus2.m %la valeur affectée à la variable globale H dans la %fonction sinus2 est accessible

– Après un premier appel de la fonction sinus2, la valeur 100 est affectée à la variable globale H : elle est alors accessible à la fonction cosinus2

– Si la variable H n’est pas déclarée comme globale dans la fenêtre de commande alors elle n’est pas accessible dans l’espace de travail de base mais seulement dans les espaces de travail des deux fonctions

F.Nicol – M Files - 25

• Afficher les variables globales : who global whos global » afficher seulement les variables

• Afficher les variables globales :

who global whos global

» afficher seulement les variables globales

Ex :

global MAXLEN MAXWID

MAXLEN = 36; MAXWID = 78; len = 5; wid = 21; whos whos global

%déclarer MAXLEN et MAXWID comme étant des %variables globales %affecter des valeurs aux variables globales

%afficher toutes les variables %afficher seulement les variables globales

F.Nicol – M Files - 26

• Supprimer des variables globales : clear global » supprime toutes les variables globales clear

• Supprimer des variables globales :

clear global

» supprime toutes les variables globales

clear global VAR 1 , VAR 2 , …, VAR N

» supprime les variables globales VAR 1 , VAR 2 , …, VAR N

Ex :

clear global MAXLEN whos global

• Remarque :

%supprime la variable globale MAXLEN %MAXLEN ne figure plus dans la liste des variables %globales

» utiliser la commande clear MAXLEN aura pour effet de supprimer la variable de l’espace de travail de base, mais elle sera toujours accessible aux fonctions qui l’auront déclarées comme globale

F.Nicol – M Files - 27

• Problèmes d’utilisation : à utiliser avec prudence ! » Dans une fonction, donner le

• Problèmes d’utilisation :

à utiliser avec prudence !

» Dans une fonction, donner le même nom à une variable globale que celui d’une autre variable globale utilisée dans une autre fonction : la variable utilisée par une fonction sera écrasée par l’autre

» Modifier le nom d’une variable globale : trouver toutes les occurrences du nom à modifier dans toutes les fonctions l’utilisant

• Alternatives :

» Passer la ou les variables en arguments dans les autres fonctions

» Utiliser une variable persistante

F.Nicol – M Files - 28

• Exemple : problèmes function sinus3(a,b) global H H = 100; x = a:(b-a)/H:b; y

• Exemple : problèmes

function sinus3(a,b) global H H = 100;

x = a:(b-a)/H:b;

y = sin(x);

plot(x,y);

title('sinus');

function cosinus3(a,b) global H

%fichier sinus3.m

%fichier cosinus3.m

H

= 10;

%la valeur affectée à la variable globale H dans la

x

= a:(b-a)/H:b;

%fonction sinus3 est modifiée par l’appel de la fonction

y

= cos(x);

%cosinus3

plot(x,y);

title(‘cosinus');

Appel des fonctions :

sinus3(0,2*pi)

cosinus3(0,2*pi)

L’appel de la fonction cosinus3 va écraser la valeur affectée à la variable globale H lors de l’appel de la fonction sinus3

F.Nicol – M Files - 29

• Alternative : passer H en argument INPUT dans une des fonctions function sinus4(a,b) global

• Alternative : passer H en argument INPUT dans une des fonctions

function sinus4(a,b) global H H = 100;

x = a:(b-a)/H:b;

y = sin(x);

plot(x,y);

title('sinus');

function cosinus4(a,b,H)

x = a:(b-a)/H:b;

y = cos(x);

plot(x,y);

title(‘cosinus');

Appel des fonctions :

sinus4(0,2*pi)

cosinus4(0,2*pi,10)

cosinus4(0,2*pi,100)

• Autre alternative :

• Utiliser une variable persistante

%fichier sinus4.m

%fichier cosinus4.m

%la valeur affectée à la variable globale H dans la %fonction sinus4 n’est pas modifiée

F.Nicol – M Files - 30

• Variable persistante : – Variable seulement accessible à la fonction dans laquelle elle est

• Variable persistante :

– Variable seulement accessible à la fonction dans laquelle elle est déclarée

– Variable « locale » qui reste en mémoire jusqu’à ce que le fichier M soit supprimé ou modifié

– Différente d’une variable locale :

» Reste stockée en mémoire

» Si la variable persistante n’a pas de valeur affectée au premier appel de la fonction, elle est initialisée à la matrice vide

– Différente d’une variable globale :

» Connue uniquement de la fonction dans laquelle elle est déclarée

» Ne peut être modifiée par une autre fonction ou par une ligne de commande

• Déclaration :

– Déclarer la variable comme étant persistante avant toute utilisation de la variable

function [vars 1 , …, vars m ] = nomfonc(vare 1 , …, vare n ) persistent VAR 1 VAR 2 … VAR N

»

VAR

restent stockées en mémoire

1

VAR

2

… VAR

N

: variables locales à la fonction mais dont les valeurs

» par convention, déclarées au début du fichier après la ligne de définition de la fonction

F.Nicol – M Files - 31

• Ex : somme d’un nombre x avec une variable persistante fonction persistsom.m function total=persistsom(x)

• Ex : somme d’un nombre x avec une variable persistante fonction persistsom.m

function total=persistsom(x)

persistent somme

if isempty(somme) somme = 0;

else

somme=somme+x;

end total = somme;

%la variable somme est déclarée comme étant persistante

%au premier appel de la fonction, la variable somme est vide %alors initialiser la variable somme à 0 %appels suivants de la fonction : la variable persistante n’est pas vide %la valeur de la variable somme calculée lors de l’appel précédent est %conservée en mémoire %nouvelle valeur de somme

– Premier appel de la fonction :

total=persistsom(1)

0

la valeur de la variable persistante est initialisée à 0

– Deuxième appel de la fonction total = persistsom(1)

1

somme de la variable persistante (0) et de 1

– Troisième appel de la fonction total = persistsom(3) … etc …

4

somme de la variable persistante (1) et de 3

F.Nicol – M Files - 32

• Répertoire par défaut – Sous Windows : $matlabroot\work (c:\MATLAB6p5\work) défini lors de l’installation •
• Répertoire par défaut – Sous Windows : $matlabroot\work (c:\MATLAB6p5\work) défini lors de l’installation •

• Répertoire par défaut

• Répertoire par défaut – Sous Windows : $matlabroot\work (c:\MATLAB6p5\work) défini lors de l’installation •

– Sous Windows : $matlabroot\work (c:\MATLAB6p5\work) défini lors de l’installation

• Changer le répertoire au démarrage

– Sous Windows : sur l’icône Matlab

• Clic droit >Propriétés

• Menu Raccourci

• Remplir le champ « Démarrer dans : » par exemple c:\spm2 Être administrateur !!!

– Sous Unix : (cf. opérations au démarrage)

!!! – Sous Unix : (cf. opérations au démarrage) • Créer un fichier startup.m • Inclure
!!! – Sous Unix : (cf. opérations au démarrage) • Créer un fichier startup.m • Inclure

• Créer un fichier startup.m

• Inclure dans le fichier la fonction cd pour changer le répertoire

• Mettre le fichier startup.m dans le répertoire de démarrage

F.Nicol – M Files - 33

• Utiliser le fichier startup.m – Dans \toolbox\local se trouve le fichier matlabrc.m » Fichier

• Utiliser le fichier startup.m

– Dans \toolbox\local se trouve le fichier matlabrc.m

» Fichier M automatiquement exécuté au démarrage

» Établit le chemin Matlab, la taille par défaut des fenêtres graphiques, …

» Exécute le fichier startup.m s’il existe

– Créer un fichier startup.m contenant des fonctions à exécuter lors de l’ouverture de Matlab

» Fichier startupsav.m : fichier pouvant servir à construire le fichier startup.m

» Dans startup.m : par ex. addpath \home\me\mytools : place ce chemin dans le SearchPath cd \home\me\mytools : définit le répertoire au démarrage spm : exécute automatiquement le fichier spm.m au démarrage

– Sous Unix : placer le startup.m dans le répertoire ~\matlab

F.Nicol – M Files - 34

• Ajouter des options au démarrage sous Windows sur l’icône Matlab : • Clic droit

• Ajouter des options au démarrage sous Windows

sur l’icône Matlab :

options au démarrage sous Windows sur l’icône Matlab : • Clic droit >Propriétés • Menu Raccourci
options au démarrage sous Windows sur l’icône Matlab : • Clic droit >Propriétés • Menu Raccourci

• Clic droit >Propriétés

• Menu Raccourci

• Dans le menu cible, on peut ajouter une ou plusieurs options à la suite du fichier cible

c:\MATLAB6p5\bin\win32\matlab.exe

\r spm

Ex :

c:\MATLAB6p5\bin\win32\matlab.exe

exécute automatiquement le fichier spm.m au démarrage de Matlab

F.Nicol – M Files - 35

• Créer un fichier finish.m : – contient des fonctions à exécuter à la fermeture

• Créer un fichier finish.m :

– contient des fonctions à exécuter à la fermeture de Matlab (sauver l’espace de travail, afficher une fenêtre de confirmation etc …)

finishsav.m : inclut une fonction save pour sauver l’espace de travail dans un fichier MAT à la fermeture

finishdlg.m : affiche une fenêtre de confirmation de fermeture

» Ces fichiers se trouvent dans le répertoire \toolbox\local

» Pas utilisés en tant que tels lors de la fermeture

» Ces fichiers peuvent servir à construire le fichier finish.m

– Possibilité d’ajouter d’autres commandes dans le fichier finish.m

F.Nicol – M Files - 36