Professional Documents
Culture Documents
F.Nicol – M Files - 1
• Fichier d’instructions :
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
F.Nicol – M Files - 4
• 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
F.Nicol – M Files - 5
• Exemple 1 : dans le répertoire de travail, fichier scriptsinus.m
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y);
title('sinus');
Appel du script :
F.Nicol – M Files - 6
• 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
Nom de la
• Définition d’une fonction : fonction
OUTPUT INPUT
mot-clé
séquence d’instructions Corps de la fonction
F.Nicol – M Files - 8
• Structure de base :
• 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
» Le fichier M doit porter le nom de la fonction qu’il appelle
– 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
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
Appel de la fonction :
F.Nicol – M Files - 11
• Définition d’une fonction : multiples inputs/outputs
Nom de la
fonction
OUTPUTS INPUTS
F.Nicol – M Files - 12
• Exécuter une fonction : multiples outputs
function [vars1, …, varsm] = nomfonc(vare1, …, varen)
» retourne dans les variables out1, …, outm les valeurs des outputs
nomfonc(inp1,…,inpn)
F.Nicol – M Files - 13
• 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
F.Nicol – M Files - 14
• Exemple 2 : 3 inputs, 1 output
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
Appel de la fonction :
max3(5, -1, 10)
ou
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
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
Appel de la fonction :
maxmin3(5, -1, 10) renvoie le premier output (le min)
[m, n] = maxmin3(5, -1, 10) renvoie les deux premiers outputs (les min et max)
[m, n, d] = maxmin3(5, -1, 10) 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 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 »
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) %fonction principale
%NEWSTATS calcule la moyenne et la médiane en utilisant des sous fonctions
n = length(u);
avg = mean(u,n); %appel de la sous fonction mean
med = median(u,n); %appel de la sous fonction median
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 :
• 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 :
F.Nicol – M Files - 19
• 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
taille = size(A);
nbcol = taille(2);
for j=1:nbcol %pour chaque colonne
s(j) = somme(A(:,j)); %faire la somme des éléments colonne A(:,j)
end
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
Ex : 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 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 Espace de travail
appelant de la fonction (principale)
Variables locales
OUTPUTS
OUTPUTS INPUTS
• Scripts :
– 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 :
– 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 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
F.Nicol – M Files - 23
• Exemple 1 : plots des fonctions sinus et cosinus sur un intervalle [a, b]
– variable globale H : subdivision de l’intervalle (H+1 valeurs)
sinus1(0,2*pi)
cosinus1(0,2*pi)
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]
– variable globale H : subdivision de l’intervalle (H+1 valeurs)
Remarque :
– 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
F.Nicol – M Files - 26
• Supprimer des variables globales :
clear global
• Remarque :
» 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 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
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
sinus4(0,2*pi)
cosinus4(0,2*pi,10) %la valeur affectée à la variable globale H dans la
cosinus4(0,2*pi,100) %fonction sinus4 n’est pas modifiée
• Autre alternative :
F.Nicol – M Files - 30
• 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
F.Nicol – M Files - 31
• Ex : somme d’un nombre x avec une variable persistante
fonction persistsom.m
function total=persistsom(x)
persistent somme %la variable somme est déclarée comme étant persistante
F.Nicol – M Files - 33
• Utiliser le fichier startup.m
– Dans \toolbox\local se trouve le fichier matlabrc.m
– Créer un fichier startup.m contenant des fonctions à exécuter lors de l’ouverture de Matlab
F.Nicol – M Files - 34
• Ajouter des options au démarrage
sous Windows
Ex :
c:\MATLAB6p5\bin\win32\matlab.exe \r spm
F.Nicol – M Files - 35
• Créer un fichier finish.m :
F.Nicol – M Files - 36