Cours Initiation A Matlab
Cours Initiation A Matlab
Cours Initiation A Matlab
Initiation à Matlab
M ATLAB est un logiciel de calcul et de visualisation, dont les entités de base sont des
matrices : M ATLAB est une abréviation de Matrix Laboratory.
M ATLAB est un langage interprété : il propose des facilités de programmation et de vi-
sualisation, ainsi qu’un grand nombre de fonctions réalisant diverses méthodes numériques.
La meilleure façon d’apprendre à utiliser ce logiciel est de l’utiliser vous même, en
faisant des essais, en commettant des erreurs et en essayant de comprendre les messages
d’erreur qui vous seront renvoyés. Ces messages sont en anglais !
Ce document est destiné à vous aider pour quelques premiers pas avec M ATLAB. Les
sections et sous-sections signalées par (*) donnent des compléments qui pourront vous
être utiles à l’avenir, mais peuvent être réservées pour une lecture ultérieure.
1
2 CHAPITRE 1. INITIATION À MATLAB
matlab -jvm
http ://www-gmm.insa-toulouse.fr/∼huard/InitMatlab/
Si, par exemple, je cherche une fonction permettant de tracer un histogramme, je peux
entrer l’instruction :
lookfor histogram
En réponse, j’obtiens la liste suivante :
HIST Histogram.
HISTC Histogram count.
ROSE Angle histogram plot.
On utilise ensuite la commande help pour plus de précisions. Cette commande af-
fiche les commentaires de la fonction indiquée. Ces commentaires contiennent l’objet de
la fonction ainsi que les différents formats d’appel. Ils contiennent également une rubrique
“See Also” qui donne les noms de fonctions dont l’objet est en rapport avec la fonction
considérée. Ces commentaires sont affichés sur la fenêtre de travail.
La figure 1.2 nous montre sa page d’accueil. On peut cliquer sur une ligne pour conti-
nuer sa recherche...
La commande helpdesk donne accès à une documentation hypertexte complète
supportée par le navigateur internet. Il suffit alors de se laisser guider dans sa recherche.
Cette aide n’est pas accessible lorsque l’on utilise M ATLAB sans le support java.
>> A = [3 2 -2 ;-1 0 1 ;1 1 0] ←-
et
>> A = [ ←-
3 2 -2 ←-
-1 0 1 ←-
1 1 0 ] ←-
créent la même matrice 3X3.
et ajouter le point-virgule
>> A = [3 2 -2;-1 0 1;1 1 0] ;
M ATLAB distingue les majuscules et les minuscules ; si vous tapez :
>> a
vous recevrez le message :
1.3. VARIABLES ET MATRICES 5
L’ensemble des variables actives peut être consulté grâce aux commandes whos et
who :
>> t = 1;
>> whos
Name Size Bytes Class
A 3x3 72 double array
Grand total is 9 elements using 72 bytes
>> who
Your variables are:
A t
>> clear t
>> who
Your variables are:
A
La commande clear all réinitialise l’environnement (en détruisant toutes les va-
riables actives).
L’énumération des éléments d’une matrice ou d’un vecteur peut être implicite. Es-
sayez par exemple :
>> m = [-3:3]
>> x = [1:-0.25:-1]
Les matrices m et x sont des matrices à une ligne (vecteurs-lignes). M ATLAB vous
fournit les dimensions d’une variable par la fonction size :
>> size(m)
ans =
1 7
>> m = m’
ou
>> x = x(:)
>> A(1,2)
renvoie la réponse :
ans =
2
ans est le nom d’une variable qui reçoit le dernier résultat d’une instruction ou d’une
suite d’instructions lorsqu’il n’a été affecté à aucune variable. On peut faire s’afficher la
valeur d’une variable sans affichage de son nom ni de ans
>> disp(A(1,2))
Certaines fonctions de M ATLAB créent des matrices particulières. Les quelques ma-
trices suivantes sont parmi les plus couramment utilisées :
– eye(n) renvoie la matrice identité, habituellement notée In en mathématiques ;
essayez eye(4),
– ones(n,m) renvoie une matrice à n lignes et m colonnes dont tous les coeffi-
cients sont des 1,
– zeros(n,m) matrice à n lignes et m colonnes dont tous les coefficients sont
des 0 ; elle sert beaucoup pour les initialisations.
– linspace(a,b,n) crée une matrice ligne de n points régulièrement espacés sur
l’intervalle [a, b] (bornes comprises).
– rand crée une matrice aléatoire. Essayez >> B = rand(3,4). Dans quel in-
tervalle sont choisis les coefficients de cette matrice ?
La commande help permet de recevoir des informations (en anglais !) sur une fonc-
tion ; essayez :
>> 3+5
>> ans -2
>> A + ones(3)
>> m + x
M ATLAB autorise que les dimensions ne soient pas égales lorsqu’une des variables est
un scalaire. A + 1 fournit la même valeur que A + ones(3).
>> 3*4
>> c = A*b
>> C = A*B
>> b’*c
>> b*c’
>> 3/4
ans =
0.7500
>> 3\4
ans =
1.3333
8 CHAPITRE 1. INITIATION À MATLAB
Ainsi cette division doit elle s’interpreter comme le produit par l’inverse de la variable
située du côté vers lequel penche la barre : 3/4 représente 3 × 14 alors que 3 \ 4 représente
1
3
× 4. Cette idée se généralise aux variables représentant des matrices :
>> x = A\b ;
>> A*x - b
Comment interpréter le dernier résultat renvoyé par la machine ? Vous aurez compris
que la variable x contient la solution du système linéaire A x = b. Au passage, vous
remarquerez que cette nouvelle affectation de la variable x écrase la précédente.
Quelle reflexion vous suggère le résultat de :
>> b/A
>> M = A\eye(3)
>> 2ˆ3
>> Aˆ2
>> Aˆ0
>> Aˆ(-1)
Les règles de priorité des opérations sont conformes à celles qui sont utilisées dans la
plupart des langages de programmation. Elles sont données par le tableau suivant :
A niveau de priorité égale, les opérations sont effectuées de la gauche vers la droite. Les
parenthèses vous permettent d’organiser les priorités dans vos calculs. Leur utilisation est
recommandée pour éviter les ambiguités et risques d’erreurs.
>> 2 + 3ˆ2
>> 2 + 3*3ˆ2
>> 2 + (3*3)ˆ2
>> (2 + 3*3)ˆ2
>> Aˆ2\A
>> A*A\A
1.3. VARIABLES ET MATRICES 9
>> A.ˆ2
>> M.*A
>> b./c
>> C.*B
>> A.*B
>> A.ˆ[2 1 2 ; 2 0 1 ; 1 1 1]
C1 = C(:,3:5);
>> R = rand(5);
>> diag(R)
>> diag(ans)
>> diag(diag(R))
Vous constatez que l’on peut ainsi extraire d’une matrice ses éléments d’une ”parallèle” à
la diagonale. Essayez :
10 CHAPITRE 1. INITIATION À MATLAB
>> diag(R,1)
>> diag(R,-2)
>> d = ones(4,1);
>> M = 2*eye(5)-(diag(d,1)+diag(d,-1))
tril renvoie la partie triangulaire inférieure d’une matrice, éléments diagonaux
compris. Elle admet aussi plusieurs arguments
>> tril(R)
>> tril(R,1)
triu renvoie la partie triangulaire supérieure d’une matrice.
reshape reformate une matrice, c’est-à-dire change le nombre de lignes et de co-
lonnes, en prenant les éléments colonne par colonne.
repmat crée une “grande” matrice en recopiant une matrice donnée selon le format
fournit.
>> x = 10;
>> n = 50;
>> s = 1;
>> terme = 1;
>> for k = 1:n, terme = x*terme/k ; s = s + terme ; end;
>> s
1.4. BOUCLES ET TESTS 11
On pourra vérifier plus tard que la valeur obtenue, s ' 2.2026 × 104 est assez proche
de e10 .
Plusieurs boucles peuvent être emboı̂tées. Comme M ATLAB est un language interprété,
il faut essayer d’éviter les boucles quand c’est possible. Pour cela on peut utiliser des
1
boucles implicites. Pour construire la matrice H = (hi,j ) ∈ M3 (R) avec hi,j = ,
i+j−1
on peut utiliser les instructions suivantes :
>> n = 3;
>> H = zeros(3);
>> for i = 1:n
for j = 1:n
H(i,j) = 1/(i+j-1);
end;
end;
>> H
Notez que l’on a initialisé la variable H. C’est recommandé lorsque c’est possible.
Notez également que l’on a indenté les boucles : c’est recommandé pour une meilleure
lisibilité !
On peut aussi construire H de la façon suivante :
>> J = 1:n;
>> J = repmat(J,n,1);
>> I = J’;
>> E = ones(n);
>> H = E./(I+J-E);
Remarque 1 Dans le premier exemple d’utilisation de for, la boucle tenait dans une
ligne. Dans ce cas, une virgule doit séparer l’initialisation de la boucle de l’instruction
suivante.
Dans la second exemple, puisque l’on va à la ligne, le prompt de M ATLAB ne réapparait
que lorsque la boucle est correctement terminée.
while expression
instructions
end
expression désigne le résultat d’une opération logique. Elle est construite en utilisant
des opérateurs relationnels et logiques.
12 CHAPITRE 1. INITIATION À MATLAB
Les instructions seront éxécutées tant que expression sera “vraie”. Toute valeur différente
de 0 est assimilée au 1 logique, c’est-à-dire au “vrai”. Essayez
>> x = [1 -1 1] ; y = [1 1 -1];
>> x>0, ˜(x>0),˜x>0
>> x>=y
>> x>0 & y>0
>> x>0 | y>0
else
instructions 3
end
De même que vous utilisez un brouillon avant de rendre un devoir, de façon à pouvoir
faire des ratures, changer les expressions où vous avez détecté une erreur, vous pouvez
éditer un fichier de commandes M ATLAB dont vous vous servirez comme d’un brouillon.
Un tel fichier s’appelle un M-fichier. Il devra être enregistré sous le nom de votre choix
avec le suffixe .m.
Pour écrire ce fichier, vous devez utiliser un éditeur : M ATLAB vous en propose un
auquel vous pouvez accéder en vous servant des icônes de la fenêtre.
Nous allons illustrer cette possibilité en traitant un exemple qui utilise la boucle
while et le branchement if : il s’agit de tester la conjecture de Syracuse.
On part d’un nombre entier différent de 1. S’il est impair, on le multiplie par 3
et on ajoute 1 ; sinon, on le divise par 2. On recommence avec ce nouveau nombre
tant qu’il n’est pas égal à 1. Dans ce cas, en effet, on reproduira indéfiniment le cycle
{· · · , 1, 4, 2, 1, · · · }.
Quelque soit le nombre entier dont on part, on finit toujours par obtenir la valeur 1.
C’est en tous cas ce que montre l’expérience, car personne n’a jamais trouvé de contre
exemple. Mais, on a jamais pu démontrer qu’il devait en être ainsi !
On vous propose de tester cette conjecture. L’objectif de l’exercice est d’écrire un
programme M ATLAB qui propose à l’utlisateur de donner un nombre entier différent de
1, et à partir de ce nombre, de compter le nombre d’itérations de la suite de Syracuse avant
qu’elle n’atteigne la valeur 1. On prendra la précaution de limiter le nombre d’itérations
à 1000 pour éviter que le programme ne tourne indéfiniment. Cela pourrait se produire en
cas d’erreur de saisie.
Pour cela, vous allez commencer par éditer le fichier dans lequel vous écrirez ce pro-
gramme. Vous pouvez utiliser le fichier qui vous est fournit sous le nom de Syracuse.m
et qui contient le squelette de programme qui est donné au tableau 1.1.
Il vous faut remplacer les points de suspension par des instructions appropriées. Voici
quelques indications :
- La fonction input permet de proposer à l’utilisateur de rentrer un entier n initial.
- Le symbole % permet de placer des commentaires.
- Le nombre d’itérations sera donné par la variable compteur.
14 CHAPITRE 1. INITIATION À MATLAB
- la boucle while sera cotrôlée par deux expressions logiques, qui autoriseront son
éxécution tant que n restera différent de 1 et compteur inférieur ou égal à 1000.
- Le test sur la parité de n utilise la fonction rem (abréviation de remainder) qui
donne le reste de la division entière par 2 : ce reste vaut 1 si n est impair et 0 sinon.
Remarque 2 On ne s’est pas trop bridé en limitant le nombre des itérations à 1000. Pour
des valeurs initiales inférieures ou égales à 10 000, la suite la plus longue est obtenue
pour une valeur initiale de 6171. Sa longueur est 262.
Ces fonctions font partie des fonctions élémentaires proposées par M ATLAB. Pour en
avoir la liste, vous pouvez taper :
Le défilement se fait ligne à ligne (en tapant une touche quelconque) ou par pages
de 20 lignes (en tapant la barre d’espacements). Vous pouvez maintenant comparer la
variable s calculée en utilisant la formule (1.1) avec e10 ;
>> s - exp(10)
Quelle commande devrez-vous entrer pour obtenir la valeur absolue de l’erreur rela-
tive ?
Ces fonctions traitent les variables matricielles comme des tableaux de nombres ; si la
variable A représente une matrice A, la variable S = sin(A) représentera une matrice
S dont les coefficients sont si,j = sin(ai,j ). Pour l’exponentielle et la racine carrée, qui
possèdent une version “matricielle”, M ATLAB propose les fonctions expm et sqrtm.
Le cas des polynômes est un peu particulier : un polynôme peut être défini par ses
coefficients : on utilise dans ce cas une matrice ligne : par exemple, le polynôme Q(x) =
x3 + 2x2 − 3 sera représenté par :
>> Q = [1 2 0 -3];
Sa valeur au point x = 1.2 sera fournie par :
>> polyval(Q,1.2)
Les racines du polynôme Q seront fournies par la fonction roots. A l’inverse, on
peut aussi déterminer les coefficients d’un polynôme à partir de ses racines en utilisant la
fonction poly :
>> r=[1 2 3]; K = poly(r)
>> polyval(K,r)
Ces instructions assignent à K la valeur [1 -6 11 -6] qui définit le polynôme
K(x) = x3 − 6x2 + 11x − 6. Le polynôme ainsi calculé a toujours le coefficient de son
terme de plus fort degré égal à 1.
Comme les fonctions usuelles polyval traite les matrices comme des tableaux, Il
faudra utiliser la fonction polyvalm pour évaluer un polynôme de matrice.
Comparez polyval(K,A) et polyvalm(K,A).
Certaines fonctions spéciales sont également proposées par Matlab : par exemple,
les fonctions de Bessel de première espèce notées Jν (x) sont données par la fonction
besselj dont le format d’appel le plus courant est, pour le paramètre entier nu et la
variable x : y = besselj(nu,x) ;
Vous pouvez retrouver l’information sur le format d’utilisation par :
>> help besselj
La liste de ces fonctions spéciales vous sera renvoyée par la commande :
>> more on, help specfun, more off
16 CHAPITRE 1. INITIATION À MATLAB
1.6 Graphiques
1.6.1 Visualisation des courbes en 2D
M ATLAB permet de tracer facilement le graphe de fonctions scalaires. Cela se fait
à l’aide de la fonction plot . Elle prend en argument des paires de vecteurs de même
dimension. Voici par exemple le moyen d’obtenir le graphe de la fonction cos 3x sur
l’intervalle [0, 2π] :
plot(x,y,s) ;
où x contient les absisses, y les ordonnées, et s est une chaine de 1 à 3 caractères :
s=’ctm’, pour la couleur (c) et le style (tm), qui peuvent être choisis dans le tableau
suivant :
Couleur Style
Les style de tracé suivis de (t) sont des tracés continus, avec une interpolation entre
les points fournis, alors que pour les autres on utilise des marqueurs pour ne représenter
que les points (xi , yi ). On peut combiner ces deux styles.
On peut tracer les graphes de plusieurs fonctions simultanément. Essayez maintenant :
>> z = sin(2*x);plot(x,y,x,z);
>> legend(’cos(3x)’,’sin(2x)’);
>> plot(x,y);
>> hold on;
>> plot(x,z);
La seule différence est que cette fois, les deux graphes sont tracés avec la même
couleur. hold on gère le graphique courant de façon que les commandes graphiques
à suivre vont s’ajouter à ce graphique. hold off est a valeur par défaut : dans ce cas
une nouvelle commande plot effacera le graphique existant.
Les axes sont définis automatiquement ; on peut choisir les bornes des coordonnées
du graphe à l’aide de la fonction axis . Essayez par exemple :
Pour la suite de notre travail, il est préférable que vous entriez maintenant la com-
mande :
18 CHAPITRE 1. INITIATION À MATLAB
Le format de la fonction plot permet bien sûr de représenter facilement des courbes
paramétriques :
>> plot(y,z);
On obtient, pour les valeurs définies plus haut, une courbe connue sous le nom de
courbe de Lissajoux. Les instructions suivantes vont réduire légèrement l’échelle, donner
un titre et un nom aux axes, et faire apparaı̂tre une grille sur le fond :
Vous obtiendrez l’impression sur papier d’un graphe en utilisant la commande print
qui enverra l’impression sur l’imprimante à laquelle est relié votre ordinateur. C’est la
dernière de vos figures qui sera imprimée.
Exercice
On considère la fonction définie par
...
hold on ;
plot([0,9],[0,0],9,0,’>’)
plot([0,0],[-20,150],0,150,’ˆ’)
hold off ;
1.6. GRAPHIQUES 19
Exercice
Vous allons créer un fichier qui représente la fonction de Bessel de paramètre ν = 0
sur l’intervalle [0, 50], et vérifier graphiquement que ses racines sur cet intervalle sont
bien approchées par les expressions
π π
rj ' (2 j − 1) + , 1 ≤ j ≤ 15. (1.3)
2 4
Vous appellerez ce fichier VisuRacBess.m. Il devra contenir des instructions pour :
- définir les absisses x (utiliser la fonction linspace),
- définir le paramètre ν et calculer les y = Jν (x), en utilisant la fonction fzero.
Cette fonction résoud les équations non linéaires. L’algorithme utilisé combine plu-
sieurs méthodes, dont celles de la sécante et de bissection. On doit fournir une va-
leur pour initialiser les itérations, et il est bon de disposer d’une valeur assez voisine
de la solution cherchée. On se servira donc des expressions (1.3).
- représenter sur la même figure les y et l’axe des x,
- calculer les rj , (définir un tableau R en utilisant une variable J = [1 :15] ; ),
- représenter sur la figure précédente les points (rj , 0) par le symbole ∗.
On voudrait pouvoir donner un titre à cette figure, et pour cela représenter les lettres
grecques φ et : cela peut se faire de la façon suivante :
title(’La fonction J_{\nu } pour \nu = 0’);
On peut souhaiter des caractères un peu plus grands pour ce titre :
title(’La fonction {\nu } pour \nu = 0’,’Fontsize’,12);
La taille de fonte est précisée par la propriété ’Fontsize’, suivie de la valeur choisie.
Cette instruction utilise les règles du langage LATEXqui est un langage de program-
mation de traitement de texte particulièrement bien adapté à la gestion des formules
mathématiques. Elle appelle quelques commentaires :
– Le caractère permet de mettre en position d’indice les caractères entre accolades
qui le suivent.
– Le caractère \ permet à LATEX de reconnaı̂tre ses commandes. Vous en trouverez
quelques-unes dans le tableau 1.2.
x = x(s, t)
y = y(s, t)
z = z(s, t)
x = ρ (1 + cos θ),
y = ρ sin θ,
z = ρ.
>> Y = r’*sin(theta) ;
>> Z = r’*ones(size(theta));
>> surf(X,Y,Z);
Les couleurs sont définies par une matrice C de même taille que celles des coor-
données, et par défaut, cette matrice est C=Z, de sorte que d’une certaine façon, la couleur
est “proportionnelle” à l’altitude du point de la surface. Tout cela dépend du choix d’une
palette graphique. Essayez :
>> colormap(’cool’);
La liste des palettes disponibles est fournie avec celle de toutes les fonctions ou va-
riables de contrôle d’un graphique 3D par la commande :
Examinons à présent le tracé d’une surface donnée par son équation cartésienne z =
f (x, y). En général, on dispose d’une famille de valeurs de x et d’une famille de valeur de
y stockées dans 2 vecteurs, respectivement x et y. On va devoir construire deux matrices
X et Y telles que les colonnes de X et les lignes de Y soient constantes : ces matrices seront
utilisees pour le calcul des valeurs de f . On peut utiliser la fonction meshgrid .
Ainsi, pour représenter la surface d’équation z = exp(−x2 − y 2 ) , −2 < x, y < 2, on
pourra procéder comme suit :
>> x = linspace(-3.5,3.5) ;
>> y = sin(x);
>> plot(x,y);
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
−4 −3 −2 −1 0 1 2 3 4
La fonction plot que l’on a utilisé a généré un assez grand nombre de données. Ces
données sont les caractéristiques de notre figure. Le système de représentation graphique
de M ATLAB est un système orienté objet, et les données qui caractérisent une figure sont
relatives aux différents objets qui la constituent.
Certaines de ces données peuvent être précisées lors de l’appel de la fonction : on peut
choisir le type de tracé, sa couleur ... D’autres pourraient l’être en utilisant des fonctions
qui le permettent : legend, xlabel...
Si l’on avait voulu modifier la position la taille de la fenêtre graphique, il aurait ce-
pendant fallu utiliser la fonction figure avant la fonction plot et fixer les valeurs de
la propriété ’Position’.
1.6. GRAPHIQUES 23
Pour gérer une fenêtre graphique, il convient de pouvoir identifier ces objets, avant de
fixer ou de modifier leurs propriétés. Cette identification se fait par les handles, littéralement
les “poignées” pour les attraper !
La première étape consiste à récupérer ces handles. La fonction findobj le permet.
Voici ce que peut fournir son appel :
>> h = findobj
h =
0
1.0000
151.0015
152.0022
Il ne s’agit pas ensuite d’utiliser les valeurs affichées, mais de se rappeler que h est
un vecteur de 4 composantes dont chacune est un handle. Quels sont les objets ainsi
identifiés ?
>> get(h,’type’)
ans =
’root’
’figure’
’axes’
’line’
>> get(h(1),’ScreenSize’)
ans =
1 1 1280 1024
Pour connaı̂tre l’ensemble des propriétés relatives à l’objet figure, il suffit de taper
get(h(2)).
Pour obtenir la liste de ces propriétés avec les valeurs autorisées, lorsqu’elles sont
prédéfinies, on tape set(h(2)).
L’objet h(3) est de type axes. On peut lister le champ de ses propriétés avec leur
valeur actuelle :
>> get(h(3))
Nous allons supprimer l’encadrement, modifier les limites de l’axe des y, fixer les
positions et valeurs des “ticks” de l’axe des x :
>>set(h(3),’Box’,’off’)
>>set(h(3),’Ylim’,[-1.1 1.1])
>>set(h(3),’Ytick’,[])
>>set(h(3),’Xtick’,[-pi -pi/2 0 pi/2 pi])
>>set(h(3),’XtickLabel’,’-pi|-pi/2|0|pi/2|pi’)
On remarquera que les symboles LATEX ne sont pas pris en compte pour étiqueter les
ticks.
Une propriété du nom de Title figure dans la liste des propriétés de l’objet axes et
sa valeur est un nombre réel. Il s’agit là encore d’un handle, car le titre est lui même un
objet graphique.
>>htit = get(h(3),’Title’)
>>set(htit)
>>set(htit,’string’,’Fonction sinus’,’FontSize’,12)
>>set(htit,’Color’,[1 0 0])
La couleur obtenue est le rouge. La définition des couleurs peut se faire par un tableau
de 3 valeurs comprises entre 0 et 1 qui donnent respectivement les poids relatifs du rouge,
du vert et du bleu. (système rgb). Le blanc est [1 1 1] et le noir [0 0 0].
On peut aussi modifier certaines propriétés de l’objet de type line On en obtient la
liste par get(h(4)).
Pour connaı̂tre les possibilités offertes au niveau des types de tracé,
>>set(h(4),’Linestyle’)
>>set(h(4),’Marker’)
1.7. M-FICHIERS 25
Fonction sinus
1.7 M-fichiers
1.7.1 Scripts et fonctions
Bien que l’on puisse faire beaucoup de choses en travaillant directement dans la
fenêtre de commandes de M ATLAB, nous avons déja constaté que qu’il était souvent plus
pratique d’utiliser des M-fichiers. Ils permettent
- de corriger plus facilement ses erreurs,
- de garder un travail en cours pour le reprendre plus tard,
- d’exécuter plusiers fois un programme en modifiant certains paramètres,
- d’échanger son travail avec des camarades.
Jusqu’a présent, ces fichiers étaient des fichiers d’instructions, ou fichiers “scripts”.
Un fichier script est un fichier contenant une suite d’instructions M ATLAB directement
éxécutables. Ces instructions sont éxécutées en utilisant les variables de l’espace de tra-
vail, ou en créant des variables dans cet espace.
M ATLAB utilise également des M-fichiers. En fait, un grand nombres des fonctions
que nous avons rencontrées sont écrites dans des M-fichiers. Il s’agit de fichiers “fonc-
tion”. Vous pouvez également créer vos propres fonctions.
Un fichier “fonction” a sa première ligne d’instruction éxécutable qui commence par
le mot clef function. Il peut recevoir des variables en entrée, mais utilise ces variables
26 CHAPITRE 1. INITIATION À MATLAB
en dehors de l’espace de travail. Aucune des variables créées ou modifiées lors de son
éxécution n’est visible depuis l’espace de travail à moins qu’elle ne soit une variable en
sortie de la fonction !
Nous allons illustrer la différence entre ces deux types de fichiers sur un exemple. Si
le fonction f est suffisament régulière, la formule de Taylor permet d’obtenir une valeur
approchée de sa dérivée en un point x, pour un pas h, suivant
f (x + h) − f (x) h
= f 0 (x) + f 00 (x) + O(h2 ) ' f 0 (x). (1.4)
h 2
x = 1; x = 1;
h = 0.01; Dn = (sin(x+h) -sin(x))./h;
Dn = (sin(x+h) -sin(x))./h; Res = Dn;
L’erreur est commentée ; M ATLAB vous indique le numéro de la ligne où elle s’est
produite. A présent, nous fournissons le pas en appel de la fonction
1.7. M-FICHIERS 27
ans pas
1.7.2 Fonctions
Fonctions simples
Nous avons déjà rencontré la fonction F (x) = 0.01 ex + 10 cos x − 3 x.
Dans ce cas, on dispose de deux façons pour créer une fonction M ATLAB qui calcule
les valeurs de F :
- comme la fonction F peut se définir en une seule ligne, on peut le faire avec la
fonction inline
>> F1 = inline(’0.01*exp(x)+10*cos(x)-3*x’)
- de façon plus générale, on peut éditer un fichier que l’on va appeler F2.m qui devra
commencer par le mot-clef function : vous pouvez le définir de la façon suivante
function y = F2(x) ;
y = 0.01*exp(x)+10*cos(x)-3*x;
La première définition est à utiliser lorsque l’on n’envisage pas d’utilisation ultérieure
de cette fonction. La définition au moyen d’un fichier permet de la conserver. Cepen-
dant, ainsi qu’elle est rédigée, cette fonction a encore le défaut que son objet n’est pas
immédiatement lisible ; on risque de l’avoir oublié quand on aura besoin de la réutiliser.
Il faut donc la commenter.
Cela se fait sur des lignes qui commencent par le symbole % . Ce symbole transforme
en commentaires tous les caractères qui le suivent dans la ligne courante. Entre autres
28 CHAPITRE 1. INITIATION À MATLAB
commentaires, vous devrez toujours indiquer le format d’appel de la fonction. Voici com-
ment je vous suggère d’écrire ce fichier :
function y = F2(x) ;
% fichier fonction definissant la fonction F2(x) qui sert d’exemple
% au polycopie d’initiation a Matlab.
% L’appel se fait selon :
% >> y = F2(x);
y = 0.01*exp(x)+10*cos(x)-3*x;
Ces commentaires sont placés immédiatement après la première ligne (de déclaration).
De cette façon, ils constitueront la réponse fournie par M ATLAB à la commande :
>> help F2
Les variables internes d’un fichier fonction sont locales ; elles ne sont pas vues depuis
l’espace de travail. Corollairement, les variables de l’espace de travail que vous souhaitez
utiliser dans une fonction doivent être passées en argument. La commande global per-
met de définir des variables globales. Elles doivent être déclarées globales au début de la
fonction et dans l’espace de travail.
Exercice
La formule (1.4) est dite d’ordre 1 car l’erreur d’approximation de la dérivée est de la
forme O(h). On peut obtenir une formule d’ordre 2, c’est-à-dire avec une erreur en O(h2 )
en utlisant la formule
f (x + h) − f (x − h) h2 000
= f 0 (x) + f (x) + O(h3 ) ' f 0 (x). (1.5)
2h 6
On vous demande d’écrire une fonction Fonc2Dn1.m qui calcule la dérivée ap-
prochée de la fonction sinus au point x = 1 pour le pas h en utilisant la formule (1.5)
Vous écrirez également un script TestDn.m dans lequel :
- vous définirez le vecteur des pas, pas = 10.ˆ(-[1 : 16]);
- vous calculerez les dérivées approchées pour ces pas en utilisant les deux fonctions ;
- vous calculerez les erreurs Err1 et Err2 commises dans chaque cas ;
- vous représenterez ces erreurs en fonction du pas avec des coordonnées logarith-
miques :
loglog(pas, Err1, ’b-+’, pas, Err2, ’r-*’) ;
- vous pourrez réfléchir et commenter cette figure !
Les paramètres a et b seront des variables de la fonction que l’appellera par exemple
Foncapics.
On peut encore procéder de deux façons.
- la première utilise la fonction inline : Essayez.
– la seconde consiste à créer le fichier Foncapics.m, par exemple :
function y = Foncapics(x,a,b);
y = 2./((x-a).ˆ2+0.01) + 1./((x-b).ˆ2+0.002);
Exercice
Crééz les fonctions Fonc1Dn2.m et Fonc2Dn2.m qui calcule la dérivé de la fonc-
tion sinus en un point x et pour un pas h à fixer par l’utilisateur.
Exercice (*)
Modifiez les fonctions précédentes de façon que l’on puisse passer un vecteur x et un
vecteur h en arguments. Le format d’appel devra préciser :
function Dn = Fonc1Dn3(fonc,x,h);
xp = x + h;
y = feval(fonc,x);
yp = feval(fonc,xp);
Dn = (yp - y)/h;
if nargin ==3
1.7. M-FICHIERS 31
ordre = 1;
end
switch ordre
case 1
Dn = Fonc1Dn3(fonc, x, h);
case 2
Dn = Fonc2Dn3(fonc, x, h);
otherwise
Dn = [];
disp(’Ordre non valable’);
return
end
function Dn = Fonc1Dn5(fonc,x,h,varargin);
xp = x + h;
y = feval(fonc,x,varargin{:});
yp = feval(fonc,xp,varargin{:});
Dn = (yp - y)/h;
32 CHAPITRE 1. INITIATION À MATLAB
varargin désigne une liste de longueur quelconque de variables qui peuvent être
de tout format ; elle est gérée comme une cellule de tableaux.
Les cellules de tableaux sont un des moyens proposés par M ATLAB pour gérer une
collection de variables de types et formats différents. Les lignes suivantes définissent une
cellule de tableaux et font s’afficher quelques-uns de ses éléments :
>> C ={1:3, rand(2),’coucou’};
>> C{1}
ans =
1 2 3
>> c = C{3}
c =
coucou
Les éléments d’une cellule sont ordonnés comme ceux d’une matrice, par ligne et par
colonne ; on y fait référence par l’utilisation d’accolades au lieu de parenthèses.
Exercice
Ecrivez une fonction Fonc2Dn5.m qui fournisse une approximation à l’ordre 2 de la
dérivée de la fonction argument en autorisant cette fonction à dépendre de paramètres.
Ecrivez ensuite une fonction FoncDn6.m qui permette de choisir l’ordre, mais ne
l’impose pas. Son appel se fera selon
>> Dn = FoncDn6( fonc, x, h, ordre, p1, p2, ...)
Lorsque l’on ne veut pas fixer l’ordre et que la fonction fonc dépend de paramètres,
on passera la matrice vide [] pour la variable ordre.
y = 0.01*exp(x)+10*cos(x)-3*x;
yprime = 0.01*exp(x) -10*sin(x) -3;
1.7. M-FICHIERS 33
Les deux arguments en sortie sont placés entre crochets. Dans les deux formats d’ap-
pel, on calcule F (x) et F 0(x). On peut ne faire calculer que F (x) si l’on ne veut pas les
valeurs de la dérivée :
y = 0.01*exp(x)+10*cos(x)-3*x;
if nargout==2
yprime = 0.01*exp(x) -10*sin(x)-3;
end
>> A = rand(1,3);
>> save data1 A
>> save data2.txt A -ascii
>> save data3.txt A -ascii -double
>> clear all
>> load data1
>> load data2.txt
>> whos
>> data2 - A
>> load data3.txt
>> data3 - A
34 CHAPITRE 1. INITIATION À MATLAB
Exercice
Nous aurons besoin, pour un prochain TD, de disposer d’un certain nombre de racines
de l’équation J0 (x) = 0. Nous allons créer un fichier contenant les valeurs approchées
des 200 plus petites racines de cette équation. Pour ce faire, vous modifierez le fichier
VisuracBess.
Exercice
Vous pouvez recopier à l’adresse indiquée en introduction les fichiers Traction.xls
et Bruits.txt.
Vous allez lire ces fichiers depuis M ATLAB. Pour chacun d’eux, vous allez récupérer
une matrice de deux colonnes. La première colonne est constituées d’absisses, et la se-
conde d’ordonnées. Vous représenterez les courbes représentant chacun de ces échantillons.
35
36 CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF
Chapitre 2
Symbole Usage
= instruction d’affectation
() utilisées pour marquer la priorité d’une expression arithmétique ;
contiennent les variables en entrée des fonctions
[] utilisé pour former matrices et vecteurs ; contient les variables en sortie des fonctions
. point décimal
.. répertoire au-dessus du répertoire courant
... continue une suite d’instructions à la ligne suivante
; termine une ligne ; evite l’affichage
, sépare les éléments ou instructions d’une ligne et les variables d’une fonction
% commentaires
: utilisés pour la génération de vecteurs lignes d’éléments régulièrement espacés,
par défaut avec un incrément entier, sinon avec un incrément à préciser ;
désigne l’ensemble des indices d’un tableau selon une de ses dimensions
( :) force le format vecteur colonne
’ se place avant et après une chaine de caractères
” permet de définir ’ à l’intérieur d’une chaine de caractères
@ identificateur de fonction depuis la version 6
! permet l’execution d’une commande du système d’exploitation
& ET logique ; opère élément par élément pour les tableaux avec “faux” valant 0
et toute valeur non nulle valant “vrai”
| OU logique
∼ NON logique
xor OU exclusif, s’emploie sous la forme xor(A, B)
any fonction vectorielle logique qui vaut 1 si un élément du vecteur est non nul
et 0 sinon ; elle opère sur chaque colonne pour une matrice et s’emploie sous
la forme any(A)
all fonction vectorielle logique qui vaut 1 si chaque élément du vecteur est non
nul ; s’emploie et opère comme la précédente pour les tableaux
37
Opérateurs arithmétiques
Symbole Usage
+ addition
- soustraction
* produit matriciel ; les dimensions doivent être compatibles (sauf le cas d’un scalaire)
.* produit élément par élément ; les deux variables doivent avoir les mêmes dimensions
\ division à gauche, ou solution de système(s) linéaire(s) : C = A \ B si A*C=B
.\ division à gauche, élément par élément
/ division à droite, ou solution de système(s) linéaire(s) : C = B/A si C*A=B
./ division à droite, élément par élément
^ puissance de scalaire ou de matrice
.^ puissance de chaque élément d’un tableau
’ conjuguée transposée
.’ transposée
Opérateurs relationnels
Symbole Usage
< inférieur, compare élément par élément des tableaux de même taille et prend pour
valeur un tableau de cette taille , de coefficients 1 (“vrai”) ou 0 (“faux”)
<= inférieur ou égal, opére comme le précédent
> supérieur
>= supérieur ou égal
== égal
∼= différent
Symbole Usage
help aide en ligne
helpdesk accès à une documentation hypertexte de Matlab, gérée par Netscape sous Unix
what fournit la liste des M-fichiers du repertoire courant
type affiche le contenu d’un M-fichier
lookfor indique les occurences d’une chaine de caractères dans l’aide en ligne
ans résultat de la dernière instruction lorsqu’il n’est pas affecté
whos affiche la liste des variables courantes, et leur format
save sauvegarde une ou plusieurs variables de la session dans un fichier
load retrouve les variables sauvegardées précédemment
clear supprime une ou plusieurs variables de la session
38 CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF
Nom Usage
function définit une fonction ; en pratique, on enregistre les instructions qui la définissent
dans un M-fichier de même nom que la fonction (muni du suffixe .m)
feval évalue une fonction dont le nom est donné en argument
nargin nombre de variables en entrée d’une fonction
nargout nombre d’arguments en sortie d’une fonction
varargin liste d’arguments variable en entrée
varargout liste d’arguments variable en sortie ; définit une cellule de tableaux
global définit des variables globales
pause arrète la session en attente d’une réponse de l’utilisateur
disp affiche une variable sans donner son nom, ou un texte
find fournit les indices des éléments non nuls d’un tableau
for initialise une boucle de répétition d’une suite d’instructions pour des valeurs
d’une variable (compteur) spécifiées par un vecteur
while boucle de répétition d’une suite d’instructions tant qu’une condition reste vraie
if instructions éxécutées sous condition
else s’utilise avec if
elseif s’utilise avec if
end clôt le corps d’instructions de for, while et if
break arrète l’éxécution des boucles for ou while
size dimensions d’un tableau
length longueur d’un vecteur
linspace crée un vecteur de composantes uniformément réparties entre deux valeurs
logspace crée un vecteur de composantes réparties logarithmiquement entre deux valeurs
fliplr inverse l’ordre des colonnes d’un tableau
flipud inverse l’ordre des lignes d’un tableau
reshape change les dimensions d’un tableau ( avec les mêmes éléments)
repmat crée un tableau en reproduisant une matrice selon les dimensions spécifiées
cat crée une matrice par concatenation
cell crée une cellule de tableaux
struct crée une structure de matrices
format précise le format d’affichage
echo controle l’affichage des commandes éxécutées
more controle le nombre de lignes de chaque page affichée
tic ouvre le compteur de durée d’execution d’une suite de commandes
toc ferme le compteur ouvert par tic
cputime compteur de temps CPU
cd change le repertoire de travail
quit termine une session Matlab
39
Nom Usage
eps précision relative de l’arithmétique virgule-flottante utilisée
pi π
i,j unité imaginaire des nombres complexes
abs valeur absolue ou module d’un nombre complexe
angle argument d’un nombre complexe
sqrt racine carrée
real partie réelle
imag partie imaginaire
conj conjugué complexe
gcp plus grand diviseur commun
lcm plus petit multiple commun
round arrondi à l’entier le plus proche
fix arrondi vers 0
ceil arrondi vers ∞
floor arrondi vers −∞
rem reste après division entière : rem(x,y)= x-fix(x./y).*y
mod reste signé : mod(x,y)=x-floor(x./y).*y
max plus grande composante d’un vecteur ; pour une matrice, la fonction renvoie un
vecteur ligne formé des maxima de chaque colonne
min plus petite composante d’un vecteur
sort trie les composantes d’un vecteur selon l’ordre croissant
mean moyenne des composantes d’un vecteur
sum somme des composantes d’un vecteur
std écart-type des composantes d’un vecteur
cov matrice de covariance
prod produit des composantes d’un vecteur
cumsum sommes cumulées des éléments d’une matrice selon une dimension à préciser
poly construit un polynôme de racines données
roots racines d’un polynômes
polyval evalue un polynôme donné par ses coefficients
conv produit de polynômes, ou convolution de vecteurs
deconv division polynômiale ou déconvolution de vecteurs
polyder fournit le polynôme dérivé
fzero résoud une équation non linéaire
fsolve résoud un système d’équations non linéaires
fmin recherche le minimum d’une fonction d’une variable
fmins recherche le minimum d’une fonction de plusieurs variables
diff opérateur aux différences ; permet de construire les différénces finies ou divisées
40 CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF
Algèbre linéaire
Nom Usage
zeros matrice de 0
ones matrice de 1
eye matrice identité
rand matrice aléatoire, de coefficients uniformément distribués sur [0, 1]
randn matrice aléatoire, de coefficients normalement distribués
diag extrait la diagonale d’une matrice, ou crée une matrice diagonale ou bande
tril extrait la partie triangulaire inférieure d’une matrice
triu extrait la partie triangulaire supérieure d’une matrice
inv inverse d’une matrice (par résolution de systèmes linéaires)
lu factorisation lu d’une matrice, avec stratégie de pivot partiel
chol factorisation de Choleski d’une matrice symétrique définie positive
qr factorisation orthogonale-triangulaire d’une matrice
null fournit une base orthonormée du noyau
orth fournit une base orthonormée de l’image
rank rang d’une matrice
eig tous les éléments propres d’une matrice carrée
svd valeurs et vecteurs singuliers d’une matrice
pinv pseudo-inverse d’une matrice
det déterminant
cond nombre de conditionnement pour la résolution des systèmes linéaires, en norme 2
condest estimation du conditionnement d’une matrice carrée, en norme 1
norm norme d’une matrice (plusieurs normes sont proposées)
trace trace d’une matrice
expm exponentielle de matrice
sqrtm racine carrée matricielle d’une matrice carrée
Analyse
Nom Usage
exp, log, log10 exponentielle de base e, logarithme néperien et de base 10
sin, asin, sinh, asinh sinus, arcsinus, sinus hyperbolique et argsh
cos, acos, cosh, acosh cosinus,...
tan, atan, tanh, atanh tangente,...
cot, acot, coth, acoth cotangente,...
sec, asec, sech, asech secante,...
csc, acsc, csch, acsch cosecante,...
besselj, bessely, besselh fonctions de Bessel
besseli, besselk fonctions de Bessel modifiées
gamma, gammainc fonctions gamma
beta, betainc fonctions beta
erf, erfinv fonction d’erreur (ou fonction de Gauss) et sa réciproque
41
Graphiques et visualisations
Nom Usage
figure crée une nouvelle fenêtre de visualisation
plot graphe linéaire en dimension 2
fplot graphe d’une fonction entre deux valeurs
bar graphe en rectangles verticaux
hist histograme
pie graphe en camembert
polar graphe en coordonnées polaires
subplot permet de partitionner une fenêtre de visualisation
hold conserve le graphique courant
axis définit les bornes des axes
title affiche un titre (chaine de caractères à fournir)
legend affiche une légende sur la figure
text affiche un commentaire (chaine de caractères à fournir) en un point donné par
ses coordonnées
xlabel précise le nom de la variable en absisse
semylogy graphique avec une echelle logarithmique en ordonnée
plot3 graphe linéaire en dimension 3
bar3 graphe en parallèlogrames verticaux
meshgrid construit un jeu de coordonnées pour la visualisation tridimensionnelle d’une
fonction de 2 variables
mesh visualise une surface maillée en dimension 3
hidden fait apparaitre (off) ou disparaitre (on) les parties cachées d’une surface maillée
surf visualise une surface ombrée (en couleurs) en dimension 3
surfnorm représente les normales aux surfaces en dimension 3
contour représente les isolignes d’une surface en dimension 2
meshc combine mesh et contour
clabel fait apparaitre les valeurs des isolignes
quiver représente des gradients par des flèches
contour3 représente les isolignes d’une surface en dimension 3
view spécifie le point de vue d’un graphe en dimension 3
colormap définit le jeu de couleurs
colorbar affiche une échelle des couleurs
getframe forme un vecteur colonne à partir d’un graphique en vue d’une animation
movie execute l’animation visuelle avec la matrice précédente
image crée une image en interpretant les valeurs des coefficients d’une matrice
print imprime un graphique, ou le sauvegarde en format post-script
42 CHAPITRE 2. ANNEXE : LEXIQUE NON EXHAUSTIF
Analyse numérique
Nom Usage
spline spline cubique d’interpolation
interp1 interpolation de données en dimension 1
interpn interpolation de données en dimension n
quad intégration numérique par la méthode de Simpson
quadl intégration numérique par une methode adaptative de Lobatto
ode45 résolution approchée d’équations ou de systèmes différentiels non raides
par méthodes de Runge-Kutta emboitées d’ordre 4-5
ode113 résolution approchée d’équations ou de systèmes différentiels non raides
par des méthodes d’Adams-Bashforth-Moulton de type PECE d’ordre variable
ode23s résolution approchée d’équations ou de systèmes différentiels raides
par la méthode de Rosenbrock d’ordre 2
ode15s résolution approchée d’équations ou de systèmes différentiels raides
par une méthode de différentiation rétrograde d’ordre variable
fft transformée de Fourier rapide en dimension 1
ifft transformée de Fourier rapide inverse en dimension 1
fft2 transformée de Fourier rapide en dimension 2
Matrices creuses
Nom Usage
sparfun fournit une liste de fonctions qui s’appliquent aux matrices creuses
sparse convertit au format creux une matrice pleine, ou crée une matrice creuse
full convertit au format plein une matrice creuse
speye matrice identité en format creux
spdiags crée une matrice diagonale ou une matrice bande en format creux
nnz nombre d’éléments non nuls
issparse vrai si la matrice est sous format creux
spy visualise la répartition des coefficients non nuls d’une matrice
symmmd renumérotation par l’algorithme du degré minimum
symrcm renumérotation par l’algorithme Cuthill et Mac-Kee inverse
pcg résolution d’un système linéaire de matrice symétrique définie positive par la
méthode du gradient conjugué préconditionné
gmres résolution d’un système linéaire par la méthode GMRES
luinc factorisation LU incomplète d’une M-matrice creuse
cholinc factorisation de Choleski incomplète d’une H-matrice creuse
eigs quelques éléments propres d’une matrice carrée
Chapitre 3
Bibliographie
43