P. 1
matlab

matlab

5.0

|Views: 913|Likes:

More info:

Published by: Tiouti Abderrahmane on Apr 07, 2011
Droits d'auteur :Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/14/2013

pdf

text

original

Sections

  • 1 Présentation et généralités
  • 1.1 Une session matlab
  • 1.2 L’espace de travail
  • 1.3 Obtenir de l’aide
  • 1.4 Syntaxe d’une ligne d’instructions
  • 1.5 Gestion des fichiers du répertoire de travail
  • 2 Types de données et variables
  • 2.1 Particularités de matlab
  • 2.2 Les types de données
  • 2.2.1 Les 4 types de données matlab
  • 2.2.2 Le type complexe
  • 2.2.3 Le type chaîne de caractères
  • 2.2.4 Le type logique
  • 2.3 Les vecteurs
  • 2.3.1 Définir un vecteur
  • 2.3.2 Vecteurs spéciaux
  • 2.4 Les matrices
  • 2.4.1 Définir une matrice
  • 2.4.2 Matrices spéciales
  • 2.4.3 Manipuler des matrices
  • 2.5 La structure sparse
  • 3 Calculer avec matlab
  • 3.1 Les constantes
  • 3.2 Opérations et fonctions portant sur les scalaires
  • 3.3 Opérations et fonctions portant sur les vecteurs
  • 3.4 Opérations et fonctions portant sur les matrices
  • 3.5 Résolution de systèmes linéaires
  • 3.6 Les polynômes
  • 4 Les entrées-sorties
  • 4.1 Les formats d’affichage des réels
  • 4.2 Affichage simple, la commande disp
  • 4.3 Lecture
  • 4.4 Impressions dirigées par format
  • 5 Programmer sous matlab
  • 5.1 Scripts et fonctions
  • 5.2 Opérateurs de comparaison et opérateurs logiques
  • 5.3 Instructions de contrôle
  • 5.3.1 Boucle FOR : parcours d’un intervalle
  • 5.3.2 Boucle WHILE : tant que . . . faire
  • 5.3.3 L’instruction conditionnée IF
  • 5.3.4 Choix ventilé, l’instruction switch
  • 5.3.5 Interruption d’une boucle de contrôle
  • 5.4 Un exemple complet
  • 6.1 Gestion des fenêtres graphiques
  • 6.2 Graphisme 2D
  • 6.2.2 La commande plot
  • 6.2.3 La commande loglog
  • 6.3 Améliorer la lisibilité d’une figure
  • 6.3.1 Légender une figure
  • 6.3.3 Sauvegarder une figure
  • 6.4 Graphisme 3D

Débuter avec matlab

Stéphane Balac
Centre de Mathématiques
INSA de Lyon
(c) Copyright 2001 Stéphane Balac - INSA de Lyon
(Centre de Mathematiques, F-69621 Villeurbanne Cedex)
(c) Copyright 1999 Stéphane Balac - Université de Bretagne Occidentale
(Département de Mathématiques, F-29285 Brest cedex)
Ce document peut être reproduit et distribué à des fins non-commerciales dans son intégra-
lité ou partiellement. La mention du copyright ainsi que l’identité de l’auteur doivent être
conservées et la présente notice préservée dans son intégralité sur toute copie intégrale ou
partielle. Si vous distribuez ce travail en partie, vous devez mentionner comment obtenir
une version intégrale du document.
matlab est un produit de The Mathswork Inc., www.mathswork.com.
Table des matières
1 Présentation et généralités 7
1.1 Une session matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 L’espace de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Obtenir de l’aide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Syntaxe d’une ligne d’instructions . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Gestion des fichiers du répertoire de travail . . . . . . . . . . . . . . . . . . 12
2 Types de données et variables 13
2.1 Particularités de matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Les types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1 Les 4 types de données matlab . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Le type complexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.3 Le type chaîne de caractères . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 Le type logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Les vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.1 Définir un vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.2 Vecteurs spéciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 Les matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.1 Définir une matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.2 Matrices spéciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4.3 Manipuler des matrices . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 La structure sparse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Calculer avec matlab 28
3.1 Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Opérations et fonctions portant sur les scalaires . . . . . . . . . . . . . . . . 28
3.3 Opérations et fonctions portant sur les vecteurs . . . . . . . . . . . . . . . . 30
3.4 Opérations et fonctions portant sur les matrices . . . . . . . . . . . . . . . . 31
3.5 Résolution de systèmes linéaires . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.6 Les polynômes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4 Les entrées-sorties 36
4.1 Les formats d’affichage des réels . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Affichage simple, la commande disp . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Impressions dirigées par format . . . . . . . . . . . . . . . . . . . . . . . . . 37
5 Programmer sous matlab 41
5.1 Scripts et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Opérateurs de comparaison et opérateurs logiques . . . . . . . . . . . . . . . 44
5.3 Instructions de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.1 Boucle FOR : parcours d’un intervalle . . . . . . . . . . . . . . . . . 45
5.3.2 Boucle WHILE : tant que . . . faire . . . . . . . . . . . . . . . . . . . 46
5.3.3 L’instruction conditionnée IF . . . . . . . . . . . . . . . . . . . . . . 47
5.3.4 Choix ventilé, l’instruction switch . . . . . . . . . . . . . . . . . . . 49
5.3.5 Interruption d’une boucle de contrôle . . . . . . . . . . . . . . . . . . 51
5.4 Un exemple complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3
6 Graphisme 56
6.1 Gestion des fenêtres graphiques . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.2 Graphisme 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.2.1 Tracer le graphe d’une fonction; la commande fplot . . . . . . . . . 57
6.2.2 La commande plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.2.3 La commande loglog . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3 Améliorer la lisibilité d’une figure . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3.1 Légender une figure . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3.2 Afficher plusieurs courbes dans une même fenêtre . . . . . . . . . . . 62
6.3.3 Sauvegarder une figure . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.4 Graphisme 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.4.1 Tracer les lignes de niveau d’une fonction de 2 variables . . . . . . . 65
6.4.2 Représenter une surface d’équation z = g(x, y) . . . . . . . . . . . . 69
6.4.3 Représenter une surface paramétrée . . . . . . . . . . . . . . . . . . . 73
4
Introduction
Ce document est un guide d’initiation à matlab. matlab est un programme interac-
tif de calcul scientifique utilisable pour la résolution numérique de nombreux problèmes
mathématiques ou appliqués. En outre, matlab dispose de potentialités graphiques im-
portantes.
L’objectif de ce document est de permettre au débutant de rapidement se familiariser
avec matlab. Aussi, seules les fonctionnalités les plus courantes de matlab sont présen-
tées (aucune référence aux Toolbox n’est faite par exemple). De même, en général, les
commandes matlab ne sont pas présentées de manière exhaustive. Seule l’utilisation la
plus courante de la commande est mentionnée. Cette documentation a été rédigée en
prenant comme support la version 5.1 de matlab. Toutefois dans la mesure où nous
nous limitons aux fonctionnalités les plus courantes de matlab, la plupart des commandes
décrites sont communes aux versions antérieures et resteront compatibles avec les versions
ultérieures. Les commandes sont généralement présentées suivies d’un exemple. Le lecteur
est invité à tester par lui même les exemples proposés (et des variantes). Au sein d’un même
paragraphe, les différents exemples sont souvent liés. Il est donc recommandé d’exécuter
les exemples dans l’ordre où ils apparaissent. Par contre d’un paragraphe à l’autre, il peut
être nécessaire de « nettoyer » l’espace de travail en tapant clear all dans la fenêtre de
contrôle matlab. La présentation qui est faite correspond à une utilisation de matlab sur
station de travail Unix, mais devrait être très facilement transposable aux autres systèmes.
matlab est abréviation de MATrix LABoratory. matlab est avant tout un programme
de calcul matriciel. L’exemple suivant est révelateur à ce sujet : si A et B sont deux variables
définies comme étant des matrices, l’instruction A*B calcule le produit matriciel des ma-
trices A et B. D’autre part avec matlab, un scalaire est considéré comme une matrice à un
élément et un vecteur est considéré comme une matrice à une ligne (ou une colonne). Bien
qu’un peu déroutant au départ, cette approche s’avère en pratique d’une grande efficacité.
Nous supposons que le lecteur est familié des notions d’algèbre linéaire élémentaire,
notamment matriciel. Un exemple de matrice que nous utiliserons fréquemment dans ce
document correspond au carré magique. L’expression carré magique désigne tout tableau
carré dont les cases renferment des nombres entiers disposés de telle sorte que les sommes
des nombres inscrits sur chaque ligne, sur chaque colonne et chaque diagonale soient toutes
égales. On pourra consulter au sujet des carrés magiques le chapitre 2 de l’ouvrage Histoire
d’algorithmes [1] : « plus souvent utilisés comme talismans que comme objet de recherche
mathématique, les carrés magiques étaient étroitement liés à la vie quotidienne. Ainsi, il
était fait appel à eux pour faciliter les accouchements, soigner les morsures d’animaux
vénéneux ou encore guérir de maladie. Il est donc naturel qu’ils ne se rencontrent pas que
dans les livres mais aussi sur des tableaux, sous forme de gravure sur des monuments, des
médailles . . .». Comme exemple bien connu, on peut citer le carré magique d’ordre 4 qui
apparaît sur une gravure sur bois de la Renaissance d’Albrecht Dürer (Mélancolie, 1415).
5
Fig. 1 – Mélancolie par Albrecht Dürer (1415). Un carré magique d’ordre 4 apparaît au
dessous de la cloche.
Par convention, les commandes matlab apparaissent dans le texte dans une fonte «
true-type ». Les exemples sont eux aussi présentés dans une fonte « true-type ». Dans
un souci de gain de place certains exemples sont présentés sur deux colonnes.
Ce document est disponible aux formats pdf et postscript auprès de l’auteur. Une version
hypertexte (HTLM) de ce document est également disponible.
Ce document est destiné à évoluer, aussi toute erreur ou ambigüité relevée, toute remarque
ou avis peut être communiqué à l’adresse suivante : Stephane.Balac@voila.fr.
Brest, août 1999
Cette version du document a bénéficié de corrections suggérées par Olivier Mazet du Centre
de Mathématiques de l’INSA de Lyon.
Lyon, janvier 2001
Stéphane Balac
Centre de Mathématiques
INSA de Lyon
F-69621 Villeurbanne Cedex
6
1 Présentation et généralités
1.1 Une session matlab
Pour lancer matlab
1
, commencez par ouvrir une fenêtre de commande (commandtool)
puis déplacez-vous dans votre répertoire (directory) de travail. Tapez la commande matlab.
Voici ce que vous devez voir apparaître :
[unix prompt] matlab
< M A T L A B (R) >
(c) Copyright 1984-97 The MathWorks, Inc.
All Rights Reserved
Version 5.1.0.421
May 25 1997
Commands to get started: intro, demo, help help
Commands for more information: help, whatsnew, info, subscribe
>>
Notez le prompt matlab (») qui indique que matlab attend des instructions. Voici
un exemple de session matlab :
>> A = [ 1 3; 4 2 ]
A =
1 3
4 2
>> A*A
ans =
13 9
12 16
>> quit
16 flops.
[unix prompt]
Dans cette session on a défini la matrice
A =

1 3
4 2

et l’on a calculé son carré.
Chaque ligne d’instructions doit se terminer par un retour chariot. La commande pour
quitter matlab est quit. On veillera dans la mesure du possible à ne pas lancer simulta-
nément plusieurs sessions matlab.
1.2 L’espace de travail
Comme tout langage de programmation matlab permet de définir des données va-
riables. Les variables sont définies au fur et à mesure que l’on donne leurs noms (iden-
tificateur) et leurs valeurs numériques ou leurs expressions mathématiques. matlab ne
1
La présentation qui est faite correspond à une utilisation de matlab sur station de travail Unix, mais
devrait être très facilement transposable aux autres systèmes.
Stéphane Balac - Débuter avec matlab 7
nécessite pas de déclaration de type ou de dimension pour une variable. Les variables sont
stockées dans l’espace de travail (ou workspace) et peuvent être utilisées dans les calculs
subséquents.
Pour obtenir la liste des variables actives de l’espace de travail on dispose des com-
mandes who et whos. La commande who affiche le nom des variables actives. La commande
whos donne plus d’informations : le nom, la taille du tableau (nombre de lignes et de co-
lonnes) associé, l’espace mémoire utilisé (en Bytes) et la classe des données (principalement
double array s’il s’agit d’un tableau de valeurs réelles ou complexes et char s’il s’agit d’un
tableau de caractères).
La commande clear permet de nettoyer l’espace de travail : toutes les variables sont
détruites. Il est possible de ne détruire qu’une partie des variables en tapant clear nom-var
où nom-var est le nom de la (ou des) variable(s) à détruire.
>> x=2*pi/3; y=sin(x); z=cos(x);
>> A = [ 1 3; 4 2 ]; B = A*A;
>> t = ’bonjour’;
>> who
Your variables are:
A B t x y z
>> whos
Name Size Bytes Class
A 2x2 32 double array
B 2x2 32 double array
t 1x7 14 char array
x 1x1 8 double array
y 1x1 8 double array
z 1x1 8 double array
Grand total is 18 elements using 102 bytes
>> clear x y t
>> whos
Name Size Bytes Class
A 2x2 32 double array
B 2x2 32 double array
z 1x1 8 double array
Grand total is 9 elements using 72 bytes
>> clear
>> who
>>
Stéphane Balac - Débuter avec matlab 8
Il est possible de sauvegarder une session matlab matlab dans un fichier pour une
utilisation ultérieure. L’instruction save nom-fic enregistre toutes les variables de l’espace
de travail dans le fichier nom-fic.mat. Si aucun nom de fichier n’est précisé, le fichier
par défaut est matlab.mat. Il est possible de ne sauver qu’une partie des variables (par
exemple seulement la variable contenant le résultat d’un calcul) en utilisant l’instruction
save nom-fic nom-var où nom-var est le nom de la (ou des) variable(s) à sauvegarder. At-
tention, seul le contenu des variables est sauvegardé et non pas l’ensemble des instructions
effectuées durant la session. Pour ramener dans l’espace de travail les variables sauvegardées
dans le fichier nom-fic.mat, taper load nom-fic.
Dans l’exemple qui suit on calcule le sinus et le cosinus de 2π/3 dans les variables y
et z. On sauve ces résultats dans un fichier toto.mat. Après avoir quitté matlab on peut
vérifier que le fichier toto.mat existe bien mais qu’il ne s’agit pas d’un fichier ascii. Si
l’on relance matlab et que l’on tape load toto, on peut vérifier que les variables y et z
existent bien et ont les valeurs précédentes.
>> x=2*pi/3, y=sin(x), z=cos(x)
x =
2.0944
y =
0.8660
z =
-0.5000
>> save toto y z
>> quit
6 flops.
[unix prompt] ls
toto.mat
[unix prompt] more y.mat
MATLAB 5.0 MAT-file, Platform: SOL2, Created on: Mon Jul 5 20:42:21 1999
‘ MI 8 e e d ‘ ‘ ‘ ‘z ¿ßÿÿÿÿÿü
[unix prompt] matlab
>> load toto
>> who
Your variables are:
y z
>> y
y =
0.8660
>> z
z =
Stéphane Balac - Débuter avec matlab 9
-0.5000
>> x
??? Undefined function or variable ’x’.
>>
La commande diary permet de sauvegarder l’ensemble d’une session dans un fichier
ascii pour un traitement ultérieur (insertion dans un document, impression, . . .). Le fichier
de sauvegarde par défaut a pour nom diary. On provoque la sauvegarde dans le fichier
nom-fic, par l’instruction diary nom-fic. Attention, c’est la commande diary qui dé-
clenche le début de sauvegarde ; il est impossible de sauvegarder la partie de la session
précédent son appel. Pour arrêter la sauvegarde, taper diary off.
>> x=2*pi/3; y=sin(x);
>> diary toto
>> z=cos(x)
z =
-0.5000
>> diary off
>> t = tan(x)
t =
-1.7321
>>
Si vous éditez le fichier toto, voici ce que vous verrez :
>> z=cos(x)
z =
-0.5000
>> diary off
et rien de plus . . .
1.3 Obtenir de l’aide
Dans une session matlab, il est possible d’obtenir une aide en ligne sur une commande
en tapant help nom-commande. Par exemple,
>> help diary
DIARY Save text of MATLAB session.
DIARY file_name causes a copy of all subsequent terminal input
and most of the resulting output to be written on the named
file. DIARY OFF suspends it. DIARY ON turns it back on.
DIARY, by itself, toggles the diary state.
Use the functional form of DIARY, such as DIARY(’file’),
when the file name is stored in a string.
>>
Attention, les commandes matlab doivent être tapées en minuscules pour être recon-
nues, même si elles figurent en majuscules dans l’aide en ligne.
Stéphane Balac - Débuter avec matlab 10
On peut également obtenir de l’aide par le biais de la commande doc qui donne accès à
une documentation complète au format HTML. Pour quitter cette documentation, cliquer
sur Exit Program dans le menu File du navigateur.
La commande lookfor permet de rechercher un mot-clé parmi les lignes de commen-
taires en entête des fonctions matlab (ces lignes sont celles affichées par la commnande
doc). L’instruction lookfor motclé recherche le mot-clé motclé dans la première ligne
de commentaire de toutes les fonctions matlab. L’instruction lookfor motclé -all re-
cherche le mot-clé dans toutes les lignes de commentaires en entête des fonctions. Attention
le mot-clé doit être en anglais, les commentaires des fonctions matlab étant rédigés en
anglais. On peut utiliser une phrase comme mot-clé. Il faut alors l’écrire entre guillemets
(’ ’). La commande lookfor retourne le nom la fonction matlab (ou des fonctions) où
le mot-clé figure dans la première ligne de commentaires. Elle retourne également la ligne
de commentaires où figure le mot-clé. Si le mot-clé n’a été trouvé dans aucune ligne de
commentaires, matlab rend la main sans rien afficher.
>> lookfor determinant
DET Determinant.
>> lookfor ’tridiagonal matrix’
LESP Tridiagonal matrix with real, sensitive eigenvalues.
POISSON Block tridiagonal matrix from Poisson’s equation.
TRIDIAG Tridiagonal matrix (sparse).
TRIDIEIG Find a few eigenvalues of a tridiagonal matrix.
TRIDISOLVE Solve A*x = b where A is a square, symmetric tridiagonal matrix.
>> lookfor papillon
>>
1.4 Syntaxe d’une ligne d’instructions
Si une instruction matlab est suivie d’un point virgule, le résultat de cette instruction
n’est pas affiché. Pour ré-afficher un résultat contenu dans une variable, il suffit de taper
le nom de la variable. Le résultat de la dernière instruction exécutée peut être rappelé par
la commande ans :
>> A = [ 8 1 6; 3 5 7; 4 2 9];
>> A
A =
8 1 6
3 5 7
4 9 2
>> A*A;
>> ans
ans =
91 67 67
67 91 67
67 67 91
>>
Plusieurs instructions matlab peuvent figurer sur une même ligne. Il faut alors les
séparer par une virgule ou par un point virgule. D’autre part, si une commande est trop
longue pour tenir sur une ligne, il est possible de poursuivre sur la ligne suivante en
terminant la ligne par 3 points (...).
>> B = [ 1 3; 4 2 ]; B*B
ans =
Stéphane Balac - Débuter avec matlab 11
13 9
12 16
>> x = 1 + 2 + 3 + 4 + 5 + 6 ...
+7 + 8 + 9 + 10
x =
55
>>
Si la syntaxe de l’instruction soumise est erronée ou si vous demandez à matlab
d’exécuter une instruction illégale (qui n’a pas de sens mathématique par exemple), vous
obtiendez un message d’erreur. Ce message vous indique les sources d’erreurs possibles et
doit vous permettre de corriger rapidement votre erreur.
>> A + B
??? Error using ==> +
Matrix dimensions must agree.
>> C = [ 1 2 3; 4 5]
??? Number of elements in each row must be the same.
>> whose
??? Undefined function or variable ’whose’.
>>
1.5 Gestion des fichiers du répertoire de travail
Un certain nombre de commandes permettent de gérer les fichiers du répertoire de tra-
vail. La commande dir donne la liste des fichiers du répertoire de travail. La commande
cd permet de changer de répertoire de travail. La commande type permet d’afficher le
contenu d’un fichier. La commande delete permet de détruire un fichier. Ces commandes
s’utilisent de la même manière que les commandes correspondantes d’Unix (ou du DOS).
Enfin la commande edit permet d’ouvrir un éditeur de texte. Le choix de l’éditeur a été
effectué au moment de l’installation de matlab sur votre machine, il vous est donc impos-
sible de choisir votre éditeur favori. Il est également possible d’exécuter des commandes
Unix à partir de matlab en faisant précéder la commande d’un point d’exclamation ( !).
Si vous avez effectué les exemples du paragraphe 1.2, deux fichiers toto et toto.mat
existent dans votre répertoire de travail. Voici alors quelques exemples d’utilisation des
commandes de gestion des fichiers.
>> dir
. .. toto toto.mat
>> edit toto
>> delete toto
>> !ls
toto.mat
>>
Stéphane Balac - Débuter avec matlab 12
2 Types de données et variables
2.1 Particularités de matlab
Comme tout langage de programmation matlab permet de définir des données va-
riables. Une variable est désignée par un identificateur qui est formé d’une combinaison
de lettres et de chiffres. Le premier caractère de l’identificateur doit nécessairement être
une lettre. Attention, matlab différencie majuscules et minuscules ! Ainsi X33 et x33 dé-
signent deux variables distinctes. Les variables sont définies au fur et à mesure que l’on
donne leurs noms (identificateur) et leurs valeurs numériques ou leurs expressions mathé-
matiques. L’utilisation de variables avec matlab ne nécessite pas de déclaration de type
ou de dimension. Le type et la dimension d’une variable sont déterminés de manière auto-
matique à partir de l’expression mathématique ou de la valeur affectée à la variable. Une
variable peut être de type réel, complexe, chaîne de caractères ou logique.
Pour matlab toute variable est considérée comme étant un tableau d’éléments d’un
type donné. matlab différencie trois formes particulières de tableaux. Les scalaires qui sont
des tableaux à une ligne et une colonne. Les vecteurs qui sont des tableaux à une ligne ou
à une colonne. Les matrices qui sont des tableaux ayant plusieurs lignes et colonnes. Une
variable matlab est donc toujours un tableau que l’on appelle variable scalaire, vecteur
ou matrice suivant la forme du tableau.
2.2 Les types de données
2.2.1 Les 4 types de données matlab
Les trois principaux types de variables utilisés par matlab sont les types réel, complexe
et chaîne de caractères. Il n’y a pas de type entier à proprement parler. Le type logique est
associé au résultat de certaines fonctions. Signalons qu’il est inutile (impossible) de déclarer
le type d’une variable. Ce type est établi automatiquement à partir des valeurs affectées à
la variable. Par exemple les instructions x = 2 ; z = 2+i ; rep = ’oui’ ; définissent une
variable x de type réel, une variable z de type complexe et une variable rep de type chaîne
de caractères.
>> clear
>> x = 2; z = 2+i; rep = ’oui’;
>> whos
Name Size Bytes Class
rep 1x3 6 char array
x 1x1 8 double array
z 1x1 16 double array (complex)
Grand total is 5 elements using 30 bytes
>>
Comme on ne définit pas de manière explicite le type d’une variable, il est parfois utile
de pouvoir le déterminer. Cela est possible grâce aux commandes ischar, islogical et
isreal. ischar(x) retourne 1 si x est de type chaîne de caractères et 0 sinon. islogical(x)
retourne 1 si x est de type logique et 0 sinon. La commande isreal(x) est à utiliser avec
discernement : elle retourne 1 si x est réel ou de type chaîne de caractères et 0 sinon (x
Stéphane Balac - Débuter avec matlab 13
est complexe à partie imaginaire non nulle ou n’est pas un tableau de valeurs réelles ou de
caractères).
>> ischar(rep)
ans =
1
>> ischar(x)
ans =
0
>> isreal(z)
ans =
0
>> isreal(x)
ans =
1
>> isreal(rep)
ans =
1
>>
2.2.2 Le type complexe
L’unité imaginaire est désignée par i ou j. Les nombres complexes peuvent être écrits
sous forme cartésienne a + ib ou sous forme polaire re
it
. Les différentes écritures possibles
sont a+ib, a+i*b, a+b*i, a+bi et r*exp(it) ou r*exp(i*t) avec a, b, r et t des variables
de type réel. Les commandes imag, real, abs, angle permettent de passer aisément de
la forme polaire à la forme cartésienne et réciproquement. Si z est de type complexe, les
instructions imag(z) et real(z) retournent la partie imaginaire et la partie réelle de z.
Les instructions abs(z) et angle(z) retournent le module et l’argument de z.
On fera attention au fait que les identificateurs i et j ne sont pas réservés. Aussi il est
possible que des variables de noms i et j aient été redéfinies au cours d’un calcul antérieur
et soient toujours actives. Si c’est la cas, on peut soit détruire ces deux variables (clear
i j), i et j redeviennent alors l’unité imaginaire, soit ré-affecter à i ou à j la valeur
unité imaginaire par l’instruction i=sqrt(-1). On se méfiera donc des boucles d’indices
i et j dans lesquelles on manipule des variables de type complexe. On fera également
attention à ne pas laisser d’espace autour de l’unité imaginaire afin d’éviter de mauvaises
interprétations des données dans certains cas. Comparez par exemple,
>> z = [1+i, 2, 3i]
z =
1.0000 + 1.0000i 2.0000 0 + 3.0000i
>> y = [1+i, 2, 3 i]
y =
1.0000 + 1.0000i 2.0000 3.0000 0 + 1.0000i
>>
2.2.3 Le type chaîne de caractères
Une chaîne de caractères est un tableau de caractères. Une donnée de type chaîne de
caractères (char) est représentée sous la forme d’une suite de caractères encadrée d’apos-
trophes simples (’). Une variable de type chaîne de caractères étant interprétée comme
un tableau de caractères, il est possible de manipuler chaque lettre de la chaîne en faisant
référence à sa position dans la chaîne. La concaténation de chaînes de caractères s’effectue
selon les règles de manipulation des tableaux, voir le paragraphe 2.3.
L’exemple suivant présente différentes manipulations d’une chaîne de caractères.
Stéphane Balac - Débuter avec matlab 14
>> ch1 = ’bon’
ch1 =
bon
>> ch2 = ’jour’
ch2 =
jour
>> whos
Name Size Bytes Class
ch1 1x3 6 char array
ch2 1x4 8 char array
Grand total is 7 elements using 14 bytes
>> ch = [ch1,ch2]
ans =
bonjour
>> ch(1), ch(7), ch(1:3)
ans =
b
ans =
r
ans =
bon
>> ch3 = ’soi’;
>> ch = [ch(1:3), ch3, ch(7)]
ans =
bonsoir
>>
Si une chaîne de caractères doit contenir le caractère apostrophe (’) celui-ci doit être
doublé dans la chaîne (ainsi pour affecter le caractère apostrophe (’) à une variable on
devra écrire ””, soit 4 apostrophes).
>> rep = ’aujourd’hui’
??? rep = ’aujourd’hui
|
Missing operator, comma, or semi-colon.
>> rep = ’aujourd’’hui’
rep =
aujourd’hui
>> apos = ’’’’
apos =

>>
La chaîne de caractères vide s’obtient par 2 apostrophes ”. La commande isempty
permet de tester si une variables de type chaîne de caractères est vide ou non. La commande
Stéphane Balac - Débuter avec matlab 15
strcmp permet de tester si deux chaines de caractères sont égales ou non.
2.2.4 Le type logique
Le type logique (logical) possède 2 formes : 0 pour faux et 1 pour vrai. Un résultat de
type logique est retourné par certaines fonctions ou dans le cas de certains tests.
Dans l’exemple qui suit on considère une variable x contenant la valeur 123 et une
variable y définie par l’expression mathématique y = exp(log(x)). On teste si les variables
x et y contiennent les mêmes valeurs. La variable tst est une variable de type logique qui
vaut 1 (vrai) les valeurs sont égales et 0 (faux) sinon. Suivant la valeur de tst, on affiche
la phrase x est egal a y ou la phrase x est different de y. Dans l’exemple proposé,
compte-tenu des erreurs d’arrondis lors du calcul de exp(log(123)), la valeur de la variable
y ne vaut pas exactement 123. On pourra également considérer le cas où x = 12.
>> x = 123; y = exp(log(x));
>> tst = ( x==y );
>> if tst, disp(’x est egal a y ’), else disp(’x est different de y ’), end
x est different de y
>> whos
Name Size Bytes Class
tst 1x1 8 double array (logical)
x 1x1 8 double array
y 1x1 8 double array
Grand total is 3 elements using 24 bytes
>> format long
>> x, y, tst
x =
123
y =
1.229999999999999e+02
tst =
0
>> format, clear
>>
2.3 Les vecteurs
2.3.1 Définir un vecteur
On définit un vecteur ligne en donnant la liste de ses éléments entre crochets ([ ]). Les
éléments sont séparés au choix par des espaces ou par des virgules. On définit un vecteur
colonne en donnant la liste de ses éléments séparés au choix par des points virgules ( ;) ou
par des retours chariots (touche Entrée/Enter). On peut transformer un vecteur ligne x en
un vecteur colonne et réciproquement en tapant x’ (’ est le symbole de transposition).
Il est inutile de définir la longueur d’un vecteur au préalable. Cette longueur sera établie
automatiquement à partir de l’expression mathématique définissant le vecteur ou à partir
des données. On peut obtenir la longueur d’un vecteur donné grâce à la commande length.
Stéphane Balac - Débuter avec matlab 16
Un vecteur peut également être défini « par blocs » selon la même syntaxe. Si par
exemple x
1
, x
2
et x
3
sont trois vecteurs (on note x1, x2 et x3 les variables matlab corres-
pondantes), on définit le vecteur X = (x
1
| x
2
| x
3
) par l’instruction X = [x1 x2 x3].
>> x1 = [1 2 3], x2 = [4,5,6,7], x3 = [8; 9; 10]
x1 =
1 2 3
x2 =
4 5 6 7
x3 =
8
9
10
>> length(x2), length(x3)
ans =
4
ans =
3
>> whos
Name Size Bytes Class
x1 1x3 24 double array
x2 1x4 32 double array
x3 3x1 24 double array
Grand total is 10 elements using 80 bytes
>> x3’
ans =
8 9 10
>> X = [x1 x2 x3’]
X =
1 2 3 4 5 6 7 8 9 10
>>
Les éléments d’un vecteur peuvent être manipulés grâce à leur indice dans le tableau.
Le k
e
élément du vecteur x est désignée par x(k). Le premier élément d’un vecteur a
obligatoirement pour indice 1. En pratique ceci impose de faire des translations d’indices
si par exemple on souhaite définir une suite x
n
, n = 0, · · · , N. Le terme x
0
de la suite
correspondra à l’élément x(1) du vecteur et le terme x
N
à l’élément x(N+1). Il est possible
de manipuler plusieurs éléments d’un vecteur simultanément. Ainsi les éléments k à l du
vecteur x sont désignés par x(k :l). On peut également manipuler facilement les éléments
d’un vecteur dont les indices sont en progression arithmétique. Ainsi si l’on souhaite extraire
les éléments k, k +p, k +2p, · · · , k +Np = l on écrira x(k :p :l). Plus généralement, si K
est un vecteur de valeurs entières, X(K) retourne les éléments du vecteur X dont les indices
sont les éléments du vecteur K.
Reprenons l’exemple précédent.
Stéphane Balac - Débuter avec matlab 17
>> X(5)
ans =
5
>> X(4:10)
ans =
4 5 6 7 8 9 10
>> X(2:2:10)
ans =
2 4 6 8 10
>> K = [1 3 4 6]; X(K)
ans =
1 3 4 6
>>
Il est très facile de définir un vecteur dont les composantes forment une suite arith-
métique. Pour définir un vecteur x dont les composantes forment une suite arithmétique
de raison h, de premier terme a et de dernier terme b, on écrira x = a :h :b. Si a − b
n’est pas un multiple de h, le dernier élément du vecteur x sera a + Ent((a − b)/h) h où
Ent est la fonction partie entière. La commande linspace permet de définir un vecteur x
de longueur N dont les composantes forment une suite arithmétique de premier terme a
et de dernier terme b (donc de raison (a − b)/(N − 1)). Les composantes du vecteur sont
donc linéairement espacés. La syntaxe est x = linspace(a,b,N).
>> x = 1.1:0.1:1.9
x =
Columns 1 through 7
1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 8 through 9
1.8000 1.9000
>> x = 1.1:0.2:2
x =
1.1000 1.3000 1.5000 1.7000 1.9000
>> x = linspace(1.1,1.9,9)
ans =
Columns 1 through 7
1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 8 through 9
1.8000 1.9000
>>
2.3.2 Vecteurs spéciaux
Les commandes ones, zeros et rand permettent de définir des vecteurs dont les élé-
ments ont respectivement pour valeurs 0, 1 et des nombres générés de manière aléatoire.
Stéphane Balac - Débuter avec matlab 18
ones(1,n) : vecteur ligne de longueur n dont tous les éléments valent 1
ones(m,1) : vecteur colonne de longueur m dont tous les éléments valent 1
zeros(1,n) : vecteur ligne de longueur n dont tous les éléments valent 0
zeros(m,1) : vecteur colonne de longueur m dont tous les éléments valent 0
rand(1,n) : vecteur ligne de longueur n dont les éléments sont générés de manière
aléatoire entre 0 et 1
rand(m,1) : vecteur colonne de longueur m dont les éléments sont générés de
manière aléatoire entre 0 et 1
2.4 Les matrices
2.4.1 Définir une matrice
On a déjà vu que l’on définissait la matrice
A =

1 3
4 2

en tapant A = [ 1 3 ; 4 2 ].
D’une façon générale, on définit une matrice en donnant la liste de ses éléments entre
crochets. Signalons que matlab admet d’autres façons d’écrire les matrices. Les éléments
d’une ligne de la matrice peuvent être séparés au choix par un blanc ou bien par une virgule
(,). Les lignes quant à elles peuvent être séparées au choix par le point-virgule ( ;) ou par
un retour chariot. Par exemple, on peut aussi écrire la matrice A de la manière suivante,
>> A = [1,3;4,2]
A =
1 3
4 2
>> A = [1 3
4 2]
A =
1 3
4 2
>> A = [1,3
4,2]
A =
1 3
4 2
>>
Un élément d’une matrice est référencé par ses numéros de ligne et de colonne. A(i,j)
désigne le i
e
élément de la j
e
ligne ligne de la matrice A. Ainsi A(2,1) désigne le premier
élément de la deuxième ligne de A,
>> A(2,1)
ans =
4
>>
La commande size permet d’obtenir les dimensions d’une matrice A donnée. On peut
soit obtenir de manière séparée le nombre de lignes et de colonnes par les instructions
Stéphane Balac - Débuter avec matlab 19
size(A,1) et size(A,2) respectivement, soit obtenir le nombre m de lignes et le nombre
n de colonnes par l’instruction [m,n] = size(A).
On peut construire très simplement une matrice « par blocs ». Si A, B, C, D désignent
4 matrices (aux dimensions compatibles), on définit la matrice blocs
K =

A B
C D

par l’instruction K = [ A B ; C D].
Voici un exemple de construction par blocs de la matrice
B =

¸
¸
¸
¸
¸
¸
¸
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
¸

>> A11 = [35 1 6; 3 32 7; 31 9 2];
>> A12 = [26 19; 21 23; 22 27];
>> A21 = [ 8 28 33; 30 5 34];
>> A22 = [17 10; 12 14];
>> B11 = [ A11 A12; A21 A22 ]
B11 =
35 1 6 26 19
3 32 7 21 23
31 9 2 22 27
8 28 33 17 10
30 5 34 12 14
>> B12 = [ 24 25 20 15 16]’;
>> B = [ B11 B12];
>> B21 = [ 4 36 29 13 18 11];
>> B = [ B ; B21]
B =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>>
2.4.2 Matrices spéciales
Certaines matrices se construisent très simplement grâce à des commandes dédiées.
Citons les plus utilisées :
Stéphane Balac - Débuter avec matlab 20
eye(n) : la matrice identité dans R
n,n
ones(m,n) : la matrice à m lignes et n colonnes dont tous les éléments valent 1
zeros(m,n) : la matrice à m lignes et n colonnes dont tous les éléments valent 0
rand(m,n) : une matrice à m lignes et n colonnes dont les éléments sont générés de
manière aléatoire entre 0 et 1
Signalons que si les entiers m et n sont égaux on peut se contenter de ne spécifier qu’une
seule valeur de dimension : ones(n) est la matrice carrée de dimension n dont tous les
éléments valent 1. Mentionnons enfin la commande magic(n) qui permet d’obtenir une
matrice magique de dimension n.
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
>> ones(3,2)
ans =
1 1
1 1
1 1
>> zeros(2)
ans =
0 0
0 0
>> rand(2,3)
ans =
0.4565 0.8214 0.6154
0.0185 0.4447 0.7919
>> magic(6)
ans =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>>
2.4.3 Manipuler des matrices
Le symbole deux-points ( :) permet d’extraire simplement des lignes ou des colonnes
d’une matrice. Le j
e
vecteur colonne de la matrice A est désigné par A( :,j). C’est simple,
il suffit de traduire le symbole deux-points ( :) par « tout ». Ainsi A( :,j) désigne toutes
les lignes et la j
e
colonne de la matrice A. Bien entendu, la i
e
ligne de la matrice A est
désignée par A(i, :).
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(1,:)
ans =
17 24 1 8 15
>> A(:,2)
ans =
24
5
6
12
18
>>
Si l’on souhaite échanger les colonnes 2 et 3 de la matrice A une première possibilité
consiste à exécuter :
Stéphane Balac - Débuter avec matlab 21
>> v = A(:,2); A(:,2) = A(:,3); A(:,3) = v;
A =
17 1 24 8 15
23 7 5 14 16
4 13 6 20 22
10 19 12 21 3
11 25 18 2 9
>>
On peut également extraire plusieurs lignes ou colonnes simultanément. Si J est un
vecteur d’entiers, A( :,J) est la matrice issue de A dont les colonnes sont les colonnes de
la matrice A d’indices contenus dans le vecteur J. De même A(J, :) est la matrice issue
de A dont les lignes sont les lignes de la matrice A d’indices contenus dans le vecteur J.
D’une façon plus générale, il est possible de n’extraire qu’une partie des éléments des
lignes et colonnes d’une matrice. Si L et C sont deux vecteurs d’indices, A(L,C) désigne la
matrice issue de la matrice A dont les éléments sont les A(i,j) tels que i ∈ L et j ∈ C.
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> L = [1 3 5]; C = [3 4];
>> A(L,C)
ans =
1 8
13 20
25 2
>> A(1:2:5,3:4)
ans =
1 8
13 20
25 2
>>
Dans la dernière instruction, on a utilisé la forme spéciale permettant de définir un
vecteur dont les composantes sont en progression arithmétique, voir le paragraphe 2.3.
Une seconde possibilité pour échanger les lignes 2 et 3 de la matrice A consiste à
exécuter :
>> J = [1 3 2 4]; A = A(:,J)
A =
17 1 24 8 15
23 7 5 14 16
4 13 6 20 22
10 19 12 21 3
11 25 18 2 9
Stéphane Balac - Débuter avec matlab 22
>>
Il existe des commandes matlab permettant de manipuler globalement des matrices.
La commande diag permet d’extraire la diagonale d’une matrice : si A est une matrice,
v=diag(A) est le vecteur composé des éléments diagonaux de A. Elle permet aussi de créer
une matrice de diagonale fixée : si v est un vecteur de dimension n, A=diag(v) est la
matrice diagonale dont la diagonale est v.
>> A=eye(3); diag(A)
ans =
1
1
1
>> v=[1:3]
v =
1 2 3
>> diag(v)
ans =
1 0 0
0 2 0
0 0 3
>>
On n’est pas obligé de se limiter à la diagonale principale . . .La commande diag admet
un second paramètre k pour désigner la k
e
sur-diagonale (si k > 0) ou la k
e
sous-diagonale
(si k < 0).
>> A = [4 5 6 7 ; 3 4 5 6
2 3 4 5; 1 2 3 4]
A =
4 5 6 7
3 4 5 6
2 3 4 5
1 2 3 4
>> diag(A,1)
ans =
5
5
5
>> diag(A,-2)
ans =
2
2
>>
On construit à l’aide de la commande diag très simplement des matrices tridiagonales.
Par exemple la matrice correspondant à la discrétisation par différences finies du problème
de Dirichlet en dimension 1 s’obtient ainsi
>> N=5;
>> A=diag(2*ones(N,1)) - diag(ones(N-1,1),1) - diag(ones(N-1,1),-1)
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
>>
On dispose également de la commande tril permet d’obtenir la partie triangulaire
inférieure (l pour lower) d’une matrice. La commande triu permet d’obtenir la partie
triangulaire supérieure (u pour upper) d’une matrice.
Stéphane Balac - Débuter avec matlab 23
>> A = [ 2 1 1 ; -1 2 1 ; -1 -1 2]
A =
2 1 1
-1 2 1
-1 -1 2
>> triu(A)
ans =
2 1 1
0 2 1
0 0 2
>> tril(A)
ans =
2 0 0
-1 2 0
-1 -1 2
>>
Comme pour la commande diag, les commandes triu et tril admettent un second
paramètre k. On peut ainsi obtenir la partie triangulaire supérieure (ou inférieure) à partir
de la k
e
diagonale. Ainsi,
>> tril(A,-1)
ans =
0 0 0
-1 0 0
-1 -1 0
>> tril(A,1)
ans =
2 1 0
-1 2 1
-1 -1 2
>>
On obtient la transposée de la matrice A à coefficients réels en tapant A’. Si la matrice
est à coefficients complexes, A’ retourne la matrice adjointe de A.
>> A = [0 1 2; -1 0 1; -2 -1 0]
A =
0 1 2
-1 0 1
-2 -1 0
>> A’
ans =
0 -1 -2
1 0 -1
2 1 0
2.5 La structure sparse
On appelle matrice creuse (le terme anglais est « sparse matrix ») une matrice compor-
tant une forte proportion de coefficients nuls. De nombreux problèmes issus de la physique
conduisent à l’analyse de systèmes linéaires à matrice creuse. L’intérêt de telles matrices
résulte non seulement de la réduction de la place mémoire (on ne stocke pas les zéros) mais
aussi de la réduction du nombre d’opérations (on n’effectuera pas les opérations portant
sur les zéros). Par défaut dans matlab une matrice est considérée comme pleine (ou « full
» en anglais), c’est-à-dire que tous ses coefficients sont mémorisés. Si M est une matrice, la
commande sparse(M) permet d’obtenir la même matrice mais stockée sous la forme sparse.
Si l’on a une matrice stockée sous la forme sparse, on peut obtenir la même matrice stockée
sous la forme ordinaire par la commande full. Il est possible de visualiser graphiquement
la structure d’une matrice grâce à la commande spy. Si M est une matrice, la commande
spy(M) ouvre une fenêtre graphique et affiche sous forme de croix les éléments non-nuls de
la matrice. Le numéro des lignes est porté sur l’axe des ordonnées, celui des colonnes en
abscisse. On obtient également le nombre d’éléments non-nuls de la matrice. La commande
nnz permet d’obtenir le nombre d’éléments non-nuls d’une matrice.
Stéphane Balac - Débuter avec matlab 24
Reprenons l’exemple de la matrice tridiagonale issue de la discrétisation par différences
finies du problème de Dirichlet en dimension 1.
>> N=5;
>> A=diag(2*ones(N,1)) - diag(ones(N-1,1),1) - diag(ones(N-1,1),-1)
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
>> nnz(A)
ans =
13
>> B = sparse(A)
B =
(1,1) 2
(2,1) -1
(1,2) -1
(2,2) 2
(3,2) -1
(2,3) -1
(3,3) 2
(4,3) -1
(3,4) -1
(4,4) 2
(5,4) -1
(4,5) -1
(5,5) 2
>> whos
Name Size Bytes Class
A 5x5 200 double array
B 5x5 180 sparse array
N 1x1 8 double array
Grand total is 39 elements using 388 bytes
>> spy(A)
>>
Pour les très grosses matrices creuses, il n’est bien entendu pas souhaitable d’utiliser
une structure pleine (full) pour définir la matrice avant de passer en stockage sparse.
La commande sparse permet de définir une matrice creuse directement sous la forme
sparse. On l’utilise de la façon suivante : A = sparse(is,js,s,n,m) pour définir une
matrice A ∈ R
n,m
dont les coefficients sont nuls (et donc non mémorisés) sauf les éléments
a
is(l),js(l)
qui valent s(l) pour l variant de 1 à L longueur du tableau s (L = length(s)).
>> N=5;
Stéphane Balac - Débuter avec matlab 25
Fig. 2 – Résultat de la commande spy(B).
>> s =[2*ones(1,N), -ones(1,N-1), -ones(1,N-1)]
s =
Columns 1 through 12
2 2 2 2 2 -1 -1 -1 -1 -1 -1 -1
Column 13
-1
>> is = [1:N,1:N-1,2:N]
is =
Columns 1 through 12
1 2 3 4 5 1 2 3 4 2 3 4
Column 13
5
>> js = [1:N,2:N,1:N-1]
js =
Columns 1 through 12
1 2 3 4 5 2 3 4 5 1 2 3
Column 13
4
>> B = sparse(is,js,s,N,N)
B =
(1,1) 2
(2,1) -1
(1,2) -1
(2,2) 2
(3,2) -1
(2,3) -1
(3,3) 2
(4,3) -1
(3,4) -1
(4,4) 2
Stéphane Balac - Débuter avec matlab 26
(5,4) -1
(4,5) -1
(5,5) 2
>> A = full(B)
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
>>
Les commandes spdiags, speye et sprand permettent de construire des matrices dia-
gonales, identités et des matrices dont les éléments sont des nombres aléatoires avec un
stockage « sparse ». Elles s’utilisent de la même manière que leur équivalent diag, eye et
rand pour les matrices pleines.
Toutes les mathématiques de première année en un seul volume :
Algèbre et Analyse, Cours de Mathématiques
de Première Année avec Exercices Corrigés
Stéphane Balac, Frédéric Sturm
Collection Sciences Appliquées de l’INSA de Lyon,
Presses Polytechniques et Universitaires Romandes,
Lausanne, 2003 (ISBN: 2-88074-558-6).
http://www.ppur.org
Stéphane Balac - Débuter avec matlab 27
3 Calculer avec matlab
3.1 Les constantes
Les principales constantes sont :
pi : 3.1415926535897
i :

−1
j :

−1
eps : précision numérique relative
realmin : plus petit nombre à virgule flottante manipulable
realmax : plus grand nombre à virgule flottante manipulable
inf : infini. Est obtenu quand on essaie d’évaluer une expression dont le ré-
sultat excède realmax
NaN : not-a-number. Est obtenu quand on essaie d’effectuer une opération non-
définie comme 0/0
Les valeurs des constantes eps, realmin et realmax dépendent de la machine sur laquelle
matlab est installé. Par exemple sur une station SUN Ultra 1 on a eps= 2.2204e − 16,
realmin= 2.2251e −308 et realmax= 1.7977e + 308.
Les noms des constantes n’est pas réservé, c’est-à-dire qu’il est possible de définir des
variables de même nom. Dans ce cas, l’identificateur fera référence à la variable définie
par l’utilisateur et non plus à la constante matlab. On fera attention par exemple, si l’on
utilise le type complex, à ne pas écrire de boucles ayant i ou j comme indices. Pour que
l’identificateur fasse à nouveau référence à la constante matlab, il suffit de supprimer la
variable de même nom de la mémoire par la commande clear.
>> pi = 0; cos(pi)
ans =
1
>> clear pi
>> cos(pi)
ans =
-1
>>
3.2 Opérations et fonctions portant sur les scalaires
Il est bien entendu possible d’utiliser matlab pour faire de simples additions (-:. Si
x et y sont deux variables scalaires de type réel, x+y, x-y, x*y et x/y désignent les 4
opérations usuelles entre les valeurs de x et y dans R. Si x et y sont deux variables scalaires
de type complexe, x+y, x-y, x*y et x/y désignent les 4 opérations usuelles entre les valeurs
de x et y dans C. L’exponentiation s’obtient grâce au symbole ˆ (la syntaxe est xˆy).
La commande rem donne le reste (remainder) de la division entière de deux entiers (la
syntaxe est rem(m,n)). Les commandes lcm(m,n) et gcd(m,n) retournent respectivement
Stéphane Balac - Débuter avec matlab 28
le plus petit multiple commun et le plus grand commun diviseur à deux entiers m et n. La
commande factor(n) permet d’obtenir les termes de la décomposition en facteurs premiers
de l’entier n.
Les fonctions mathématiques incorporées sont :
log(x) : logarithme néperien de x,
log10(x) : logarithme en base 10 de x,
exp(x) : exponentielle de x,
sqrt(x) : racine carrée de x (s’obtient aussi par x.ˆ0.5),
abs(x) : valeur absolue de x,
sign(x) : fonction valant 1 si x est strictement positif, 0 si x est nul et -1 si x est
strictement négatif.
Lorsque la fonction est définie sur C, l’argument peut être de type complexe. On dispose
également de fonctions spécifiques aux complexes :
conj(z) : le conjugué de z,
abs(z) : le module de z,
angle(z) : argument de z,
real(z) : partie réelle de z,
imag(z) : partie imaginaire de z.
Les fonctions d’arrondis sont :
round(x) : entier le plus proche de x,
floor(x) : arrondi par défaut,
ceil(x) : arrondi par excès,
fix(x) : arrondi par défaut un réel positif et par excès un réel négatif.
Les fonctions trigonométriques et hyperboliques sont :
Stéphane Balac - Débuter avec matlab 29
cos : cosinus,
acos : cosinus inverse (arccos),
sin : sinus,
asin : sinus inverse (arcsin),
tan : tangente,
atan : tangente inverse (arctan),
cosh : cosinus hyperbolique (ch),
acosh : cosinus hyperbolique inverse (argch),
sinh : sinus hyperbolique (sh),
asinh : sinus hyperbolique inverse (argsh),
tanh : tangente hyperbolique (th),
atanh : tangente hyperbolique inverse (argth).
3.3 Opérations et fonctions portant sur les vecteurs
Une particularité de matlab est de permettre d’effectuer des opérations de manière
globale sur les éléments d’un vecteur de type réel ou complexe sans avoir à manipuler
directement ses éléments. Si k est une variable scalaire et x un vecteur, l’instruction k*x
multiplie tous les éléments de x par k. Si x et y sont deux vecteurs de longueur identique,
l’instruction z = x+y (respectivement x-y) définit le vecteur z dont les éléments sont z(i)
= x(i) + y(i) (respectivement z(i) = x(i) - y(i)). On obtient un vecteur z dont la
i
e
composante est le produit (respectivement le quotient) de la i
e
composante du vecteur x
par la i
e
composante du vecteur y en effectuant l’instruction z = x.*y (respectivement z
= x./y). Attention à ne pas oublier le point !
La commande cross(x,y) permet de calculer le produit vectoriel des deux vecteurs x
et y. Il n’y a pas de commande dédiée pour calculer le produit scalaire de deux vecteurs.
Il s’obtient grâce à l’instruction sum(x.*y).
Les fonctions mathématiques incorporées décrites au paragraphe 3.2 peuvent être utili-
sées avec un argument qui est un vecteur. La fonction est alors appliquée à tous les éléments
du vecteur en même temps.
>> x = [1:10:100]; y=sqrt(x)
y =
Columns 1 through 7
1.0000 3.3166 4.5826 5.5678 6.4031 7.1414 7.8102
Columns 8 through 10
8.4261 9.0000 9.5394
>>
Il existe également quelques fonctions spécifiques aux vecteurs
2
:
Stéphane Balac - Débuter avec matlab 30
sum(x) : somme des éléments du vecteur x,
prod(x) : produit des éléments du vecteur x,
max(x) : plus grand élément du vecteur x,
min(x) : plus petit élément du vecteur x,
mean(x) : moyenne des éléments du vecteur x,
sort(x) : ordonne les éléments du vecteur x par ordre croissant,
fliplr(x) : renverse l’ordre des éléments du vecteur x.
>> x=[3 1 2];
>> sum(x)
ans =
6
>> prod(x)
ans =
6
>> max(x)
ans =
3
>> min(x)
ans =
1
>> sort(x)
ans =
1 2 3
>> fliplr(x)
ans =
2 1 3
>>
Citons enfin quelques fonctions logiques. Les commandes all
2
et any
2
servent à tester
si les éléments d’un vecteur sont nuls ou non. Si v est un vecteur de valeurs numériques,
all(v) retourne vrai (1) si tous les éléments du vecteur sont différents de 0 et faux (0) si
au moins un élément vaut 0. any(v) retourne vrai (1) si au moins un élément du vecteur
est différent de 0 et faux (0) si le vecteur est composé exclusivement de 0.
3.4 Opérations et fonctions portant sur les matrices
Si les opérandes sont des matrices, les opérations + (addition), - (soustraction), *
(multiplication), ˆ (exponentiation), sont alors les opérations matricielles usuelles. Ainsi
A*B désigne le produit de la matrice A par la matrice B, A+B désigne la somme de ces deux
matrices et Aˆ2 le carré de la matrice A.
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B = [1 1; 2 2; 3 3]
B =
1 1
2 2
3 3
>> C = A*B
C =
14 14
32 32
>> C^2
ans =
644 644
1472 1472
>>
2
Ces commandes peuvent également être utilisées avec une matrice. Dans ce cas la commande porte
sur chaque vecteur colonne de la matrice.
Stéphane Balac - Débuter avec matlab 31
Si les dimensions des matrices A et B sont incompatibles avec l’opération matricielle,
matlab renvoi un message d’erreur :
>> A+B
??? Error using ==> + Matrix dimensions must agree.
>>
En plus des opérations matricielles usuelles, il est possible d’effectuer des opérations
entre matrices «élément par élément». Pour cela, il faut faire précéder l’opérateur d’un
point (.). Ainsi si A et B sont 2 matrices de même dimension, on obtient la matrice dont le
terme d’indices (i, j) est le produit des deux termes d’indices (i, j) des matrices A et B par
la commande A.*B. De même la commande A.ˆ2 fournit la matrice dont les termes sont
les carrés des termes de la matrice A. Bien entendu les commandes A.+B et A+B donnent le
même résultat.
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B=[1 2 3; 1 2 3]
B =
1 2 3
1 2 3
>> A.*B
ans =
1 4 9
4 10 18
>> A.^2
ans =
1 4 9
16 25 36
>>
Les fonctions matricielles les plus courantes sont :
Stéphane Balac - Débuter avec matlab 32
det(A) : renvoie le déterminant de la matrice carrée A.
eig(A) : renvoie les valeurs propres (eigenvalues) de la matrice carrée A. Si l’on
souhaite également les vecteurs propres on exécutera [V,D] = eig(A)
qui renvoie une matrice diagonale D formée des valeurs propres de A
et une matrice V dont les vecteurs colonnes sont les vecteurs propres
correspondant.
poly(A) : renvoie les coefficients du polynôme caractéristique associé à la matrice
carrée A. On sera vigilant à l’ordre dans lequel sont rangés les coefficients :
le premier élément du vecteur est le coefficient du monôme de plus haut
degré. Ainsi dans l’exemple suivant il faut lire p(λ) = λ
3
−6λ
2
−72λ−27,
>> A = [1 2 3 ; 4 5 6 ; 7 8 0]; p = poly(A)
p =
1 -6 -72 -27
inv(A) : renvoie l’inverse de la matrice carrée A.
rank(A) : renvoie le rang de la matrice carrée A.
trace(A) : renvoie la trace de la matrice A.
expm(A) : renvoie l’exponentielle matricielle de A.
On peut obtenir les différentes normes d’une matrice A grâce à la commande norm.
norm(A) : renvoie la norme 2 de la matrice A.
norm(A,2) : même chose que norm(A).
norm(A,1) : norme 1 de la matrice A, A
1
= max
1≤j≤n
¸
1≤i≤n
|a
ij
| .
norm(A,inf) : norme infini de la matrice A, A

= max
1≤i≤n
¸
1≤j≤n
|a
ij
| .
norm(A,’fro’) : norme de Frobenius de la matrice A, A
fro
=

¸
1≤i,j≤n
|a
ij
|
2
.
Ces fonctions matricielles incorporée de matlab peuvent être utilisées avec un argu-
ment qui est une matrice « sparse ». Les exceptions sont les fonctions rank, expm et norm qui
nécessitent de passer en stockage full (on exécutera donc rank(full(B)) par exemple).
3.5 Résolution de systèmes linéaires
La commande matlab \ (backslash) est la commande générique pour résoudre un
système linéaire. L’algorithme mis en œuvre dépend de la structure de la matrice A du
système. matlab utilise dans l’ordre les méthodes suivantes :
– Si A est une matrice triangulaire, le système est résolu par simple substitution.
– Si la matrice A est symétrique ou hermitienne, définie positive, la résolution est
effectuée par la méthode de Choleski.
– Si A est une matrice carrée mais n’entrant pas dans les deux cas précédents, une
Stéphane Balac - Débuter avec matlab 33
factorisation LU est réalisée en utilisant la méthode d’élimination de Gauss avec
stratégie de pivot partiel.
– Si A n’est pas une matrice carrée, la méthode QR est utilisée.
Dans le cas des matrices stockées sous forme sparse, des algorithmes particuliers sont
mis en œuvre. Chacune des méthodes précédentes peut être utilisée de manière spécifique
grâce aux commandes chol, lu, qr. Il est également possible d’utiliser des méthodes itéra-
tives. Les commandes cgs, bicg, bicgstab mettent par exemple en œuvre des méthodes
de type gradient conjugué.
>> A=[1 2 ;3 4]; b=[1 1]’;
>> x= A\b
x =
-1
1
>> A*x
ans =
1
1
>>
3.6 Les polynômes
Sous matlab le polynôme de degré n, p(x) = a
n
x
n
+ a
n−1
x
n−1
+ · · · + a
1
x + a
0
est
défini par un vecteur p de dimension n+1 contenant les coefficients {a
i
}
i=0,...,n
rangés dans
l’ordre décroissant des indices. C’est-à-dire que l’on a p(1) = a_n, . . ., p(n+1) = a_0.
La commande polyval permet d’évaluer le polynôme p (la fonction polynômiale) en
des points donnés. La syntaxe est polyval(p,x) où x est une valeur numérique ou un
vecteur. Dans le second cas on obtient un vecteur contenant les valeurs de la fonction
polynômiale aux différents points spécifiés dans le vecteur x. Utilisée avec la commande
fplot, la commande polyval permet de tracer le graphe de la fonction polynômiale sur
un intervalle [x
min
, x
max
] donné. La syntaxe de l’instruction est
fplot(’polyval([ a_n, ..., a_0] , x)’ , [x_min , x_max]).
Voici par exemple comment définir le polynôme p(x) = x
2
−1. Le graphe de la fonction
polynômiale est présenté à la figure 3.
>> p = [ 1, 0, -1];
>> polyval(p,0)
ans =
-1
>> polyval(p,[-2,-1,0,1,2])
ans =
3 0 -1 0 3
>> fplot(’polyval([ 1, 0, -1] , x)’ , [-3,3]), grid
>>
On obtient les racines du polynôme p grâce à l’instruction roots(p).
Stéphane Balac - Débuter avec matlab 34
−3 −2 −1 0 1 2 3
−1
0
1
2
3
4
5
6
7
8
Fig. 3 – Graphe de la fonction polynômiale p(x) = x
2
−1.
L’instruction poly permet d’obtenir la représentation canonique p(x) = a
n
x
n
+a
n−1
x
n−1
+
· · · + a
1
x + a
0
d’un polynôme de degré n dont on connait les n racines {x
i
}
i=1,...,n
. Les
coefficients {a
i
}
i=0,...,n
sont obtenus sous forme d’un vecteur p et sont rangés dans l’ordre
décroissant des indices. C’est-à-dire que p(1) = a_n, . . ., p(n+1) = a_0.
>> r = roots(p)
r =
-1.0000
1.0000
>> poly(r)
ans =
1.0000 0.0000 -1.0000
>>
Stéphane Balac - Débuter avec matlab 35
4 Les entrées-sorties
4.1 Les formats d’affichage des réels
matlab dispose de plusieurs formats d’affichage des réels. Par défaut le format est le
format court à 5 chiffres. Les autres principaux formats sont :
format long : format long à 15 chiffres.
format short e : format court à 5 chiffres avec notation en virgule flottante.
format long e : format long à 15 chiffres avec notation en virgule flottante.
matlab dispose également des formats format short g et format long g qui utilise la
« meilleure » des deux écritures à virgule fixe ou à virgule flottante. On obtiendra tous les
formats d’affichage possibles en tapant help format.
On impose un format d’affichage en tapant l’instruction de format correspondante dans
la fenêtre de contrôle, par exemple format long. Pour revenir au format par défaut on
utilise la commande format ou format short.
>> pi
ans =
3.1416
>> format long
>> pi
ans =
3.14159265358979
>> format short e
>> pi^3
ans =
3.1006e+01
>> format short g
>> pi^3
ans =
31.006
>> format short
>>
4.2 Affichage simple, la commande disp
La commande disp permet d’afficher un tableau de valeurs numériques ou de carac-
tères. L’autre façon d’afficher un tableau est de taper son nom. La commande disp se
contente d’afficher le tableau sans écrire le nom de la variable ce qui peut améliorer cer-
taines présentations.
>> A = magic(4);
>> disp(A)
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A
A =
16 2 3 13
5 11 10 8
9 7 6 12
Stéphane Balac - Débuter avec matlab 36
4 14 15 1
>>
On utilise fréquemment la commande disp avec un tableau qui est une chaîne de
caractères pour afficher un message. Par exemple disp(’Calcul du déterminant de la
matrice A’). On utilise également la commande disp pour afficher un résultat. Par
exemple disp([’Le déterminant de la matrice A vaut ’, num2str(det(A))]). On re-
marque que l’usage de la commande disp est alors un peu particulier. En effet un tableau
doit être d’un type donné, les éléments d’un même tableau ne peuvent donc être des chaînes
de caractères et des valeurs numériques. On a donc recours à la commande num2str («
number to string ») pour convertir une valeur numérique en une chaîne de caractères. Par
défaut la commande num2str affiche 4 décimales mais il est possible de lui spécifier le
nombre de décimales souhaité en second paramètre. De même il est possible de lui spécifier
un format d’affichage particulier de la valeur numérique ; on consultera la documentation
matlab pour plus de détails. Attention, si la chaîne de caractères contient une apostrophe
il est impératif de doubler l’apostrophe.
4.3 Lecture
La commande input permet de demander à l’utilisateur d’un programme de fournir
des données. La syntaxe est var = input(’ une phrase ’). La phrase une phrase est
affichée et matlab attend que l’utilisateur saisisse une donnée au clavier. Cette donnée
peut être une valeur numérique ou une instruction matlab. Un retour chariot provoque
la fin de la saisie. Une valeur numérique est directement affectée à la variable var tandis
qu’une instruction matlab est évaluée et le résultat est affecté à la variable var. Il est
possible de provoquer des sauts de ligne pour aérer le présentation en utilisant le symbole
\n de la manière suivante : var = input(’ \n une phrase : \n ’). Pensez à mettre un
point virgule ( ;) à la fin de l’instruction si vous ne souhaitez pas voir s’afficher var = .
Sous cette forme il est impossible d’avoir une donnée de type chaîne de caractères dans
la mesure où matlab essaie d’interpréter cette chaîne de caractères comme une instruction.
Si l’on souhaite saisir une réponse de type chaîne de caractères on utilise la syntaxe var =
input(’ une phrase ’,’s’). Signalons qu’un retour chariot (sans autre chose) initialise
la variable var au tableau vide []. Voici un exemple d’utilisation de la commande input
(on suppose que la variable res contient une valeur numérique).
rep = input(’ Affichage du resultat ? o/n [o] ’,’s’);
if isempty(rep), rep = ’o’; end
if rep == ’o’ | rep == ’y’
disp([’Le resultat vaut ’, num2str(res)])
end
4.4 Impressions dirigées par format
La commande sprintf permet l’impression de variables selon un modèle donné. Un
modèle d’édition se présente sous la forme du symbole pourcent (%) suivi d’indications
permettant de composer le contenu du champ à imprimer, en particulier sa longueur en
nombre de caractères. Le modèle d’édition utilisé par matlab est le modèle d’édition du
langage C.
Stéphane Balac - Débuter avec matlab 37
La syntaxe de la commande sprintf est :
sprintf(format, variables)

– variables est le nom des variables à imprimer suivant le modèle d’édition spécifié
dans format ;
– format est le format d’édition. Il s’agit d’une chaîne de caractères contenant les
modèles d’éditions des variables à imprimer.
Modèle d’édition de caractères
Un modèle d’édition de caractères est de la forme %Ls où % est le symbole de début
de format et s le symbole précisant que la donnée est de type chaîne de caractères. L est
un entier donnant la longueur total du champ (en nombre de caractères). Par défaut le
champ est justifié à droite (si la longueur de la chaîne de caractères est plus petite que la
longueur L du champ, des espaces sont insérés avant la chaîne de caractères). Le symbole
− (moins) juste après le symbole % permet de justifier à gauche. En l’absence de l’entier
L la longueur totale du champ est égale au nombre de caractères de la chaîne.
>> sprintf(’%s’, ’il fera beau a Brest’)
ans =
il fera beau a Brest
>> temps = ’il fera beau a Brest’; sprintf(’%s’,temps)
ans =
il fera beau a Brest
>> sprintf(’%30s’, temps)
ans =
il fera beau a Brest
>> sprintf(’%-30s’, temps)
ans =
il fera beau a Brest
>> sprintf(’meteo : %s’, temps)
ans =
meteo : il fera beau a Brest
>>
Modèle d’édition des réels
Un modèle d’édition de réel est de la forme %±L.Dt, où % est le symbole de début de
format, L est un entier donnant la longueur total du champ (en nombre de caractères, point
virgule compris), D est le nombre de décimales à afficher et t spécifie le type de notation
utilisée. Par défaut le champ est justifié à droite (si la longueur de la variable est plus petite
que la longueur du champ L, des espaces sont insérés à gauche). Le symbole − (moins)
permet de justifier à gauche. Le symbole + (plus) provoque l’affichage systématique d’un
signe + devant les réels positifs.
Les principales valeurs possibles pour t sont les suivantes :
Stéphane Balac - Débuter avec matlab 38
d : pour les entiers
e : pour une notation à virgule flottante où la partie exposant est délimitée
par un e minuscule (ex : 3.1415e+00)
E : même notation mais E remplace e (ex : 3.1415E+00)
f : pour une notation à virgule fixe (ex : 3.1415)
g : la notation la plus compacte entre la notation à virgule flottante et la
notation à virgule fixe est utilisée
>> x = pi/3; y = sin(x);
>> sprintf(’sin(%8.6f) = %4.2f’, x,y)
ans =
sin(1.047198) = 0.87
>> sprintf(’sin(%8.6f) = %4.2E’, x,y)
ans =
exp(1.047198) = 8.66E-01
>>
Utilisations particulières
La commande sprintf est « vectorielle » : si la variable n’est pas scalaire le format
d’impression est réutilisé pour tous les éléments du tableau, colonne par colonne.
>> x = [1:10];
>> sprintf(’ %d ,’,x)
ans =
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,
>>
Il est possible d’utiliser les symboles suivant dans les chaînes de caractères
\n : provoque le passage à une nouvelle ligne
\t : insère une tabulation horizontale
\b : décale l’impression du champ suivant d’un caractère vers la gauche
\r : saut horizontal
>> z =[]; x = [1:10]; for i=1:length(x), z = [z ,x(i), log(x(i))]; end;
>> s = sprintf(’%4.1f | %8.6E \n ’, z )
ans =
1.0 | 0.000000E+00
2.0 | 6.931472E-01
3.0 | 1.098612E+00
4.0 | 1.386294E+00
5.0 | 1.609438E+00
6.0 | 1.791759E+00
7.0 | 1.945910E+00
Stéphane Balac - Débuter avec matlab 39
8.0 | 2.079442E+00
9.0 | 2.197225E+00
10.0 | 2.302585E+00
>>
Si l’on a besoin d’afficher le caractère %, on le doublera %% pour qu’il ne soit pas
interprété comme le début d’un format.
La commande fprintf est l’analogue de sprintf pour imprimer de variables selon un
modèle donné dans un fichier.
Stéphane Balac - Débuter avec matlab 40
5 Programmer sous matlab
5.1 Scripts et fonctions
Il est possible d’enregistrer une séquence d’instructions dans un fichier (appelé un «
M-file ») et de les faire exécuter par matlab. Un tel fichier doit obligatoirement avoir une
extension de la forme .m (d’où le nom M-file) pour être considéré par matlab comme un
fichier d’instructions. On distingue 2 types de M-file, les fichiers de scripts et les fichiers de
fonctions. Un script est un ensemble d’instructions matlab qui joue le rôle de programme
principal. Si le script est écrit dans le fichier de nom nom.m on l’exécute dans la fenêtre
matlab en tapant nom. Même si l’on ne souhaite pas à proprement parler écrire de pro-
gramme, utiliser un script est très utile. Il est en effet beaucoup plus simple de modifier
des instructions dans un fichier à l’aide d’un éditeur de texte que de retaper un ensemble
d’instructions matlab dans la fenêtre de commande.
Les fichiers de fonctions ont deux rôles. Ils permettent à l’utilisateur de définir des
fonctions qui ne figurent pas parmi les fonctions matlab incorporées (« built-in functions
») et de les utiliser de la même manière que ces dernières (ces fonctions sont nommées «
fonctions utilisateur »). Ils sont également un élément important dans la programmation
d’applications où les fonctions jouent le rôle des fonctions et procédures des langages de
programmation usuels.
On définit la fonction fonc de la manière suivante :
function [vars
1
, . . . , vars
n
] = fonc(vare
1
, . . . , vare
m
)
séquence d’instructions

– vars
1
, . . . , vars
n
sont les variables de sortie de la fonction;
– vare
1
, . . . , vare
m
sont les variables d’entrée de la fonction;
– séquence d’instructions est le corps de la fonction.
Le fichier doit impérativement commencer par le mot-clé function. Suit entre crochets les
variables de sortie de la fonction, le symbole =, le nom de la fonction et enfin les variables
d’entrée entre parenthèses. Si la fonction ne possède qu’une seule variable de sortie, les
crochets sont inutiles. Il est impératif que la fonction ayant pour nom fonc soit enregistrée
dans un fichier de nom fonc.m sans quoi cette fonction ne sera pas « visible » par matlab.
Dans l’exemple qui suit, on définit une fonction modulo qui calcule la valeur de a modulo
n en prenant pour système de résidus 1, · · · , n au lieu de 0, · · · , n −1 (système de résidus
considéré par la fonction incorporée mod). Les lignes qui suivent doivent être enregistrées
dans un fichier de nom modulo.m.
function [r,q] = modulo(a,n)
% Calcule la valeur de a modulo n en prenant pour systeme de residus
% 1, ... , n au lieu de 0, ... , n-1.
%
% appel : [r,q] = modulo(a,n)
%
% Arguments de sortie :
% r : le residu
% q : le quotient
Stéphane Balac - Débuter avec matlab 41
q = floor(a./n);
r = a - n*q;
% si le reste de la division entiere vaut 0, le residu vaut par convention n
if r == 0, r = n; end
Les lignes précédées du symbole % sont des lignes de commentaire. Les lignes de com-
mentaire situées entre la ligne function ... et la 1
re
ligne d’instructions sont affichées si
l’on demande de l’aide sur la fonction modulo.
>> help modulo
Calcule la valeur de a modulo n en prenant pour systeme de residus
1, ... , n au lieu de 0, ... , n-1.
appel : [r,q] = modulo(a,n)
Arguments de sortie :
r : le residu
q : le quotient
>>
L’appel d’une fonction utilisateur s’effectue de la même façon que l’appel de n’importe
quelle fonction matlab :
>> b = 10 ; m = 4;
>> [r,q] = modulo(b,m)
r =
2
q =
2
>> modulo(10,5)
ans =
5
>>
Remarques :
Il n’y a pas de mot-clé (par exemple end) pour indiquer la fin de la fonction. La
fonction est supposée se terminer à la fin du fichier. Il est toutefois possible de
provoquer un retour au programme appelant dans le corps de la fonction grâce à la
commande return.
On ne peut écrire qu’une seule fonction par fichier (qui doit porter le nom de cette
fonction). Toutefois dans la version 5 de matlab existe la notion de « sous-fonction ».
Une sous-fonction est une fonction écrite dans le même fichier qu’une autre fonction
Stéphane Balac - Débuter avec matlab 42
(dite principale) et qui ne sera utilisable que par cette fonction principale (une sous-
fonction ne peut pas être appelée par un autre sous-programme que la fonction
principale).
Si le fichier ne commence pas par le mot-clé function on a tout simplement écrit un
script !
La gestion des variables d’entrée et de sortie est très souple sous matlab. Si l’on
n’est intéressé que par le résidu et pas par le quotient, on peut se contenter de ne mettre
qu’une seule variable de sortie, v = modulo(10,4). Dans cet appel la variable v contiendra
le résidu (la première variable de sortie). Par contre, même si l’on ne souhaite recueillir
que le quotient, on est obligé d’effectuer un appel de la forme [r,q] = modulo(10,4) et
donc de définir une variable inutile. Aussi, d’une manière générale, il est bon de ranger
les variables de sortie par ordre « d’importance ». Il est également possible d’appeler une
fonction donnée avec moins de variables d’entrée que le nombre indiqué pour la définition
de la fonction (il faut bien entendu que le corps de la fonction soit programmé de sorte de
prévoir cette éventualité). Il existe deux fonctions matlab utiles pour gérer cette situation :
nargin qui retourne le nombre de variables d’entrée utilisés lors de l’appel et nargout qui
retourne le nombre de variables de sortie prévues lors de l’appel. Voici un petit exemple
venant illustrer ces possibilités.
function [A,rang] = matale(T,m,n)
% Construit une matrice A de m lignes et n colonnes ayant des elements
% entiers generes de maniere aleatoire entre 0 et T.
% Calcule le rang de la matrice si l’appel est effectue avec 2 arguments
% de sortie.
% Si la matrice est carree, le parametre n peut etre omis.
%
% Appels:
% [A,r] = Matale(T,m,n)
% [A,r] = Matale(T,m)
% A = Matale(T,m,n)
% A = Matale(T,m)
if nargin == 2
A = fix(T*rand(m));
else
A = fix(T*rand(m,n));
end
if nargout == 2
rang = rank(A);
end
Dans cet exemple, on gère les variables d’entrée de la fonction de sorte de ne pas avoir
besoin de donner lors de l’appel le nombre de lignes et de colonnes si la matrice est carrée.
On gère aussi les variables de sortie afin de ne pas calculer le rang de la matrice si aucune
variable de sortie pour le résultat n’est prévue lors de l’appel.
Stéphane Balac - Débuter avec matlab 43
>> [A,r] = matale(20,3,4)
A =
16 13 13 10
10 16 7 14
4 0 16 8
r =
3
>> [A,r] = matale(20,3)
A =
12 0 18
5 14 9
3 8 8
r =
3
>> A = matale(20,3)
A =
8 7 2
17 16 4
1 0 3
>>
Un point important concerne la gestion des variables entre le programme principal (ou
le workspace) et les fonctions de l’utilisateur. Toutes les variables définies à l’intérieur d’une
fonction sont des variables locales à cette fonction. La communication avec des variables
du programme principal (ou du « workspace ») ou avec des variables d’autres fonctions se
fait uniquement par les variables d’entrée et sortie de la fonction. Une alternative existe
toutefois : il est possible de déclarer certaines variables comme des variables globales. Une
variable globale peut être partagée entre un programme principal et plusieurs fonctions sans
qu’il soit besoin de la spécifier parmi les variables d’entrée-sortie des différentes fonctions.
On déclare une variable globale grâce au mot clé global. Par exemple pour déclarer la
variable numex globale on écrit global numex. Attention, la déclaration global numex
doit être reprise dans chaque fonction utilisant numex comme variable.
5.2 Opérateurs de comparaison et opérateurs logiques
Les opérateurs de comparaison sont :
== : égal à (x == y)
> : strictement plus grand que (x >y)
< : strictement plus petit que (x <y)
> = : plus grand ou égal à (x ≥ y)
< = : plus petit ou égal à (x ≤ y)
˜= : différent de (x ˜= y)
Les opérateurs logiques sont :
& : et (x & y)
| : ou (x | y)
˜ : non (˜ x)
Les opérateurs de comparaison et les opérateurs logiques sont utilisés essentiellement dans
les instructions de contrôle, voir le paragraphe 5.3.
Stéphane Balac - Débuter avec matlab 44
5.3 Instructions de contrôle
Les instructions de contrôle sous matlab sont très proches de celles existant dans
d’autres langages de programmation.
5.3.1 Boucle FOR : parcours d’un intervalle
Une première possibilité pour exécuter une séquence d’instructions de manière répétée
consiste à effectuer une boucle pour les valeurs d’un indice, incrémenté à chaque itération,
variant entre deux bornes données. Ce processus est mis en œuvre par la « boucle for ».
Syntaxe :
for indice = borne_inf : borne_sup
séquence d’instructions
end

– indice est une variable appelée l’indice de la boucle ;
– borne_inf et borne_sup sont deux constantes réelles (appelées paramètres de la
boucle) ;
– séquence d’instructions est le traitement à effectuer pour les valeurs d’indices variant
entre borne_inf et borne_sup avec un incrément de 1. On parle du corps de la
boucle.
Interprétation :
Si borne_inf est plus petit ou égal à borne_sup, le traitement séquence d’instructions
est exécuté (borne_sup −borne_inf + 1) fois, pour les valeurs de la variable indice égales
à borne_inf, borne_inf + 1, · · · , borne_sup − 1, borne_sup. Si borne_inf est strictement
plus grand que borne_sup, on passe à l’instruction qui suit immédiatement l’instruction
de fin de boucle (end).
Remarque :
L’indice de boucle ne prend pas nécessairement des valeurs entières. D’autre part il n’est
pas nécessaire que l’indice de la boucle apparaisse dans le corps de la boucle ; par contre il
est interdit de modifier sa valeur s’il apparaît. Il est possible d’imbriquer des boucles mais
elles ne doivent pas se recouvrir. On peut utiliser un incrément (pas) autre que 1 (valeur
par défaut). La syntaxe est alors borne_inf : pas : borne_sup. Le pas peut être négatif.
Attention a bien gérer la borne supérieure ! Voici un exemple (idiot) venant illustrer les
possibilités de variations de l’indice de la boucle
>> for r=1.1:-0.1:0.75
disp([’r = ’, num2str(r)]);
end
r = 1.1
r = 1
r = 0.9
r = 0.8
>>
Stéphane Balac - Débuter avec matlab 45
Voici un exemple d’utilisation d’une boucle pour calculer n!
3
>> n = 4;
>> nfac = 1;
>> for k = 1:n
nfac = nfac*k;
end
>> nfac
nfac =
24
>>
5.3.2 Boucle WHILE : tant que . . . faire
Une seconde possibilité pour exécuter une séquence d’instructions de manière répétée
consiste à effectuer une boucle tant qu’une condition reste vérifiée. On arrête de boucler
dès que cette condition n’est plus satisfaite. Ce processus est mis en œuvre par la « boucle
while ».
Syntaxe :
while expression logique
séquence d’instructions
end

– expression logique est une expression dont le résultat peut être vrai ou faux ;
– séquence d’instructions est le traitement à effectuer tant que expression logique est
vraie.
Interprétation :
Tant que expression logique est vraie le traitement séquence d’instructions est exécuté sous
forme d’une boucle. Lorsque expression logique devient faux, on passe à l’instruction qui
suit immédiatement l’instruction de fin de boucle (end).
Remarque :
expression logique est en général le résultat d’un test (par exemple i < Imax) ou le ré-
sultat d’une fonction logique (par exemple all(x)). Il est impératif que le traitement de
la séquence d’instructions agisse sur le résultat de expression logique sans quoi on boucle
indéfiniment (-:.
Voici comment calculer n!
3
avec une boucle while :
>> n = 4;
>> k = 1; nfac = 1;
Stéphane Balac - Débuter avec matlab 46
>> while k <= n
nfac = nfac*k;
k = k+1;
end
>> nfac
nfac =
24
>>
5.3.3 L’instruction conditionnée IF
On a parfois besoin d’exécuter une séquence d’instructions seulement dans le cas où
une condition donnée est vérifiée au préalable. Différentes formes d’instruction conditionnée
existent sous matlab.
L’instruction conditionnée la plus simple a la forme suivante :
Syntaxe :
if expression logique
séquence d’instructions
end

– expression logique est une expression dont le résultat peut être vrai ou faux ;
– séquence d’instructions est le traitement à effectuer si expression logique est vraie.
Interprétation :
la séquence d’instructions n’est exécutée que si le résultat de l’évaluation de l’expression
logique est vraie (c’est-à-dire vaut 1). Dans le cas contraire on exécute l’instruction qui
suit le mot clé end. Dans le cas où l’expression logique est vraie, après exécution de la
séquence d’instructions on reprend le programme à l’instruction qui suit le mot clé end.
Remarque :
Contrairement à certains langages de programmation, il n’y a pas de mot clé « then » dans
cette instruction conditionnée. Notez également que la marque de fin de bloc conditionné
est le mot clé end et non pas « endif ».
Il existe une séquence conditionnée sous forme d’alternatives :
Syntaxe :
if expression logique
séquence d’instructions 1
else
séquence d’instructions 2
3
Le lecteur attentif sait calculer n! plus simplement . . .Comme par exemple en exécutant prod([1 :n])
Stéphane Balac - Débuter avec matlab 47
end

– expression logique est une expression dont le résultat peut être vrai ou faux ;
– séquence d’instructions 1 est la séquence d’instructions à exécuter dans le cas où
expression logique est vraie et séquence d’instructions 2 est la séquence d’instructions
à exécuter dans le cas où expression logique est faux.
Interprétation :
Si expression logique est vraie la séquence d’instructions 1 est exécutée, sinon c’est la
séquence d’instructions 2 qui est exécutée. Le déroulement du programme reprend ensuite
à la première instruction suivant le mot clé end.
Il est bien entendu possible d’imbriquer des séquences d’instructions conditionnées (au
sens où la séquence d’instruction conditionnée contient des séquences d’instructions condi-
tionnée). Pour une meilleure lisibilité, il est recommandé d’utiliser des indentations afin de
mettre en évidence l’imbrication des séquences d’instructions conditionnées.
Il est possible d’effectuer un choix en cascade :
Syntaxe :
if expression logique 1
séquence d’instructions 1
elseif expression logique 2
séquence d’instructions 2
.
.
.
elseif expression logique N
séquence d’instructions N
else
séquence d’instructions par défaut
end
Interprétation :
Si expression logique 1 est vraie la séquence d’instructions 1 est exécutée et le programme
reprend ensuite à la première instruction suivant le mot clé end, sinon si expression logique
2 est vraie la séquence d’instructions 2 est exécutée et le programme reprend ensuite à la
première instruction suivant le mot clé end, etc. Si aucune des expressions logiques 1 à N
n’est vraie alors séquence d’instructions par défaut est exécutée.
Remarque :
Attention à ne pas laisser d’espace entre else et if ; le mot clé est elseif.
Stéphane Balac - Débuter avec matlab 48
On utilise fréquemment un choix en cascade lors d’initialisation de données. Par exemple,
on initialise une matrice A en fonction de la valeur d’une variable numex (numéro d’exemple)
de la manière suivante :
if numex == 1
A = ones(n);
elseif numex == 2
A = magic(n);
elseif numex == 3 | numex == 4
A = rand(n);
else
error(’numero d’’exemple non prevu ...’);
end
5.3.4 Choix ventilé, l’instruction switch
Une alternative à l’utilisation d’une séquence d’instructions conditionnées pour effec-
tuer un choix en cascade existe. Il s’agit de l’instruction switch.
Syntaxe :
switch var
case cst_1 ,
séquence d’instructions 1
case cst_2 ,
séquence d’instructions 2
.
.
.
case cst_N ,
séquence d’instructions N
otherwise
séquence d’instructions par défaut
end

– var est une variable numérique ou une variable chaîne de caractères ;
– cst_1, . . ., cst_N, sont des constantes numérique ou des constantes chaîne de carac-
tères ;
– séquence d’instructions i est la séquence d’instructions à exécuter si var==cst_i.
Interprétation :
Si la variable var est égale à l’une des constantes cst_1, . . ., cst_N, (par exemple cst_i)
alors la séquence d’instructions correspondante (ici séquence d’instructions i) est exécutée.
Le programme reprend ensuite à la première instruction suivant le mot-clé end. Si la
Stéphane Balac - Débuter avec matlab 49
variable var n’est égale à aucune des constantes la séquence d’instructions par défaut est
exécutée.
Remarque :
La variable var doit bien entendu être du même type que les constantes cst_1, . . ., cst_N.
Il n’est pas nécessaire de prévoir un cas par défaut (bien que cela soit préférable). S’il n’y
a pas de cas par défaut et si la variable var n’est égale à aucune des constantes cst_1, . . .,
cst_N, alors le programme continue à la première instruction suivant le mot-clé end.
Si la séquence d’instructions à exécuter est la même pour différents cas il est possible de
les regrouper. La syntaxe est alors,
case { cst_k , cst_l , ...}
séquence d’instructions commune
Reprenons l’exemple où l’on souhaite initialiser une matrice A en fonction de la valeur
prise par une variable numérique numex (numéro d’exemple). En utilisant un choix ventilé
on obtient :
switch numex
case 1,
A = ones(n)
case 2,
A = magic(n);
case {3,4},
A = rand(n);
otherwise
error(’numero d’’exemple non prevu ...’);
end
Voici un exemple de choix ventilé portant sur une variable de type chaîne de caractères.
rep = input(’Votre reponse (oui, non, chepas) :’);
switch rep
case {’oui’,’o’},
disp(’bravo ...’);
case {’non’,’n’}
disp(’perdu ...’);
case ’chepas’
disp(’c’’est pourtant facile ...’);
end
Stéphane Balac - Débuter avec matlab 50
5.3.5 Interruption d’une boucle de contrôle
Il est possible de provoquer une sortie prématurée d’une boucle de contrôle. L’instruc-
tion break permet de sortir d’une boucle for ou d’une boucle while. L’exécution se poursuit
alors séquentiellement à partir de l’instruction suivant le mot clé end fermant la boucle.
En cas de boucles imbriquées, on interrompt seulement l’exécution de la boucle intérieure
contenant l’instruction break.
L’instruction return provoque un retour au programme appelant (ou au clavier). Les
instructions suivant le return ne sont donc pas exécutées. L’instruction return est souvent
utilisée conjointement avec une instruction conditionnée par exemple pour tester dans le
corps d’une fonction si les paramètres d’entrée ont les valeurs attendues.
L’instruction error permet d’arrêter un programme et d’afficher un message d’erreur.
La syntaxe est error(’ message d”erreur ’). L’instruction warning permet d’afficher
un message de mise en garde sans suspendre l’exécution du programme. La syntaxe est
warning(’ message de mise en garde ’). Il est possible d’indiquer à matlab de ne
pas afficher les messages de mise en garde d’un programme en tapant warning off dans
la fenêtre de commandes. On rétablit l’affichage en tapant warning on.
On peut ainsi améliorer la fonction matale de la manière suivante :
function [A,rang] = matale(T,m,n)
% Construit une matrice A de m lignes et n colonnes ayant des elements
% entiers generes de maniere aleatoire entre 0 et T.
% Calcule le rang de la matrice si l’appel est effectue avec 2 arguments
% de sortie.
% Si la matrice est carree, le parametre n peut etre omis.
%
% Appels:
% [A,r] = Matale(T,m,n)
% [A,r] = Matale(T,m)
% A = Matale(T,m,n)
% A = Matale(T,m)
% si la fonction est appelee avec un nombre d’arguments d’entree
% different de 2 ou 3, on arrete tout ...
if nargin ~= 2 & nargin ~= 3,
error(’ La fonction matale doit avoir 2 ou 3 arguments d’’entree ’);
end
if nargin == 2
A = fix(T*rand(m));
else
A = fix(T*rand(m,n));
end
if nargout == 2
rang = rank(A);
if nargin == 2,
rangx = m;
else
Stéphane Balac - Débuter avec matlab 51
rangx = min([m,n]);
end
if rang ~= rangx, warning(’ Le rang n’’est pas maximum ’); end;
end
On obtient alors les messages suivants :
>> A = matale(3);
??? Error using ==> matale
La fonction matale doit avoir 2 ou 3 arguments d’entree
>> A = matale(20,3)
A =
8 18 8
12 14 18
15 3 18
>> [A,r] = matale(20,3)
Warning: Le rang n’est pas maximum
> In /home0/maths/balac/DOCMATLAB/matale.m at line 34
A =
1 4 3
10 15 11
3 12 9
r =
2
>>
La commande pause permet d’interrompre l’exécution du programme. L’exécution nor-
male reprend dès que l’utilisateur enfonce une touche du clavier. L’instruction pause(n)
suspend l’exécution du programme pendant n secondes.
5.4 Un exemple complet
Une technique de construction de carrés magiques d’ordre impair a été proposée par
Manuel Moschopoulos au début du XIV
e
siècle. Cette technique est décrite dans [1].
Notons l(x) le numéro de la ligne et c(x) le numéro de la colonne du carré sur lequel se
trouve l’entier x. Partant d’un carré d’ordre impair n = 2k + 1, la technique de Moscho-
poulos peut se formuler comme suit :
- Initialisation de l’algorithme en plaçant l’unité dans la case immédiatement au dessous de
la case centrale, autrement dit à l’intersection de la (k +1)
e
colonne et de la (k +2)
e
ligne :
l(1) = k + 2;
c(1) = k + 1.
- Connaissant la position (l(x), c(x)) de l’entier x, on place l’entier x + 1 suivant les règles
suivantes :
Stéphane Balac - Débuter avec matlab 52
si x n’est pas un multiple de n, alors
l(x + 1) = 1 + l(x) ( modulo n),
c(x + 1) = 1 + c(x) ( modulo n);
si x est multiple de n, alors
l(x + 1) = 2 + l(x) ( modulo n),
c(x + 1) = c(x) ( modulo n).
Dans ces règles pour la prise du modulo, le système de résidus que l’on considère est
1, 2, . . . , n et non pas 0, 1, . . . , n −1.
La fonction magik met en œuvre la méthode de Moschopoulos.
function M = magik(n)
%
% Calcule le carre magique d’ordre n selon la methode
% de Moschopoulous.
%
% Entree:
% n : ordre du carre (entier impair)
% Sortie:
% M : le carre magique
%
if rem(n,2) == 0,
msg = [’la methode de Moschopoulous ne construit que des carres’ ...
,’ d’’ordre impair’];
error(msg)
end
k = (n-1)/2;
l(1) = k+2;
c(1) = k+1;
M(l(1),c(1)) = 1;
for x = 2:n.^2
[l(x),c(x)] = pos(x-1,l(x-1),c(x-1),n);
M(l(x),c(x)) = x;
% ou plus simplement M(pos(x,l(x-1),c(x-1))) = x;
end
function [ly,cy] = pos(x,lx,cx,n)
%
% Retourne la position (indice de ligne ly et indice de colonne cy)
% dans le carre magique d’ordre nde l’entier y = x+1 selon la
Stéphane Balac - Débuter avec matlab 53
% regle de Moschopoulous.
%
% Entree:
% n : ordre du carre (entier impair)
% x : l’entier considere
% lx : indice de ligne de l’entier x dans le carre magique
% cx : indice de colonne de l’entier x dans le carre magique
%
% Sortie:
% ly : indice de ligne de l’entier y=x+1 dans le carre magique
% cy : indice de colonne de l’entier y=x+1 dans le carre magique
%
if rem(x,n) == 0
ly = modulo(2+lx,n);
cy = modulo(cx,n);
else
ly = modulo(1+lx,n);
cy = modulo(1+cx,n);
end
Voici quelques exemples d’utilisation de la fonction magik. On vérifie que la somme
des éléments des différentes lignes ainsi que la somme des éléments des différentes colonnes
sont bien constantes. Pour calculer la somme des éléments diagonaux c’est un peu plus
compliqué. On remarque que le carré magique construit diffère du carré magique retourné
par la fonction matlab incorporée magic.
>> magik(4)
??? Error using ==> magik
la methode de Moschopoulous ne construit que des carres d’ordre impair
>> magik(5)
ans =
11 24 7 20 3
4 12 25 8 16
17 5 13 21 9
10 18 1 14 22
23 6 19 2 15
>> sum(magik(5),1)
ans =
65 65 65 65 65
>> sum(magik(5),2)
ans =
65
65
65
65
65
>> magic(5)
Stéphane Balac - Débuter avec matlab 54
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Toutes les mathématiques de première année en un seul volume :
Algèbre et Analyse, Cours de Mathématiques
de Première Année avec Exercices Corrigés
Stéphane Balac, Frédéric Sturm
Collection Sciences Appliquées de l’INSA de Lyon,
Presses Polytechniques et Universitaires Romandes,
Lausanne, 2003 (ISBN: 2-88074-558-6).
http://www.ppur.org
Stéphane Balac - Débuter avec matlab 55
6 Graphisme
6.1 Gestion des fenêtres graphiques
Une instruction graphique ouvre une fenêtre dans laquelle est affiché le résultat de
cette commande. Par défaut, une nouvelle instruction graphique sera affichée dans la même
fenêtre et écrasera la figure précédente. On peut ouvrir une nouvelle fenêtre graphique par la
commande figure. Chaque fenêtre se voit affecter un numéro. Ce numéro est visible dans le
bandeau de la fenêtre sous forme d’un titre. Le résultat d’une instruction graphique est par
défaut affiché dans la dernière fenêtre graphique ouverte qui est la fenêtre graphique active.
On rend active une fenêtre graphique précédemment ouverte en exécutant la commande
figure(n), où n désigne le numéro de la figure. La commande close permet de fermer
la fenêtre graphique active. On ferme une fenêtre graphique précédemment ouverte en
exécutant la commande close(n), où n désigne le numéro de la figure. Il est également
possible de fermer toutes les fenêtres graphiques en tapant close all.
La figure 4 représente la fenêtre graphique numéro 1 où est affiché le graphe de la fonc-
tion cosinus entre 0 et 2π, résultat de la commande fplot(’cos’,[0 2*pi]). L’apparence
de la fenêtre graphique peut varier légèrement suivant le système informatique utilisé.
Fig. 4 – Fenêtre graphique et résultat de la commande fplot(’cos’,[0 2*pi]).
Stéphane Balac - Débuter avec matlab 56
6.2 Graphisme 2D
6.2.1 Tracer le graphe d’une fonction ; la commande fplot
La commande fplot permet de tracer le graphe d’une fonction sur un intervalle donné.
La syntaxe est :
fplot(’nomf’, [xmin , xmax])

– nomf est soit le nom d’une fonction matlab incorporée, soit une expression définis-
sant une fonction de la variable x, soit le nom d’une fonction utilisateur.
– [xmin , xmax] est l’intervalle pour lequel est tracé le graphe de la fonction.
Illustrons par des exemples les trois façons d’utiliser la commande fplot. On obtient
le graphe de la fonction incorporée sinus entre −2π et 2π par l’instruction :
fplot(’sin’,[-2*pi 2*pi]).
Pour tracer le graphe de la fonction h(x) = x sin(x) entre −2π et 2π, on peut définir la
fonction utilisateur h dans le fichier h.m de la manière suivante
4
:
function y=h(x)
y=x.*sin(x);
On obtient alors le graphe de la fonction h par l’instruction :
fplot(’h’, [-2*pi 2*pi]).
L’autre façon de procéder est d’exécuter l’instruction
5
:
fplot(’x*sin(x)’, [-2*pi 2*pi]).
Dans les deux cas on obtient le dessin représenté à la figure 5.
Il est possible de tracer plusieurs fonctions sur la même figure. Il faut pour cela utiliser
la commande fplot de la manière suivante :
fplot(’[nom_f1 , nom_f2 , nom_f3]’, [x_min , x_max]) où nomf_f1, nom_f2,
nom_f3 est soit le nom d’une fonction matlab incorporée, soit une expression définissant
une fonction de la variable x, soit le nom d’une fonction utilisateur.
Il est également possible de gérer les bornes des valeurs en ordonnées. Pour limiter le
graphe aux ordonnées comprises entre les valeurs y_min et y_max on passera comme second
argument de la commande fplot le tableau [x_min , x_max , y_min , y_max ].
Voici un exemple dont le résultat est affiché à la figure 6 :
>> fplot(’[sin(x)/x , cos(x)/x]’, [-5, 5, -1, 1])
>>
4
attention de bien lire x.*sin(x) et non pas x*sin(x)
5
là on a le choix entre écrire x.*sin(x) ou x*sin(x)
Stéphane Balac - Débuter avec matlab 57
−6 −4 −2 0 2 4 6
−5
−4
−3
−2
−1
0
1
2
Fig. 5 – Graphe de la fonction h(x) = xsin x entre −2π et 2π.
On comprend très vite l’intérêt de gérer les bornes des valeurs en ordonnées si l’on
exécute la commande fplot(’cos(x)/x’, [-5, 5]) pour tracer le graphe de la fonction
cos(x)/x entre −5 et 5. La figure, qui n’est pas vraiment esthétique, n’est pas reproduite
ici (-:.
6.2.2 La commande plot
La commande plot permet de tracer un ensemble de points de coordonnées (x
i
, y
i
)
i = 1, · · · , N. La syntaxe est plot(x,y) où x est le vecteur contenant les valeurs x
i
en
abscisse et y est le vecteur contenant les valeurs y
i
en ordonnée. Bien entendu les vecteurs
x et y doivent être de même dimension mais il peut s’agir de vecteurs lignes ou colonnes.
Par défaut, les points (x
i
, y
i
) sont reliés entre eux par des segments de droites.
Voici par exemple une autre façon de tracer le graphe de la fonction h(x) = x sin(x)
entre −2π et 2π,
>> x=[-2*pi:0.01:2*pi]; y = x.*sin(x);
>> plot(x,y)
>>
Essayez aussi
>> x=[-2*pi:1:2*pi]; y = x.*sin(x);
>> plot(x,y)
>>
Stéphane Balac - Débuter avec matlab 58
−5 −4 −3 −2 −1 0 1 2 3 4 5
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
sin(x)/x
cos(x)/x
Fig. 6 – Graphe des fonctions sin(x)/x et cos(x)/x entre −5 et 5.
Dans cet exemple on a défini un vecteur x de valeurs équi-réparties entre −2π et 2π
(avec un pas de 0.01 dans le premier cas et de 1 dans le deuxième cas) et on a calculé
l’image par la fonction h de ces valeurs (vecteur y). On affiche les points de coordonnées
(x(i), y(i)).
On peut spécifier à matlab quelle doit être la couleur d’une courbe, quel doit être le
style de trait et/ou quel doit être le symbole à chaque point (x
i
, y
i
). Pour cela on donne
un troisième paramètre d’entrée à la commande plot qui est une chaîne de 3 caractères de
la forme ’cst’ avec c désignant la couleur du trait, s le symbole du point et t le style de
trait. Les possibilités sont les suivantes :
y jaune . point - trait plein
m magenta o cercle
:
pointillé court
c cyan x marque x – pointillé long
r rouge + plus -. pointillé mixte
g vert * étoile
b bleu s carré
w blanc d losange
k noir v triangle (bas)
ˆ triangle (haut)
< triangle (gauche)
> triangle (droit)
p pentagone
h hexagone
Stéphane Balac - Débuter avec matlab 59
Les valeurs par défaut sont c = b, s = . et t = - ce qui correspond à un trait plein bleu
reliant les points entre eux. Il n’est pas obligatoire de spécifier chacun des trois caractères.
On peut se contenter d’en spécifier un ou deux. Les autres seront les valeurs par défaut.
La commande grid permet d’obtenir un quadrillage de la figure, voir par exemple la
figure 4.
Il est possible de tracer plusieurs courbes sur la même figure en spécifiant plusieurs
tableaux x1, y1, x2, y2, · · · , comme paramètres de la commande plot. Si l’on souhaite
que les courbes aient une apparence différente, on utilisera des options de couleurs et/ou
de styles de traits distincts après chaque couple de vecteurs x, y.
Voici un exemple dont le résultat est affiché à la figure 7. On trace sur l’intervalle [−5, 5]
la fonction x
2
cos x en trait plein bleu et la fonction xcos x en trait pointillé rouge.
>> x = [-5:0.01:5];
>> y = x.^2.*cos(x); z = x.*cos(x);
>> plot(x,y,’b-’,x,z,’r:’);
>>
−5 −4 −3 −2 −1 0 1 2 3 4 5
−12
−10
−8
−6
−4
−2
0
2
4
6
8
Fig. 7 – Résultat de la commande plot(x,y,’b-’,x,z,’r :’).
Voici un autre exemple amusant
6
.
>> N=200;
>> x = rand(1,N); y = rand(1,N);
>> plot(x,y,’bd’), whitebg
>>
6
La commande whitebg permet de passer la fenêtre graphique en inverse vidéo
Stéphane Balac - Débuter avec matlab 60
6.2.3 La commande loglog
Si x et y sont deux vecteurs de même dimension, la commande loglog(x,y) permet
d’afficher le vecteur log(x) contre le vecteur log(y). La commande loglog s’utilise de la
même manière que la commande plot.
Voici un exemple dont le résultat est affiché à la figure 8. Quelle est la pente de la
droite ?
>> x = [1:10:1000]; y = x.^3;
>> loglog(x,y)
>>
10
0
10
1
10
2
10
3
10
0
10
1
10
2
10
3
10
4
10
5
10
6
10
7
10
8
10
9
Fig. 8 – Résultat de la commande loglog(x,y).
6.3 Améliorer la lisibilité d’une figure
6.3.1 Légender une figure
Il est recommandé de mettre une légende à une figure. La commande xlabel permet
de mettre un texte en légende sous l’axe des abscisses. La syntaxe est
xlabel(’ légende ’)
pour obtenir le mot légende en légende. La commande ylabel fait de même pour l’axe
des ordonnées.
La commande title permet de donner un titre à la figure. La syntaxe est
title(’ le titre ’)
pour obtenir comme titre le titre.
Stéphane Balac - Débuter avec matlab 61
On peut aussi écrire un texte donné à une position précise sur la figure grâce à la
commande text. La syntaxe est text(posx,posy,’ un texte ’) où posx et posy sont
les coordonnées du point (dans le système associé au déssin) où doit débuter l’écriture du
texte un texte. La commande gtext permet quant à elle de placer le texte à une position
choisie sur la figure à l’aide de la souris. La syntaxe est gtext(’ un texte ’). Une mire,
que l’on déplace en utilisant la souris, apparaît. Il suffit d’un « clic-souris » pour que le
texte apparaisse à la position sélectionnée.
Il est possible avec ces commandes d’afficher une valeur contenue dans une variable
au milieu de texte. Pour cela on construit un tableau de type chaîne de caractères en
convertissant la valeur contenue dans la variable en une chaîne de caractères grâce à la
commande num2str. Par exemple, supposons que la variable numex contienne le numéro
de l’exemple traité, disons 5. On obtiendra pour titre de la figure Exemple numero 5 par
l’instruction : title([’Exemple numero ’, num2str(numex)]).
L’exemple suivant dont le résultat est affiché à la figure 9 illustre l’utilisation des
différentes commandes permettant de légender une figure.
>> P = 5;
>> t = [0:.01:2];
>> c = 12*exp(-2*t) - 8*exp(-6*t);
>> plot(t,c); grid
>> xlabel(’temps en minutes’)
>> ylabel(’concentation en gramme par litre’)
>> title([’evolution de la concentration du produit ’, num2str(P), ...
’ au cours du temps ’])
>> gtext(’concentration maximale’)
>>
6.3.2 Afficher plusieurs courbes dans une même fenêtre
Il est possible d’afficher plusieurs courbes dans une même fenêtre graphique grâce à
la commande hold on. Les résultats de toutes les instructions graphiques exécutées après
appel à la commande hold on seront superposés sur la fenêtre graphique active. Pour
rétablir la situation antérieure (le résultat d’une nouvelle instruction graphique remplace
dans la fenêtre graphique le dessin précédent) on tapera hold off.
Voici un exemple d’utilisation de la commande hold on. Le résultat est présenté à la
figure 10.
>> e = exp(1);
>> figure
>> hold on
>> fplot(’exp’,[-1 1])
>> fplot(’log’,[1/e e])
>> plot([-1:0.01:e],[-1:0.01:e])
>> grid
>> hold off
>>
Stéphane Balac - Débuter avec matlab 62
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
0
1
2
3
4
5
6
temps en minutes
c
o
n
c
e
n
t
a
t
i
o
n

e
n

g
r
a
m
m
e

p
a
r

l
i
t
r
e
evolution de la concentration du produit 5 au cours du temps
concentration maximale
Fig. 9 – Exemple de légendage d’une figure.
On dispose donc de deux façons de superposer plusieurs courbes sur une même figure.
On peut soit donner plusieurs couples de vecteurs abscisses/ordonnées comme argument
de la commande plot, soit avoir recours à la commande hold on. Suivant le contexte on
privilégiera l’une de ces solutions plutôt que l’autre.
Il est possible de décomposer une fenêtre en sous-fenêtres et d’afficher une figure diffé-
rente sur chacune de ces sous-fenêtres grâce à la commande subplot. La syntaxe est
subplot(m,n,i)

– m est le nombre de sous-fenêtres verticalement ;
– n est le nombre de sous-fenêtres horizontalement ;
– i sert à spécifier dans quelle sous-fenêtre doit s’effectuer l’affichage. Les fenêtres sont
numérotées de gauche à droite et de haut en bas.
L’exemple suivant dont le résultat apparaît à la figure 11 illustre l’utilisation de la
commande subplot.
>> figure
>> subplot(2,3,1), fplot(’cos’,[0 4*pi]), title(’cosinus’), grid
>> subplot(2,3,2), fplot(’sin’,[0 4*pi]), title(’sinus’), grid
>> subplot(2,3,3), fplot(’tan’,[-pi/3 pi/3]), title(’tangente’), grid
>> subplot(2,3,4), fplot(’acos’,[-1 1]), title(’arc-cosinus’), grid
>> subplot(2,3,5), fplot(’asin’,[-1 1]), title(’arc-sinus’), grid
Stéphane Balac - Débuter avec matlab 63
0.5 1 1.5 2 2.5
−1
−0.5
0
0.5
1
1.5
2
2.5
3
y = exp(x)
y = x
y = log(x)
Fig. 10 – Superposition de plusieurs courbes dans la même fenêtre graphique.
>> subplot(2,3,6), fplot(’atan’,[-sqrt(3) sqrt(3)]), title(’arc-tangente’), grid
>>
6.3.3 Sauvegarder une figure
La commande print permet de sauvegarder la figure d’une fenêtre graphique dans un
fichier sous divers formats d’images. La syntaxe de la commande print est :
print -f<num> -d<format> <nomfic>

– <num> désigne le numéro de la fenêtre graphique. Si ce paramètre n’est pas spécifié,
c’est la fenêtre active qui est prise en compte.
– <nomfic> est le nom du fichier dans lequel est sauvegardée la figure. Si aucune
extension de nom n’est donnée, une extension par défaut est ajoutée au nom du
fichier en fonction du format choisi (.ps pour du PostScript, .jpg pour du jpeg, par
exemple).
– <format> est le format de sauvegarde de la figure. Ces formats sont nombreux. On
pourra obtenir la liste complète en tapant help plot. Les principaux sont :
ps : PostScript noir et blanc
psc : PostScript couleur
eps : PostScript Encapsulé noir et blanc
epsc : PostScript Encapsulé couleur
jpeg : Format d’image JPEG
tiff : Format d’image TIFF
Stéphane Balac - Débuter avec matlab 64
0 5 10
−1
−0.5
0
0.5
1
cosinus
0 5 10
−1
−0.5
0
0.5
1
sinus
−1 0 1
−2
−1
0
1
2
tangente
−1 0 1
0
0.5
1
1.5
2
2.5
3
3.5
arc−cosinus
−1 0 1
−2
−1
0
1
2
arc−sinus
−1 0 1
−1.5
−1
−0.5
0
0.5
1
1.5
arc−tangente
Fig. 11 – Fenêtre graphique décomposée en sous-fenêtres
6.4 Graphisme 3D
6.4.1 Tracer les lignes de niveau d’une fonction de 2 variables
La commande contour permet de tracer les lignes de niveau d’une fonction de 2 va-
riables réelles. Cette fonction peut être définie par une expression matlab (par exemple
x.*exp(-x.ˆ2-y.ˆ2)), ou être définie comme une fonction utilisateur. Pour tracer les lignes
de niveau de la fonction g(x, y) pour x ∈ [x
min
, x
max
] et y ∈ [y
min
, y
max
] on procède de la
manière suivante :
– création d’un maillage, de maille de longueur h, du domaine [x
min
, x
max
]×[y
min
, y
max
]
grâce à la commande meshgrid,
[X,Y] = meshgrid(x_min :h :x_max, y_min :h :y_max).
– Évaluation de la fonction aux nœuds de ce maillage, soit par appel à la fonction
utilisateur définissant la fonction,
Z = g(X,Y)
soit directement en définissant la fonction par une expression matlab.
– Affichage des lignes de niveau grâce à la commande contour,
contour(X,Y,Z).
Ainsi pour tracer les lignes de niveau de la fonction (x, y) −→ xe
−(x
2
+y
2
)
sur le domaine
[−2, 2] ×[−2, 2] en prenant un maillage de maille de longueur h = 0.2, on exécute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = X.*exp(-X.^2-Y.^2);
>> contour(X,Y,Z)
>>
Stéphane Balac - Débuter avec matlab 65
On peut également écrire une fonction utilisateur g.m,
function x3 = g(x1,x2)
x3 = x1.*exp(-x1.^2-x2.^2);
et exécuter
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = g(X,Y);
>> contour(X,Y,Z)
>>
Dans les 2 cas on obtient le résultat présenté à la figure 12.
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
Fig. 12 – Exemple de visualisation des lignes de niveau par la commande contour.
Le nombre de lignes de niveau est déterminé de manière automatique à partir des
valeurs extrêmes prises par la fonction sur le domaine considéré. Pour imposer le nombre n
de lignes de niveau à afficher, il suffit d’appeler la fonction contour avec la valeur n comme
quatrième paramètre, contour(X,Y,Z,n).
Il existe deux manières d’afficher les valeurs des lignes de niveau sur la figure. Si l’on
souhaite afficher les valeurs pour toutes les lignes de niveau, on utilise la commande clabel
de la manière suivante :
Stéphane Balac - Débuter avec matlab 66
>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h)
Si l’on souhaite afficher uniquement les valeurs de quelques lignes de niveau, on utilise la
commande clabel de la manière suivante :
>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h,’manual’)
On peut alors grâce à la souris sélectionner les lignes de niveau pour lesquelles on
souhaite afficher la valeur.
Ainsi pour tracer 30 lignes de niveau de la fonction (x, y) −→ (x − 1)
2
+ 10 (x
2
− y)
2
sur le domaine [−1, 1] ×[−1, 1] et pour choisir à l’aide de la souris les lignes de niveau pour
lesquelles l’isovaleur doit être affichée, on exécute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = (X-1).^2 + 10*(X.^2-Y).^2;
>> [C,h] = contour(X,Y,Z,30);
>> clabel(C,h,’manual’)
>>
Le résultat est présenté à la figure 13.
−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
1
.
4
1
9
4
2
.
8
3
8
7
4
.
2
5
8
1
4
.2
5
8
1
4
.2
5
8
1
7.0968
8.5161
3
5
.
4
8
3
9
2
1
.
2
9
0
3
1
5
.
6
1
2
9
2
6
.
9
6
7
7
Fig. 13 – Exemple de visualisation des lignes de niveau par la commande contour.
Il est possible de modifier la palette des couleurs en utilisant la commande colormap.
En tapant help graph3d dans la fenêtre de contrôle matlab, vous obtiendrez toutes les
Stéphane Balac - Débuter avec matlab 67
palettes de couleurs disponibles. A vous de les tester pour obtenir le meilleur effet (-:.
La commande colormap(gray) permet d’utiliser une palette en dégradé de gris, ce qui est
très utile si l’on souhaite une impression de la figure sur une imprimante noir et blanc.
La commande contourf s’utilise de la même manière que la commande contour. Elle
permet d’afficher, en plus des lignes de niveau, un dégradé continu de couleurs qui varie en
fonction des valeurs prises par la fonction. La figure 14 présente un exemple d’utilisation
de la commande contourf obtenu de la manière suivante :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = (X-1).^2 + 10*(X.^2-Y).^2;
>> contourf(X,Y,Z,30);
>> colormap(cool);
>>
−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
Fig. 14 – Exemple de visualisation des lignes de niveau par la commande contourf.
Stéphane Balac - Débuter avec matlab 68
6.4.2 Représenter une surface d’équation z = g(x, y)
La commande mesh permet de tracer une surface d’équation z = g(x, y). La fonction
g peut être définie directement par une expression matlab ou être définie comme une
fonction utilisateur. Pour tracer la surface d’équation z = g(x, y) pour x ∈ [x
min
, x
max
] et
y ∈ [y
min
, y
max
] on procède de la manière suivante :
– création d’un maillage, de maille de longueur h, du domaine [x
min
, x
max
]×[y
min
, y
max
]
grâce à la commande meshgrid,
[X,Y] = meshgrid(x_min :h :x_max, y_min :h :y_max).
– Évaluation de la fonction aux nœuds de ce maillage, soit par appel à la fonction
utilisateur définissant la fonction,
Z = g(X,Y)
soit directement en définissant la fonction par d’une expression matlab.
– Affichage de la surface grâce à la commande mesh,
mesh(X,Y,Z).
Ainsi pour tracer la surface d’équation z = xe
−(x
2
+y
2
)
sur le domaine [−2, 2] ×[−2, 2]
avec un maillage de maillage de longueur h = 0.2, on exécute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = X.*exp(-X.^2-Y.^2);
>> mesh(X,Y,Z)
>>
Si la fonction est définie comme une fonction utilisateur dans le fichier g.m,
function x3 = g(x1,x2)
x3 = x1.*exp(-x1.^2-x2.^2);
on exécute :
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = g(X,Y);
>> contour(X,Y,Z)
>>
Dans les 2 cas on obtient le résultat présenté figure 15.
Par défaut les valeurs extrêmes en z sont déterminées automatiquement à partir des
extremums de la fonction sur le domaine spécifié. Il est possible de modifier ces valeurs (et
également les valeurs extrêmes en abscisses et ordonnées) par la commande axis dont la
syntaxe est axis(x_min x_max y_min y_max z_min z_max). Si vous n’êtes pas satisfait
du résultat, l’instruction axis auto restaure la figure originale. La figure 16 montre par
exemple le résultat de l’instruction axis([ -2 2 -2 2 -2 2]).
Il est également possible de modifier le point de vision grâce à la commande view. La
commande view a deux arguments qui sont l’angle de vision horizontal et l’angle de vision
vertical en degré. Par défaut ces angles ont repectivement les valeurs −37.5
o
et 30
o
. La
figure 17 montre par exemple le résultat de l’instruction view(37.5,30).
Stéphane Balac - Débuter avec matlab 69
−2
−1
0
1
2
−2
−1
0
1
2
−0.5
0
0.5
Fig. 15 – Exemple de visualisation d’une surface d’équation z = g(x, y) grâce à la com-
mande mesh.
Les commandes meshc et meshz s’utilisent de la même manière que la commande mesh.
La commande meshc permet d’afficher des lignes de niveau sous la surface dans le plan
z = z
min
. La commande meshz permet de tracer une boite sous la surface. Un exemple
d’utilisation de ces commandes est présenté à la figure 18.
Stéphane Balac - Débuter avec matlab 70
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
−2
−1
0
1
2
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
Fig. 16 – Exemple d’utilisation de la commande axis
−2
−1
0
1
2
−2
−1
0
1
2
−0.5
0
0.5
Fig. 17 – Exemple de modification de l’angle de vision par la commande view.
Stéphane Balac - Débuter avec matlab 71
−2
−1
0
1
2
−2
−1
0
1
2
−0.5
0
0.5
−2
−1
0
1
2
−2
−1
0
1
2
−0.5
0
0.5
Fig. 18 – Exemple de visualisation d’une surface d’équation z = g(x, y) grâce au com-
mandes meshc et meshz.
Stéphane Balac - Débuter avec matlab 72
6.4.3 Représenter une surface paramétrée
La commande surf permet de tracer une surface paramétrée d’équations,
(E)

x = g
1
(u, v),
y = g
2
(u, v),
z = g
3
(u, v).
La fonction G = (g
1
, g
2
, g
3
) peut être définie directement par une expression matlab ou
être définie comme une fonction utilisateur. Pour tracer la surface paramétrée d’équation
(E) pour u ∈ [u
min
, u
max
] et v ∈ [v
min
, v
max
] on procède de la manière suivante :
– création d’un maillage de maille de longueur h du domaine de paramétrisation
[u
min
, u
max
] ×[v
min
, v
max
] grâce à la commande meshgrid,
[U,V] = meshgrid(u_min :h :u_max, v_min :h :v_max).
– Évaluation de la fonction aux nœuds de ce maillage, soit par appel à la fonction
utilisateur définissant la fonction
[X,Y,Z] = G(U,V)
soit directement en définissant la fonction par d’une expression matlab.
– Affichage de la surface grâce à la commande surf,
surf(X,Y,Z).
Ainsi pour tracer la surface paramétrée d’équations

x = v cos u,
y = v sin u,
z = 2u.
sur le domaine [0, 2π] ×[0, 2] avec un maillage de maillage de longueur h = 0.2, on exécute :
>> [U,V] = meshgrid(0:.2:2*pi, 0:.2:2);
>> X = V.*cos(U);
>> Y = V.*sin(U);
>> Z = 2*U;
>> surf(X,Y,Z)
Si la fonction est définie comme une fonction utilisateur dans le fichier G.m,
function [x1, x2, x3] = G(u,v)
x1 = v.*cos(u);
x2 = v.*sin(u);
x3 = 2*u;
on exécute :
>> [U,V] = meshgrid(0:.2:2*pi, 0:.2:2);
>> [X,Y,Z] = G(U,V);
>> surf(X,Y,Z)
Dans les 2 cas on obtient le résultat présenté figure 19.
Stéphane Balac - Débuter avec matlab 73
−2
−1
0
1
2
−2
−1
0
1
2
0
2
4
6
8
10
12
14
Fig. 19 – Exemple de visualisation d’une surface paramétrée grâce à la commande surf.
Stéphane Balac - Débuter avec matlab 74
Références
[1] Jean Luc Chabert, ed. Histoire d’algorithmes, du caillou à la puce. Regards sur la
science, Belin, 1994.
[2] Kermit Sigmon, 1993. Matlab Tutorial.
http ://www.mines.utah.edu/gg_computer_seminar/matlab/matlab.html .
Toutes les mathématiques de première année en un seul volume :
Algèbre et Analyse, Cours de Mathématiques
de Première Année avec Exercices Corrigés
Stéphane Balac, Frédéric Sturm
Collection Sciences Appliquées de l’INSA de Lyon,
Presses Polytechniques et Universitaires Romandes,
Lausanne, 2003 (ISBN: 2-88074-558-6).
http://www.ppur.org
Stéphane Balac - Débuter avec matlab 75
Index
==, 44
&, 44
˜=, 44
abs, 14, 29
acos, 30
acosh, 30
aide en ligne, 10
all, 31
angle, 14, 29
ans, 11
any, 31
argument, 29
arrondi, 29
asin, 30
asinh, 30
atan, 30
atanh, 30
axis, 69
boucle for, 45
boucle while, 46
break, 51
cd, 12
ceil, 29
choix ventilé, 49
chol, 34
clabel, 66
clear, 8, 28
close, 56
colormap, 67
conj, 29
conjugué, 29
contour, 65
contourf, 68
cos, 30
cosh, 30
cross, 30
déterminant, 33
delete, 12
det, 33
diag, 23
diary, 10
dir, 12
disp, 36
division entière, 28
doc, 11
edit, 12
eig, 33
eps, 28
error, 51
exp, 29
expm, 33
exponentiation, 28, 31
exponentielle, 29
exponentielle matricielle, 33
eye, 21
facteurs premiers, 29
factor, 29
factorisation LU, 34
fenêtre graphique, 56
figure, 56
fix, 29
fliplr, 31
floor, 29
fonction utilisateur, 41
fonctions hyperboliques, 29
fonctions trigonométriques, 29
for, 45
format, 36
formats d’affichage des réels, 36
fplot, 34, 57
fprintf, 40
full, 24
gcd, 28
grid, 60
gtext, 62
hold off, 62
hold on, 62
i, 14, 28
if, 47
imag, 14, 29
inf, 28
input, 37
instruction conditionnée, 47
inv, 33
inverse, 33
76
ischar, 13
isempty, 15
islogical, 13
isreal, 13
j, 14, 28
lcm, 28
length, 16
lignes de niveau, 65
linspace, 18
load, 9
log, 29
log10, 29
logarithme, 29
loglog, 61
lookfor, 11
lu, 34
M-file, 41
méthode de Choleski, 33
méthode de gradient conjugué, 34
méthode QR, 34
magic, 21
matrice creuse, 24
matrice par blocs, 20
matrice tridiagonale, 23
max, 31
mean, 31
mesh, 69
meshc, 70
meshgrid, 65, 69, 73
meshz, 70
message d’erreur, 12, 51
message de mise en garde, 51
min, 31
mod, 41
modèle d’édition, 37
module, 29
NaN, 28
nargin, 43
nargout, 43
nnz, 24
norm, 33
norme, 33
num2str, 37, 62
ones, 18, 21
palette des couleurs, 67
partie imaginaire, 29
partie réelle, 29
pause, 52
pi, 28
plot, 58
plus grand commun diviseur, 29
plus petit multiple commun, 29
poly, 33, 35
polynôme, 34
polynôme caractéristique, 33
polyval, 34
print, 64
prod, 31
produit scalaire, 30
produit vectoriel, 30
qr, 34
quit, 7
racine carrée, 29
racines d’un polynôme, 34
rand, 18, 21
rang, 33
rank, 33
real, 14, 29
realmax, 28
realmin, 28
rem, 28
return, 51
roots, 34
round, 29
sauvegarder une session, 9
save, 9
script, 41
sign, 29
sin, 30
sinh, 30
size, 19
sort, 31
sous-fonction, 42
sparse, 25
spdiags, 27
speye, 27
sprand, 27
sprintf, 37, 39
spy, 24
sqrt, 29
strcmp, 16
subplot, 63
Stéphane Balac - Débuter avec matlab 77
sum, 31
surf, 73
switch, 49
système linéaire, 33
tan, 30
tanh, 30
text, 62
title, 61
trace, 33
trace, 33
transposée, 24
tril, 23
triu, 23
type, 12
valeur absolue, 29
valeurs propres, 33
variables globales, 44
variables locales, 44
vecteur, 16
vecteurs propres, 33
view, 69
warning, 51
while, 46
whitebg, 60
who, 8
whos, 8
workspace, 8
xlabel, 61
ylabel, 61
zeros, 18, 21
Stéphane Balac - Débuter avec matlab 78

(c) Copyright 2001 Stéphane Balac - INSA de Lyon (Centre de Mathematiques, F-69621 Villeurbanne Cedex) (c) Copyright 1999 Stéphane Balac - Université de Bretagne Occidentale (Département de Mathématiques, F-29285 Brest cedex) Ce document peut être reproduit et distribué à des fins non-commerciales dans son intégralité ou partiellement. La mention du copyright ainsi que l’identité de l’auteur doivent être conservées et la présente notice préservée dans son intégralité sur toute copie intégrale ou partielle. Si vous distribuez ce travail en partie, vous devez mentionner comment obtenir une version intégrale du document. matlab est un produit de The Mathswork Inc., www.mathswork.com.

Table des matières
1 Présentation et généralités 1.1 Une session matlab . . . . . . . . . . . . . 1.2 L’espace de travail . . . . . . . . . . . . . . 1.3 Obtenir de l’aide . . . . . . . . . . . . . . . 1.4 Syntaxe d’une ligne d’instructions . . . . . . 1.5 Gestion des fichiers du répertoire de travail 2 Types de données et variables 2.1 Particularités de matlab . . . . . . . 2.2 Les types de données . . . . . . . . . . 2.2.1 Les 4 types de données matlab 2.2.2 Le type complexe . . . . . . . . 2.2.3 Le type chaîne de caractères . . 2.2.4 Le type logique . . . . . . . . . 2.3 Les vecteurs . . . . . . . . . . . . . . . 2.3.1 Définir un vecteur . . . . . . . 2.3.2 Vecteurs spéciaux . . . . . . . . 2.4 Les matrices . . . . . . . . . . . . . . . 2.4.1 Définir une matrice . . . . . . . 2.4.2 Matrices spéciales . . . . . . . 2.4.3 Manipuler des matrices . . . . 2.5 La structure sparse . . . . . . . . . . . 3 Calculer avec matlab 3.1 Les constantes . . . . . . . . . . . . 3.2 Opérations et fonctions portant sur 3.3 Opérations et fonctions portant sur 3.4 Opérations et fonctions portant sur 3.5 Résolution de systèmes linéaires . . 3.6 Les polynômes . . . . . . . . . . . 4 Les 4.1 4.2 4.3 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 . 7 . 7 . 10 . 11 . 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 13 13 14 14 16 16 16 18 19 19 20 21 24 28 28 28 30 31 33 34 36 36 36 37 37 41 41 44 45 45 46 47 49 51 52

. . . . . . . les scalaires les vecteurs les matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

entrées-sorties Les formats d’affichage des réels . . . Affichage simple, la commande disp Lecture . . . . . . . . . . . . . . . . Impressions dirigées par format . . .

5 Programmer sous matlab 5.1 Scripts et fonctions . . . . . . . . . . . . . . . . . 5.2 Opérateurs de comparaison et opérateurs logiques 5.3 Instructions de contrôle . . . . . . . . . . . . . . 5.3.1 Boucle FOR : parcours d’un intervalle . . 5.3.2 Boucle WHILE : tant que . . . faire . . . . 5.3.3 L’instruction conditionnée IF . . . . . . . 5.3.4 Choix ventilé, l’instruction switch . . . . 5.3.5 Interruption d’une boucle de contrôle . . . 5.4 Un exemple complet . . . . . . . . . . . . . . . .

3

. . . .2 Représenter une surface d’équation z = g(x. . . . . . . .4. . . . 6. . . . . . . .4. . . . . .3 Améliorer la lisibilité d’une figure . . . . . . . . . . . . . . . .2. . . . .3 La commande loglog . . . . . .3. . . . . . . . . . . . . . y) . . . . . 6. . . . . .4. .2 La commande plot . . . . . . . . . . . .4 Graphisme 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . la commande fplot . . . . . . . . . . . . . . . 6. . . . . .3 Sauvegarder une figure . . . . . . . . 6. . . . .2 Graphisme 2D . . . . 6. . . . . . . . . . . . . . . .2. . . . . . . . . .1 Gestion des fenêtres graphiques . .2 Afficher plusieurs courbes dans une même fenêtre . . . . . . . . 6. . . 6. . .1 Tracer les lignes de niveau d’une fonction de 2 variables 6. . . . . . . . . . . . . . . . . . . 6. . . . . .3. . . . 56 56 57 57 58 61 61 61 62 64 65 65 69 73 4 . . . . . .1 Tracer le graphe d’une fonction . .3 Représenter une surface paramétrée . . . . . . . . . . . . . . . . .1 Légender une figure . . . . . . . . . . . . . . 6.2. . . . .6 Graphisme 6. . . . . 6. . . . . . . . . . . . . .3. . . . . 6. . . . . .

Aussi. soigner les morsures d’animaux vénéneux ou encore guérir de maladie.». seules les fonctionnalités les plus courantes de matlab sont présentées (aucune référence aux Toolbox n’est faite par exemple). on peut citer le carré magique d’ordre 4 qui apparaît sur une gravure sur bois de la Renaissance d’Albrecht Dürer (Mélancolie. Les commandes sont généralement présentées suivies d’un exemple. D’autre part avec matlab. la plupart des commandes décrites sont communes aux versions antérieures et resteront compatibles avec les versions ultérieures. matlab est un programme interactif de calcul scientifique utilisable pour la résolution numérique de nombreux problèmes mathématiques ou appliqués. Il est donc recommandé d’exécuter les exemples dans l’ordre où ils apparaissent. On pourra consulter au sujet des carrés magiques le chapitre 2 de l’ouvrage Histoire d’algorithmes [1] : « plus souvent utilisés comme talismans que comme objet de recherche mathématique. Cette documentation a été rédigée en prenant comme support la version 5. Ainsi. 5 . . les différents exemples sont souvent liés. Seule l’utilisation la plus courante de la commande est mentionnée. mais devrait être très facilement transposable aux autres systèmes. En outre. Bien qu’un peu déroutant au départ.1 de matlab. Nous supposons que le lecteur est familié des notions d’algèbre linéaire élémentaire. un scalaire est considéré comme une matrice à un élément et un vecteur est considéré comme une matrice à une ligne (ou une colonne). en général. Le lecteur est invité à tester par lui même les exemples proposés (et des variantes). cette approche s’avère en pratique d’une grande efficacité. matlab est avant tout un programme de calcul matriciel. sous forme de gravure sur des monuments. les carrés magiques étaient étroitement liés à la vie quotidienne. Toutefois dans la mesure où nous nous limitons aux fonctionnalités les plus courantes de matlab. sur chaque colonne et chaque diagonale soient toutes égales. notamment matriciel. Au sein d’un même paragraphe. l’instruction A*B calcule le produit matriciel des matrices A et B. il était fait appel à eux pour faciliter les accouchements. matlab est abréviation de MATrix LABoratory. Par contre d’un paragraphe à l’autre. 1415). La présentation qui est faite correspond à une utilisation de matlab sur station de travail Unix. Il est donc naturel qu’ils ne se rencontrent pas que dans les livres mais aussi sur des tableaux. De même. . il peut être nécessaire de « nettoyer » l’espace de travail en tapant clear all dans la fenêtre de contrôle matlab.Introduction Ce document est un guide d’initiation à matlab. les commandes matlab ne sont pas présentées de manière exhaustive. L’expression carré magique désigne tout tableau carré dont les cases renferment des nombres entiers disposés de telle sorte que les sommes des nombres inscrits sur chaque ligne. Un exemple de matrice que nous utiliserons fréquemment dans ce document correspond au carré magique. Comme exemple bien connu. L’objectif de ce document est de permettre au débutant de rapidement se familiariser avec matlab. des médailles . L’exemple suivant est révelateur à ce sujet : si A et B sont deux variables définies comme étant des matrices. matlab dispose de potentialités graphiques importantes.

Les exemples sont eux aussi présentés dans une fonte « true-type ». Dans un souci de gain de place certains exemples sont présentés sur deux colonnes. 1 – Mélancolie par Albrecht Dürer (1415).Fig. aussi toute erreur ou ambigüité relevée. Par convention. Ce document est destiné à évoluer. toute remarque ou avis peut être communiqué à l’adresse suivante : Stephane. Brest.Balac@voila. Lyon. janvier 2001 Stéphane Balac Centre de Mathématiques INSA de Lyon F-69621 Villeurbanne Cedex 6 . août 1999 Cette version du document a bénéficié de corrections suggérées par Olivier Mazet du Centre de Mathématiques de l’INSA de Lyon. Ce document est disponible aux formats pdf et postscript auprès de l’auteur. Un carré magique d’ordre 4 apparaît au dessous de la cloche. les commandes matlab apparaissent dans le texte dans une fonte « true-type ».fr. Une version hypertexte (HTLM) de ce document est également disponible.

Débuter avec matlab 7 .1 1. 4 2 ] A = 1 3 4 2 >> A*A ans = 13 9 12 16 Dans cette session on a défini la matrice A= 1 3 4 2 >> quit 16 flops. Tapez la commande matlab. info. La commande pour quitter matlab est quit. Voici un exemple de session matlab : >> A = [ 1 3.2 L’espace de travail Comme tout langage de programmation matlab permet de définir des données variables. Inc. All Rights Reserved Version 5.0.1 Présentation et généralités Une session matlab Pour lancer matlab1 . 1. matlab ne La présentation qui est faite correspond à une utilisation de matlab sur station de travail Unix. commencez par ouvrir une fenêtre de commande (commandtool) puis déplacez-vous dans votre répertoire (directory) de travail. whatsnew.421 May 25 1997 Commands to get started: intro. Les variables sont définies au fur et à mesure que l’on donne leurs noms (identificateur) et leurs valeurs numériques ou leurs expressions mathématiques. [unix prompt] et l’on a calculé son carré. On veillera dans la mesure du possible à ne pas lancer simultanément plusieurs sessions matlab. 1 Stéphane Balac .1. demo. subscribe >> Notez le prompt matlab (») qui indique que matlab attend des instructions. Chaque ligne d’instructions doit se terminer par un retour chariot. Voici ce que vous devez voir apparaître : [unix prompt] matlab < M A T L A B (R) > (c) Copyright 1984-97 The MathWorks. mais devrait être très facilement transposable aux autres systèmes. help help Commands for more information: help.

la taille du tableau (nombre de lignes et de colonnes) associé. who Your variables are: A >> whos Name A B t x y z B t x y z Size 2x2 2x2 1x7 1x1 1x1 1x1 Bytes 32 32 14 8 8 8 Class double array double array char array double array double array double array Grand total is 18 elements using 102 bytes >> clear x y t >> whos Name Size A B z 2x2 2x2 1x1 Bytes 32 32 8 Class double array double array double array Grand total is 9 elements using 72 bytes >> clear >> who >> Stéphane Balac . La commande who affiche le nom des variables actives. A = [ 1 3. Il est possible de ne détruire qu’une partie des variables en tapant clear nom-var où nom-var est le nom de la (ou des) variable(s) à détruire. t = ’bonjour’. >> >> >> >> x=2*pi/3.Débuter avec matlab 8 . Pour obtenir la liste des variables actives de l’espace de travail on dispose des commandes who et whos. La commande whos donne plus d’informations : le nom. 4 2 ].nécessite pas de déclaration de type ou de dimension pour une variable. l’espace mémoire utilisé (en Bytes) et la classe des données (principalement double array s’il s’agit d’un tableau de valeurs réelles ou complexes et char s’il s’agit d’un tableau de caractères). B = A*A. y=sin(x). Les variables sont stockées dans l’espace de travail (ou workspace) et peuvent être utilisées dans les calculs subséquents. z=cos(x). La commande clear permet de nettoyer l’espace de travail : toutes les variables sont détruites.

Il est possible de ne sauver qu’une partie des variables (par exemple seulement la variable contenant le résultat d’un calcul) en utilisant l’instruction save nom-fic nom-var où nom-var est le nom de la (ou des) variable(s) à sauvegarder.8660 z = -0. Si l’on relance matlab et que l’on tape load toto.mat.mat [unix prompt] more y. L’instruction save nom-fic enregistre toutes les variables de l’espace de travail dans le fichier nom-fic. seul le contenu des variables est sauvegardé et non pas l’ensemble des instructions effectuées durant la session.Débuter avec matlab 9 z 5 20:42:21 1999 ¿ßÿÿÿÿÿü . y=sin(x). Si aucun nom de fichier n’est précisé. on peut vérifier que les variables y et z existent bien et ont les valeurs précédentes. taper load nom-fic. On sauve ces résultats dans un fichier toto. Pour ramener dans l’espace de travail les variables sauvegardées dans le fichier nom-fic.mat existe bien mais qu’il ne s’agit pas d’un fichier ascii. le fichier par défaut est matlab.mat. >> x=2*pi/3.Il est possible de sauvegarder une session matlab matlab dans un fichier pour une utilisation ultérieure. [unix prompt] ls toto.mat.0 MAT-file. Attention.8660 >> z z = Stéphane Balac .mat. z=cos(x) x = 2.mat MATLAB 5.0944 y = 0. Created on: Mon Jul ‘ MI 8 e e d ‘ ‘ ‘ ‘z [unix prompt] matlab >> load toto >> who Your variables are: y >> y y = 0. Dans l’exemple qui suit on calcule le sinus et le cosinus de 2π/3 dans les variables y et z. Platform: SOL2. Après avoir quitté matlab on peut vérifier que le fichier toto.5000 >> save toto y z >> quit 6 flops.

>> diary toto >> z=cos(x) z = -0. . DIARY. Use the functional form of DIARY. les commandes matlab doivent être tapées en minuscules pour être reconnues. par l’instruction diary nom-fic. when the file name is stored in a string.5000 >> diary off et rien de plus . Stéphane Balac . . >> Attention.7321 >> Si vous éditez le fichier toto. by itself.3 Obtenir de l’aide Dans une session matlab.Débuter avec matlab 10 . DIARY ON turns it back on.5000 >> x ??? Undefined function or variable ’x’. On provoque la sauvegarde dans le fichier nom-fic. such as DIARY(’file’). Le fichier de sauvegarde par défaut a pour nom diary. taper diary off.5000 >> diary off >> t = tan(x) t = -1. même si elles figurent en majuscules dans l’aide en ligne. >> help diary DIARY Save text of MATLAB session. il est impossible de sauvegarder la partie de la session précédent son appel. Pour arrêter la sauvegarde. Attention. DIARY file_name causes a copy of all subsequent terminal input and most of the resulting output to be written on the named file.). y=sin(x). Par exemple. il est possible d’obtenir une aide en ligne sur une commande en tapant help nom-commande. DIARY OFF suspends it. c’est la commande diary qui déclenche le début de sauvegarde . . voici ce que vous verrez : >> z=cos(x) z = -0. toggles the diary state.-0. >> La commande diary permet de sauvegarder l’ensemble d’une session dans un fichier ascii pour un traitement ultérieur (insertion dans un document. impression. 1. >> x=2*pi/3. . .

Il faut alors les séparer par une virgule ou par un point virgule. TRIDIAG Tridiagonal matrix (sparse). il est possible de poursuivre sur la ligne suivante en terminant la ligne par 3 points (. >> B = [ 1 3. Pour ré-afficher un résultat contenu dans une variable. >> lookfor determinant DET Determinant. >> A A = 8 1 6 3 5 7 4 9 2 >> A*A. >> ans ans = 91 67 67 >> 67 91 67 67 67 91 Plusieurs instructions matlab peuvent figurer sur une même ligne. La commande lookfor permet de rechercher un mot-clé parmi les lignes de commentaires en entête des fonctions matlab (ces lignes sont celles affichées par la commnande doc). cliquer sur Exit Program dans le menu File du navigateur. sensitive eigenvalues.4 Syntaxe d’une ligne d’instructions Si une instruction matlab est suivie d’un point virgule. On peut utiliser une phrase comme mot-clé. les commentaires des fonctions matlab étant rédigés en anglais. Pour quitter cette documentation. Le résultat de la dernière instruction exécutée peut être rappelé par la commande ans : >> A = [ 8 1 6. matlab rend la main sans rien afficher. le résultat de cette instruction n’est pas affiché. TRIDIEIG Find a few eigenvalues of a tridiagonal matrix. Elle retourne également la ligne de commentaires où figure le mot-clé. il suffit de taper le nom de la variable.. La commande lookfor retourne le nom la fonction matlab (ou des fonctions) où le mot-clé figure dans la première ligne de commentaires. >> lookfor papillon >> 1. 3 5 7.). B*B ans = Stéphane Balac . si une commande est trop longue pour tenir sur une ligne. Attention le mot-clé doit être en anglais. Si le mot-clé n’a été trouvé dans aucune ligne de commentaires. 4 2 9]. D’autre part. L’instruction lookfor motclé -all recherche le mot-clé dans toutes les lignes de commentaires en entête des fonctions. L’instruction lookfor motclé recherche le mot-clé motclé dans la première ligne de commentaire de toutes les fonctions matlab.Débuter avec matlab 11 . Il faut alors l’écrire entre guillemets (’ ’)..On peut également obtenir de l’aide par le biais de la commande doc qui donne accès à une documentation complète au format HTML. symmetric tridiagonal matrix. TRIDISOLVE Solve A*x = b where A is a square. 4 2 ]. POISSON Block tridiagonal matrix from Poisson’s equation. >> lookfor ’tridiagonal matrix’ LESP Tridiagonal matrix with real.

>> dir . La commande delete permet de détruire un fichier. La commande dir donne la liste des fichiers du répertoire de travail. deux fichiers toto et toto. Ces commandes s’utilisent de la même manière que les commandes correspondantes d’Unix (ou du DOS).13 9 12 16 >> x = 1 + 2 + 3 + 4 + 5 + 6 . La commande cd permet de changer de répertoire de travail. Ce message vous indique les sources d’erreurs possibles et doit vous permettre de corriger rapidement votre erreur.mat >> toto toto.mat existent dans votre répertoire de travail. Le choix de l’éditeur a été effectué au moment de l’installation de matlab sur votre machine. >> 1. >> edit toto >> delete toto >> !ls toto. La commande type permet d’afficher le contenu d’un fichier. Si vous avez effectué les exemples du paragraphe 1.Débuter avec matlab 12 .mat Stéphane Balac . vous obtiendez un message d’erreur. 4 5] ??? Number of elements in each row must be the same. >> A + B ??? Error using ==> + Matrix dimensions must agree. . >> C = [ 1 2 3. Il est également possible d’exécuter des commandes Unix à partir de matlab en faisant précéder la commande d’un point d’exclamation ( !). Enfin la commande edit permet d’ouvrir un éditeur de texte. +7 + 8 + 9 + 10 x = 55 >> Si la syntaxe de l’instruction soumise est erronée ou si vous demandez à matlab d’exécuter une instruction illégale (qui n’a pas de sens mathématique par exemple). Voici alors quelques exemples d’utilisation des commandes de gestion des fichiers. il vous est donc impossible de choisir votre éditeur favori...5 Gestion des fichiers du répertoire de travail Un certain nombre de commandes permettent de gérer les fichiers du répertoire de travail.2.. >> whose ??? Undefined function or variable ’whose’.

Pour matlab toute variable est considérée comme étant un tableau d’éléments d’un type donné. complexe. matlab différencie majuscules et minuscules ! Ainsi X33 et x33 désignent deux variables distinctes.1 Les types de données Les 4 types de données matlab Les trois principaux types de variables utilisés par matlab sont les types réel. Une variable est désignée par un identificateur qui est formé d’une combinaison de lettres et de chiffres. L’utilisation de variables avec matlab ne nécessite pas de déclaration de type ou de dimension. Cela est possible grâce aux commandes ischar. Une variable peut être de type réel. définissent une variable x de type réel. rep = ’oui’ . il est parfois utile de pouvoir le déterminer. z = 2+i.1 Types de données et variables Particularités de matlab Comme tout langage de programmation matlab permet de définir des données variables. Ce type est établi automatiquement à partir des valeurs affectées à la variable. Attention. ischar(x) retourne 1 si x est de type chaîne de caractères et 0 sinon.2 2.2. Par exemple les instructions x = 2 . Le type et la dimension d’une variable sont déterminés de manière automatique à partir de l’expression mathématique ou de la valeur affectée à la variable. complexe et chaîne de caractères. vecteur ou matrice suivant la forme du tableau. Les matrices qui sont des tableaux ayant plusieurs lignes et colonnes. Les scalaires qui sont des tableaux à une ligne et une colonne. Le premier caractère de l’identificateur doit nécessairement être une lettre. Le type logique est associé au résultat de certaines fonctions. islogical(x) retourne 1 si x est de type logique et 0 sinon. 2. La commande isreal(x) est à utiliser avec discernement : elle retourne 1 si x est réel ou de type chaîne de caractères et 0 sinon (x 13 Stéphane Balac .2 2. >> whos Name Size Bytes Class rep x z 1x3 1x1 1x1 6 8 16 char array double array double array (complex) Grand total is 5 elements using 30 bytes >> Comme on ne définit pas de manière explicite le type d’une variable. Signalons qu’il est inutile (impossible) de déclarer le type d’une variable. matlab différencie trois formes particulières de tableaux. Les variables sont définies au fur et à mesure que l’on donne leurs noms (identificateur) et leurs valeurs numériques ou leurs expressions mathématiques.Débuter avec matlab . Il n’y a pas de type entier à proprement parler. z = 2+i . Une variable matlab est donc toujours un tableau que l’on appelle variable scalaire. une variable z de type complexe et une variable rep de type chaîne de caractères. Les vecteurs qui sont des tableaux à une ligne ou à une colonne. >> clear >> x = 2. chaîne de caractères ou logique. rep = ’oui’. islogical et isreal.

abs. on peut soit détruire ces deux variables (clear i j). Les instructions abs(z) et angle(z) retournent le module et l’argument de z. il est possible de manipuler chaque lettre de la chaîne en faisant référence à sa position dans la chaîne. 3i] z = 1. 2.0000 0 + 1.est complexe à partie imaginaire non nulle ou n’est pas un tableau de valeurs réelles ou de caractères).0000 0 + 3. Une donnée de type chaîne de caractères (char) est représentée sous la forme d’une suite de caractères encadrée d’apostrophes simples (’).0000i >> 2. real. voir le paragraphe 2.0000 + 1. b. Une variable de type chaîne de caractères étant interprétée comme un tableau de caractères. Les commandes imag. Si c’est la cas. La concaténation de chaînes de caractères s’effectue selon les règles de manipulation des tableaux. L’exemple suivant présente différentes manipulations d’une chaîne de caractères. i et j redeviennent alors l’unité imaginaire. Comparez par exemple. On fera également attention à ne pas laisser d’espace autour de l’unité imaginaire afin d’éviter de mauvaises interprétations des données dans certains cas. r et t des variables de type réel. Aussi il est possible que des variables de noms i et j aient été redéfinies au cours d’un calcul antérieur et soient toujours actives. soit ré-affecter à i ou à j la valeur unité imaginaire par l’instruction i=sqrt(-1). Les nombres complexes peuvent être écrits sous forme cartésienne a + ib ou sous forme polaire reit . angle permettent de passer aisément de la forme polaire à la forme cartésienne et réciproquement.Débuter avec matlab 14 . >> ischar(rep) ans = 1 >> ischar(x) ans = 0 >> isreal(z) ans = 0 >> isreal(x) ans = 1 >> isreal(rep) ans = 1 >> 2.2.2 Le type complexe L’unité imaginaire est désignée par i ou j. Si z est de type complexe.0000i 2. a+b*i. On se méfiera donc des boucles d’indices i et j dans lesquelles on manipule des variables de type complexe.3 Le type chaîne de caractères Une chaîne de caractères est un tableau de caractères. Stéphane Balac . a+i*b. a+bi et r*exp(it) ou r*exp(i*t) avec a. 2.0000 + 1.0000 3.3.0000i 2.0000i >> y = [1+i. les instructions imag(z) et real(z) retournent la partie imaginaire et la partie réelle de z. On fera attention au fait que les identificateurs i et j ne sont pas réservés. >> z = [1+i. 3 i] y = 1. Les différentes écritures possibles sont a+ib.2.

ch(7)] ans = bonsoir >> Si une chaîne de caractères doit contenir le caractère apostrophe (’) celui-ci doit être doublé dans la chaîne (ainsi pour affecter le caractère apostrophe (’) à une variable on devra écrire ””. ch(7). >> ch = [ch(1:3). ch3. >> rep = ’aujourd’’hui’ rep = aujourd’hui >> apos = ’’’’ apos = ’ >> La chaîne de caractères vide s’obtient par 2 apostrophes ”. comma.>> ch1 = ’bon’ ch1 = bon >> ch2 = ’jour’ ch2 = jour >> whos Name Size ch1 ch2 1x3 1x4 Bytes 6 8 Class char array char array Grand total is 7 elements using 14 bytes >> ch = [ch1. soit 4 apostrophes). or semi-colon. La commande isempty permet de tester si une variables de type chaîne de caractères est vide ou non. >> rep = ’aujourd’hui’ ??? rep = ’aujourd’hui | Missing operator.ch2] ans = bonjour >> ch(1).Débuter avec matlab 15 . ch(1:3) ans = b ans = r ans = bon >> ch3 = ’soi’. La commande Stéphane Balac .

clear >> 2. y = exp(log(x)). 2. la valeur de la variable y ne vaut pas exactement 123. y.229999999999999e+02 tst = 0 >> format. Dans l’exemple qui suit on considère une variable x contenant la valeur 123 et une variable y définie par l’expression mathématique y = exp(log(x)). La variable tst est une variable de type logique qui vaut 1 (vrai) les valeurs sont égales et 0 (faux) sinon. on affiche la phrase x est egal a y ou la phrase x est different de y.Débuter avec matlab 16 . disp(’x est egal a y ’). On peut obtenir la longueur d’un vecteur donné grâce à la commande length.) ou par des retours chariots (touche Entrée/Enter). >> tst = ( x==y ). else disp(’x est different de y ’). >> x = 123. Dans l’exemple proposé. On peut transformer un vecteur ligne x en un vecteur colonne et réciproquement en tapant x’ (’ est le symbole de transposition). Il est inutile de définir la longueur d’un vecteur au préalable. Suivant la valeur de tst.2. end x est different de y >> whos Name Size Bytes Class tst x y 1x1 1x1 1x1 8 8 8 double array (logical) double array double array Grand total is 3 elements using 24 bytes >> format long >> x.3 2. On teste si les variables x et y contiennent les mêmes valeurs. Stéphane Balac . compte-tenu des erreurs d’arrondis lors du calcul de exp(log(123)). >> if tst. Cette longueur sera établie automatiquement à partir de l’expression mathématique définissant le vecteur ou à partir des données. Un résultat de type logique est retourné par certaines fonctions ou dans le cas de certains tests. tst x = 123 y = 1. On pourra également considérer le cas où x = 12.strcmp permet de tester si deux chaines de caractères sont égales ou non. Les éléments sont séparés au choix par des espaces ou par des virgules.1 Les vecteurs Définir un vecteur On définit un vecteur ligne en donnant la liste de ses éléments entre crochets ([ ]).3.4 Le type logique Le type logique (logical) possède 2 formes : 0 pour faux et 1 pour vrai. On définit un vecteur colonne en donnant la liste de ses éléments séparés au choix par des points virgules ( .

x2 = [4.Un vecteur peut également être défini « par blocs » selon la même syntaxe. Si par exemple x1 . k + N p = l on écrira x(k :p :l). 10] x1 = 1 2 3 x2 = 4 5 6 7 x3 = 8 9 10 >> length(x2). 9.7]. Le ke élément du vecteur x est désignée par x(k). En pratique ceci impose de faire des translations d’indices si par exemple on souhaite définir une suite xn . Le terme x0 de la suite correspondra à l’élément x(1) du vecteur et le terme xN à l’élément x(N+1). >> x1 = [1 2 3]. x2 et x3 les variables matlab correspondantes). x2 et x3 sont trois vecteurs (on note x1.Débuter avec matlab 17 .5. k + 2p. X(K) retourne les éléments du vecteur X dont les indices sont les éléments du vecteur K. N . Reprenons l’exemple précédent.6. On peut également manipuler facilement les éléments d’un vecteur dont les indices sont en progression arithmétique. on définit le vecteur X = (x1 | x2 | x3 ) par l’instruction X = [x1 x2 x3]. Stéphane Balac . · · · . k + p. · · · . si K est un vecteur de valeurs entières. Le premier élément d’un vecteur a obligatoirement pour indice 1. n = 0. Plus généralement. Ainsi les éléments k à l du vecteur x sont désignés par x(k :l). length(x3) ans = 4 ans = 3 >> whos Name Size Bytes Class x1 x2 x3 1x3 1x4 3x1 24 32 24 double array double array double array Grand total is 10 elements using 80 bytes >> x3’ ans = 8 9 10 >> X = [x1 x2 x3’] X = 1 2 3 >> 4 5 6 7 8 9 10 Les éléments d’un vecteur peuvent être manipulés grâce à leur indice dans le tableau. x3 = [8. Ainsi si l’on souhaite extraire les éléments k. Il est possible de manipuler plusieurs éléments d’un vecteur simultanément.

N).2000 1.2 Vecteurs spéciaux Les commandes ones. zeros et rand permettent de définir des vecteurs dont les éléments ont respectivement pour valeurs 0. La syntaxe est x = linspace(a.b. Si a − b n’est pas un multiple de h.7000 1. Pour définir un vecteur x dont les composantes forment une suite arithmétique de raison h. on écrira x = a :h :b.1000 1.5000 1.5000 1.3000 1.3.5000 >> x = linspace(1.6000 1.3000 Columns 8 through 9 1. Les composantes du vecteur sont donc linéairement espacés.1:1.3000 Columns 8 through 9 1. Stéphane Balac . La commande linspace permet de définir un vecteur x de longueur N dont les composantes forment une suite arithmétique de premier terme a et de dernier terme b (donc de raison (a − b)/(N − 1)).1000 1.9) ans = Columns 1 through 7 1.2000 1.9 x = Columns 1 through 7 1.>> X(5) ans = 5 >> X(4:10) ans = 4 5 6 7 >> X(2:2:10) ans = 2 4 6 8 >> K = [1 3 4 6]. le dernier élément du vecteur x sera a + Ent((a − b)/h) h où Ent est la fonction partie entière.9000 1. X(K) ans = 1 3 4 6 >> 8 9 10 10 Il est très facile de définir un vecteur dont les composantes forment une suite arithmétique.1.9.4000 1.9000 >> x = 1.8000 1.6000 1.1:0.1000 1.9000 >> 1. de premier terme a et de dernier terme b.4000 1.7000 1.Débuter avec matlab 18 . >> x = 1.1:0. 1 et des nombres générés de manière aléatoire.7000 2.1.2:2 x = 1.8000 1.

on peut aussi écrire la matrice A de la manière suivante.) ou par un retour chariot.4 2.1 Les matrices Définir une matrice On a déjà vu que l’on définissait la matrice A= 1 3 4 2 en tapant A = [ 1 3 .). Les éléments d’une ligne de la matrice peuvent être séparés au choix par un blanc ou bien par une virgule (.1) ans = 4 >> La commande size permet d’obtenir les dimensions d’une matrice A donnée. on définit une matrice en donnant la liste de ses éléments entre crochets. On peut soit obtenir de manière séparée le nombre de lignes et de colonnes par les instructions Stéphane Balac .2] A = 1 3 4 2 >> A = [1 3 4 2] A = 1 3 4 2 >> A = [1. >> A(2.1) zeros(1. D’une façon générale. A(i.j) désigne le ie élément de la j e ligne ligne de la matrice A. Ainsi A(2.n) zeros(m.3.1) : : : : : : vecteur ligne de longueur n dont tous les éléments valent 1 vecteur colonne de longueur m dont tous les éléments valent 1 vecteur ligne de longueur n dont tous les éléments valent 0 vecteur colonne de longueur m dont tous les éléments valent 0 vecteur ligne de longueur n dont les éléments sont générés de manière aléatoire entre 0 et 1 vecteur colonne de longueur m dont les éléments sont générés de manière aléatoire entre 0 et 1 2.ones(1.2] A = 1 3 4 2 >> Un élément d’une matrice est référencé par ses numéros de ligne et de colonne.n) rand(m. Signalons que matlab admet d’autres façons d’écrire les matrices.4. Par exemple.Débuter avec matlab 19 .3 4.1) rand(1.1) désigne le premier élément de la deuxième ligne de A. Les lignes quant à elles peuvent être séparées au choix par le point-virgule ( . 4 2 ].4. >> A = [1.n) ones(m.

C D]. D désignent 4 matrices (aux dimensions compatibles). B11 B12]. B. soit obtenir le nombre m de lignes et le nombre n de colonnes par l’instruction [m. Si A.2 Matrices spéciales Certaines matrices se construisent très simplement grâce à des commandes dédiées. B21] 1 32 9 28 5 36 6 7 2 33 34 29 26 21 22 17 12 13 19 23 27 10 14 18 24 25 20 15 16 11 2. on définit la matrice blocs K= A B C D de la matrice 26 21 22 17 12 13 19 23 27 10 14 18 24 25 20 15 16 11         par l’instruction K = [ A B . A21 A22 ] = [ = [ 1 6 26 19 32 7 21 23 9 2 22 27 28 33 17 10 5 34 12 14 [ 24 25 20 15 16]’.n] = size(A). B . 23. C. Voici un exemple de construction par blocs  35 1 6  3 32 7   31 9 2 B=  8 28 33   30 5 34 4 36 29 >> A11 >> A12 >> A21 >> A22 >> B11 B11 = 35 3 31 8 30 >> B12 >> B = >> B21 >> B = B = 35 3 31 8 30 4 >> = = = = = [35 1 6. Citons les plus utilisées : Stéphane Balac . 30 5 34].1) et size(A.2) respectivement. 3 [26 19. 22 27]. [ 4 36 29 13 18 11]. On peut construire très simplement une matrice « par blocs ». 31 9 2]. 21 [ 8 28 33.size(A. 12 [ A11 A12.4. [17 10.Débuter avec matlab 20 . 14]. 32 7.

il suffit de traduire le symbole deux-points ( :) par « tout ». >> A = magic(5) A = 17 24 1 23 5 7 4 6 13 10 12 19 11 18 25 >> A(1.6154 0. la ie ligne de la matrice A est désignée par A(i. Ainsi A( :.2) ans = 1 1 1 1 1 1 >> zeros(2) ans = 0 0 0 0 >> rand(2. Mentionnons enfin la commande magic(n) qui permet d’obtenir une matrice magique de dimension n.Débuter avec matlab 21 .4447 0.n) : : : : la matrice identité dans Rn.:) ans = 17 24 >> A(:. C’est simple.3 Manipuler des matrices Le symbole deux-points ( :) permet d’extraire simplement des lignes ou des colonnes d’une matrice.2) ans = 24 5 6 12 18 >> 1 8 15 8 14 20 21 2 15 16 22 3 9 Si l’on souhaite échanger les colonnes 2 et 3 de la matrice A une première possibilité consiste à exécuter : Stéphane Balac . Le j e vecteur colonne de la matrice A est désigné par A( :.7919 6 7 2 33 34 29 26 21 22 17 12 13 19 23 27 10 14 18 24 25 20 15 16 11 2.n) rand(m.0185 >> magic(6) ans = 35 1 3 32 31 9 8 28 30 5 4 36 >> 0 0 1 0.j).n la matrice à m lignes et n colonnes dont tous les éléments valent 1 la matrice à m lignes et n colonnes dont tous les éléments valent 0 une matrice à m lignes et n colonnes dont les éléments sont générés de manière aléatoire entre 0 et 1 Signalons que si les entiers m et n sont égaux on peut se contenter de ne spécifier qu’une seule valeur de dimension : ones(n) est la matrice carrée de dimension n dont tous les éléments valent 1.4565 0.4.j) désigne toutes les lignes et la j e colonne de la matrice A. >> eye(3) ans = 1 0 0 1 0 0 >> ones(3. Bien entendu. :).3) ans = 0.n) zeros(m.eye(n) ones(m.8214 0.

>> A(L. :) est la matrice issue de A dont les lignes sont les lignes de la matrice A d’indices contenus dans le vecteur J.C) ans = 1 8 13 20 25 2 >> A(1:2:5.>> v = A(:. A(L.2). Si L et C sont deux vecteurs d’indices. Une seconde possibilité pour échanger les lignes 2 et 3 de la matrice A consiste à exécuter : >> J = [1 3 2 4]. on a utilisé la forme spéciale permettant de définir un vecteur dont les composantes sont en progression arithmétique. A(:. A = A(:.J) A = 17 1 24 8 15 23 7 5 14 16 4 13 6 20 22 10 19 12 21 3 11 25 18 2 9 Stéphane Balac .3:4) ans = 1 8 13 20 25 2 >> 1 8 7 14 13 20 19 21 25 2 C = [3 4]. A( :.J) est la matrice issue de A dont les colonnes sont les colonnes de la matrice A d’indices contenus dans le vecteur J.3).3. D’une façon plus générale.C) désigne la matrice issue de la matrice A dont les éléments sont les A(i. A = 17 1 24 8 15 23 7 5 14 16 4 13 6 20 22 10 19 12 21 3 11 25 18 2 9 >> On peut également extraire plusieurs lignes ou colonnes simultanément. Si J est un vecteur d’entiers. De même A(J.3) = v. voir le paragraphe 2.j) tels que i ∈ L et j ∈ C. A(:. >> A = magic(5) A = 17 24 23 5 4 6 10 12 11 18 >> L = [1 3 5].Débuter avec matlab 22 . 15 16 22 3 9 Dans la dernière instruction. il est possible de n’extraire qu’une partie des éléments des lignes et colonnes d’une matrice.2) = A(:.

Stéphane Balac .>> Il existe des commandes matlab permettant de manipuler globalement des matrices.-1) A = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 >> On dispose également de la commande tril permet d’obtenir la partie triangulaire inférieure (l pour lower) d’une matrice.1).diag(ones(N-1. Par exemple la matrice correspondant à la discrétisation par différences finies du problème de Dirichlet en dimension 1 s’obtient ainsi >> N=5. A=diag(v) est la matrice diagonale dont la diagonale est v.1) . Elle permet aussi de créer une matrice de diagonale fixée : si v est un vecteur de dimension n.Débuter avec matlab 23 . La commande diag permet d’extraire la diagonale d’une matrice : si A est une matrice.1) ans = 5 5 5 >> diag(A.-2) ans = 2 2 >> On construit à l’aide de la commande diag très simplement des matrices tridiagonales. . >> A = [4 5 6 7 . v=diag(A) est le vecteur composé des éléments diagonaux de A. 3 4 5 6 2 3 4 5. diag(A) ans = 1 1 1 >> v=[1:3] v = 1 2 3 >> diag(v) ans = 1 0 0 0 2 0 0 0 3 >> On n’est pas obligé de se limiter à la diagonale principale .1). >> A=eye(3). . 1 2 3 4] A = 4 5 6 7 3 4 5 6 2 3 4 5 1 2 3 4 >> diag(A. >> A=diag(2*ones(N. La commande triu permet d’obtenir la partie triangulaire supérieure (u pour upper) d’une matrice.1)) .diag(ones(N-1.La commande diag admet un second paramètre k pour désigner la ke sur-diagonale (si k > 0) ou la ke sous-diagonale (si k < 0).

Par défaut dans matlab une matrice est considérée comme pleine (ou « full » en anglais). On peut ainsi obtenir la partie triangulaire supérieure (ou inférieure) à partir de la ke diagonale. la commande sparse(M) permet d’obtenir la même matrice mais stockée sous la forme sparse. Si M est une matrice. >> tril(A. Ainsi.>> A = [ 2 1 1 . -2 -1 0] A = 0 1 2 -1 0 1 -2 -1 0 >> A’ ans = 0 1 2 -1 0 1 -2 -1 0 2. -1 0 1. Stéphane Balac . la commande spy(M) ouvre une fenêtre graphique et affiche sous forme de croix les éléments non-nuls de la matrice. >> A = [0 1 2. -1 2 1 .-1) ans = 0 0 -1 0 -1 -1 >> tril(A. A’ retourne la matrice adjointe de A. -1 -1 2] A = 2 1 1 -1 2 1 -1 -1 2 >> triu(A) ans = 2 1 1 0 2 1 0 0 2 >> tril(A) ans = 2 0 -1 2 -1 -1 >> 0 0 2 Comme pour la commande diag. Si l’on a une matrice stockée sous la forme sparse. Si la matrice est à coefficients complexes. Le numéro des lignes est porté sur l’axe des ordonnées. c’est-à-dire que tous ses coefficients sont mémorisés.1) ans = 2 -1 -1 >> 0 0 0 1 2 -1 0 1 2 On obtient la transposée de la matrice A à coefficients réels en tapant A’. La commande nnz permet d’obtenir le nombre d’éléments non-nuls d’une matrice. les commandes triu et tril admettent un second paramètre k. on peut obtenir la même matrice stockée sous la forme ordinaire par la commande full. Il est possible de visualiser graphiquement la structure d’une matrice grâce à la commande spy. celui des colonnes en abscisse. Si M est une matrice.5 La structure sparse On appelle matrice creuse (le terme anglais est « sparse matrix ») une matrice comportant une forte proportion de coefficients nuls. On obtient également le nombre d’éléments non-nuls de la matrice.Débuter avec matlab 24 . De nombreux problèmes issus de la physique conduisent à l’analyse de systèmes linéaires à matrice creuse. L’intérêt de telles matrices résulte non seulement de la réduction de la place mémoire (on ne stocke pas les zéros) mais aussi de la réduction du nombre d’opérations (on n’effectuera pas les opérations portant sur les zéros).

3) -1 (3. La commande sparse permet de définir une matrice creuse directement sous la forme sparse.4) -1 (4.1) 2 (2.diag(ones(N-1. >> N=5.2) -1 (2.js.m) pour définir une matrice A ∈ Rn.1) -1 (1.1)) .Débuter avec matlab 25 .-1) A = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 >> nnz(A) ans = 13 >> B = sparse(A) B = (1.5) 2 >> whos Name Size Bytes Class A B N 5x5 5x5 1x1 200 180 8 double array sparse array double array Grand total is 39 elements using 388 bytes >> spy(A) >> Pour les très grosses matrices creuses. >> N=5.1).2) -1 (2.js(l) qui valent s(l) pour l variant de 1 à L longueur du tableau s (L = length(s)).m dont les coefficients sont nuls (et donc non mémorisés) sauf les éléments ais(l).diag(ones(N-1.s.1) . On l’utilise de la façon suivante : A = sparse(is.3) 2 (4.4) -1 (4. >> A=diag(2*ones(N. il n’est bien entendu pas souhaitable d’utiliser une structure pleine (full) pour définir la matrice avant de passer en stockage sparse. Stéphane Balac .1).Reprenons l’exemple de la matrice tridiagonale issue de la discrétisation par différences finies du problème de Dirichlet en dimension 1.3) -1 (3.4) 2 (5.n.5) -1 (5.2) 2 (3.

-ones(1.1) -1 (1.2) -1 (2.1:N-1] js = Columns 1 through 12 1 2 3 4 5 2 3 4 Column 13 4 >> B = sparse(is.3) -1 (3.N-1).3) 2 (4. -ones(1.3) -1 (3.4) 2 Stéphane Balac .N-1)] s = Columns 1 through 12 2 2 2 2 2 -1 -1 -1 Column 13 -1 >> is = [1:N. >> s =[2*ones(1.N).N) B = (1.N.2) -1 (2.2:N] is = Columns 1 through 12 1 2 3 4 5 1 2 3 Column 13 5 >> js = [1:N. 2 – Résultat de la commande spy(B).1) 2 (2.Fig.s.4) -1 (4.js.Débuter avec matlab -1 -1 -1 -1 4 2 3 4 5 1 2 3 26 .2:N.1:N-1.2) 2 (3.

Presses Polytechniques et Universitaires Romandes. identités et des matrices dont les éléments sont des nombres aléatoires avec un stockage « sparse ». speye et sprand permettent de construire des matrices diagonales.Débuter avec matlab 27 .5) -1 (5. Frédéric Sturm Collection Sciences Appliquées de l’INSA de Lyon. eye et rand pour les matrices pleines.ppur.5) 2 >> A = full(B) A = 2 -1 0 -1 2 -1 0 -1 2 0 0 -1 0 0 0 >> 0 0 -1 2 -1 0 0 0 -1 2 Les commandes spdiags.org Stéphane Balac . Elles s’utilisent de la même manière que leur équivalent diag. Lausanne. Toutes les mathématiques de première année en un seul volume : Algèbre et Analyse.(5. 2003 (ISBN: 2-88074-558-6).4) -1 (4. Cours de Mathématiques de Première Année avec Exercices Corrigés Stéphane Balac. http://www.

2204e − 16.7977e + 308. x*y et x/y désignent les 4 opérations usuelles entre les valeurs de x et y dans R. Dans ce cas. c’est-à-dire qu’il est possible de définir des variables de même nom. realmin et realmax dépendent de la machine sur laquelle matlab est installé. >> pi = 0.1415926535897 √ −1 √ −1 Les valeurs des constantes eps. l’identificateur fera référence à la variable définie par l’utilisateur et non plus à la constante matlab. cos(pi) ans = 1 >> clear pi >> cos(pi) ans = -1 >> 3. si l’on utilise le type complex. x-y. Si x et y sont deux variables scalaires de type complexe. Si x et y sont deux variables scalaires de type réel. x-y. Est obtenu quand on essaie d’effectuer une opération nondéfinie comme 0/0 3. L’exponentiation s’obtient grâce au symbole ˆ (la syntaxe est xˆy).n)).n) retournent respectivement Stéphane Balac . x+y. x*y et x/y désignent les 4 opérations usuelles entre les valeurs de x et y dans C. realmin= 2. x+y. à ne pas écrire de boucles ayant i ou j comme indices.1 Calculer avec matlab Les constantes Les principales constantes sont : pi i j eps realmin realmax inf NaN : : : : : : : : précision numérique relative plus petit nombre à virgule flottante manipulable plus grand nombre à virgule flottante manipulable infini. Les noms des constantes n’est pas réservé. Pour que l’identificateur fasse à nouveau référence à la constante matlab. il suffit de supprimer la variable de même nom de la mémoire par la commande clear. La commande rem donne le reste (remainder) de la division entière de deux entiers (la syntaxe est rem(m. Les commandes lcm(m.n) et gcd(m.3 3.2251e − 308 et realmax= 1.Débuter avec matlab 28 . On fera attention par exemple. Par exemple sur une station SUN Ultra 1 on a eps= 2.2 Opérations et fonctions portant sur les scalaires Il est bien entendu possible d’utiliser matlab pour faire de simples additions (-:. Est obtenu quand on essaie d’évaluer une expression dont le résultat excède realmax not-a-number.

Les fonctions trigonométriques et hyperboliques sont : Stéphane Balac . racine carrée de x (s’obtient aussi par x. Lorsque la fonction est définie sur C. exponentielle de x.Débuter avec matlab 29 . partie réelle de z. valeur absolue de x. arrondi par défaut un réel positif et par excès un réel négatif. On dispose également de fonctions spécifiques aux complexes : conj(z) abs(z) angle(z) real(z) imag(z) : : : : : le conjugué de z. arrondi par défaut. l’argument peut être de type complexe. arrondi par excès.le plus petit multiple commun et le plus grand commun diviseur à deux entiers m et n.ˆ0. logarithme en base 10 de x. fonction valant 1 si x est strictement positif. Les fonctions mathématiques incorporées sont : log(x) log10(x) exp(x) sqrt(x) abs(x) sign(x) : : : : : : logarithme néperien de x. partie imaginaire de z. 0 si x est nul et -1 si x est strictement négatif. argument de z. Les fonctions d’arrondis sont : round(x) floor(x) ceil(x) fix(x) : : : : entier le plus proche de x. La commande factor(n) permet d’obtenir les termes de la décomposition en facteurs premiers de l’entier n.5). le module de z.

tangente hyperbolique (th). y=sqrt(x) y = Columns 1 through 7 1.Débuter avec matlab 30 . Si x et y sont deux vecteurs de longueur identique.1414 7. tangente. On obtient un vecteur z dont la ie composante est le produit (respectivement le quotient) de la ie composante du vecteur x par la ie composante du vecteur y en effectuant l’instruction z = x.4031 7. Attention à ne pas oublier le point ! La commande cross(x. sinus hyperbolique inverse (argsh).0000 9.4261 9. Les fonctions mathématiques incorporées décrites au paragraphe 3. cosinus hyperbolique inverse (argch). Il s’obtient grâce à l’instruction sum(x. sinus inverse (arcsin). sinus hyperbolique (sh)./y). 3.5678 6. tangente hyperbolique inverse (argth). tangente inverse (arctan).2 peuvent être utilisées avec un argument qui est un vecteur.5394 >> 5.5826 Columns 8 through 10 8.y) permet de calculer le produit vectoriel des deux vecteurs x et y.8102 Il existe également quelques fonctions spécifiques aux vecteurs2 : Stéphane Balac . l’instruction k*x multiplie tous les éléments de x par k.0000 3. La fonction est alors appliquée à tous les éléments du vecteur en même temps.3 Opérations et fonctions portant sur les vecteurs Une particularité de matlab est de permettre d’effectuer des opérations de manière globale sur les éléments d’un vecteur de type réel ou complexe sans avoir à manipuler directement ses éléments. >> x = [1:10:100].cos acos sin asin tan atan cosh acosh sinh asinh tanh atanh : : : : : : : : : : : : cosinus. sinus.*y). Il n’y a pas de commande dédiée pour calculer le produit scalaire de deux vecteurs. l’instruction z = x+y (respectivement x-y) définit le vecteur z dont les éléments sont z(i) = x(i) + y(i) (respectivement z(i) = x(i) .*y (respectivement z = x.y(i)). cosinus inverse (arccos). Si k est une variable scalaire et x un vecteur.3166 4. cosinus hyperbolique (ch).

renverse l’ordre des éléments du vecteur x. produit des éléments du vecteur x. ˆ (exponentiation). any(v) retourne vrai (1) si au moins un élément du vecteur est différent de 0 et faux (0) si le vecteur est composé exclusivement de 0. plus petit élément du vecteur x. plus grand élément du vecteur x. A+B désigne la somme de ces deux matrices et Aˆ2 le carré de la matrice A. Si v est un vecteur de valeurs numériques. Ainsi A*B désigne le produit de la matrice A par la matrice B.Débuter avec matlab 31 . >> sum(x) ans = 6 >> prod(x) ans = 6 >> max(x) ans = 3 3 3 Citons enfin quelques fonctions logiques. 4 5 6] A = 1 2 3 4 5 6 >> B = [1 1.sum(x) prod(x) max(x) min(x) mean(x) sort(x) : : : : : : somme des éléments du vecteur x. 2 2. 3 3] B = 1 1 2 2 3 3 >> C = A*B C = 14 14 32 32 >> C^2 ans = 644 644 1472 1472 >> 2 Ces commandes peuvent également être utilisées avec une matrice.4 Opérations et fonctions portant sur les matrices Si les opérandes sont des matrices. all(v) retourne vrai (1) si tous les éléments du vecteur sont différents de 0 et faux (0) si au moins un élément vaut 0. Dans ce cas la commande porte sur chaque vecteur colonne de la matrice. Les commandes all2 et any2 servent à tester si les éléments d’un vecteur sont nuls ou non.(soustraction). >> A=[1 2 3. . 3. les opérations + (addition). moyenne des éléments du vecteur x. sont alors les opérations matricielles usuelles. * (multiplication). ordonne les éléments du vecteur x par ordre croissant. >> min(x) ans = 1 >> sort(x) ans = 1 2 >> fliplr(x) ans = 2 1 >> fliplr(x) : >> x=[3 1 2]. Stéphane Balac .

>> A=[1 2 3. il faut faire précéder l’opérateur d’un point (. 4 5 6] A = 1 2 3 4 5 6 >> B=[1 2 3. j) est le produit des deux termes d’indices (i.Débuter avec matlab 32 .).Si les dimensions des matrices A et B sont incompatibles avec l’opération matricielle. Ainsi si A et B sont 2 matrices de même dimension. 1 2 3] B = 1 2 3 1 2 3 >> A.+B et A+B donnent le même résultat. De même la commande A. Pour cela.^2 ans = 1 4 16 25 >> 9 36 Les fonctions matricielles les plus courantes sont : Stéphane Balac .*B ans = 1 4 9 4 10 18 >> A. matlab renvoi un message d’erreur : >> A+B ??? Error using ==> + Matrix dimensions must agree. >> En plus des opérations matricielles usuelles. il est possible d’effectuer des opérations entre matrices «élément par élément». on obtient la matrice dont le terme d’indices (i. j) des matrices A et B par la commande A.*B. Bien entendu les commandes A.ˆ2 fournit la matrice dont les termes sont les carrés des termes de la matrice A.

Les exceptions sont les fonctions rank. 7 8 0]. 4 5 6 .det(A) eig(A) : : renvoie le déterminant de la matrice carrée A. – Si la matrice A est symétrique ou hermitienne. Si l’on souhaite également les vecteurs propres on exécutera [V. Ainsi dans l’exemple suivant il faut lire p(λ) = λ3 −6λ2 −72λ−27. L’algorithme mis en œuvre dépend de la structure de la matrice A du système. renvoie les valeurs propres (eigenvalues) de la matrice carrée A. |aij |2 .5 Résolution de systèmes linéaires La commande matlab \ (backslash) est la commande générique pour résoudre un système linéaire. renvoie le rang de la matrice carrée A.2) norm(A. renvoie l’exponentielle matricielle de A. renvoie la trace de la matrice A.Débuter avec matlab . – Si A est une matrice carrée mais n’entrant pas dans les deux cas précédents. norm(A) norm(A.j≤n Ces fonctions matricielles incorporée de matlab peuvent être utilisées avec un argument qui est une matrice « sparse ». norme infini de la matrice A. A f ro = 1≤i.inf) : : : : renvoie la norme 2 de la matrice A.’fro’) : norme de Frobenius de la matrice A. une 33 Stéphane Balac . A = max 1≤i≤n 1≤j≤n norm(A. matlab utilise dans l’ordre les méthodes suivantes : – Si A est une matrice triangulaire. même chose que norm(A). 3. le système est résolu par simple substitution. norme 1 de la matrice A. On sera vigilant à l’ordre dans lequel sont rangés les coefficients : le premier élément du vecteur est le coefficient du monôme de plus haut degré. la résolution est effectuée par la méthode de Choleski. A 1 = max ∞ 1≤j≤n 1≤i≤n |aij | .1) norm(A.D] = eig(A) qui renvoie une matrice diagonale D formée des valeurs propres de A et une matrice V dont les vecteurs colonnes sont les vecteurs propres correspondant. On peut obtenir les différentes normes d’une matrice A grâce à la commande norm. p = poly(A) p = 1 -6 -72 -27 poly(A) : inv(A) rank(A) trace(A) expm(A) : : : : renvoie l’inverse de la matrice carrée A. définie positive. |aij | . renvoie les coefficients du polynôme caractéristique associé à la matrice carrée A. expm et norm qui nécessitent de passer en stockage full (on exécutera donc rank(full(B)) par exemple). >> A = [1 2 3 .

bicg. Les commandes cgs. a_0] . >> p = [ 1. . des algorithmes particuliers sont mis en œuvre. x)’ . Dans le cas des matrices stockées sous forme sparse. x_max]). La commande polyval permet d’évaluer le polynôme p (la fonction polynômiale) en des points donnés. Utilisée avec la commande fplot. la commande polyval permet de tracer le graphe de la fonction polynômiale sur un intervalle [xmin . p(n+1) = a_0. -1]. Stéphane Balac . b=[1 1]’.0.. La syntaxe est polyval(p.Débuter avec matlab 34 . p(x) = an xn + an−1 xn−1 + · · · + a1 x + a0 est défini par un vecteur p de dimension n+1 contenant les coefficients {ai }i=0. Il est également possible d’utiliser des méthodes itératives.1.. .n rangés dans l’ordre décroissant des indices. grid >> On obtient les racines du polynôme p grâce à l’instruction roots(p)..3]). qr. xmax ] donné. bicgstab mettent par exemple en œuvre des méthodes de type gradient conjugué. – Si A n’est pas une matrice carrée. la méthode QR est utilisée.6 Les polynômes Sous matlab le polynôme de degré n. 0. >> A=[1 2 . x)’ . Chacune des méthodes précédentes peut être utilisée de manière spécifique grâce aux commandes chol.-1. >> polyval(p. Dans le second cas on obtient un vecteur contenant les valeurs de la fonction polynômiale aux différents points spécifiés dans le vecteur x.x) où x est une valeur numérique ou un vecteur.2]) ans = 3 0 -1 0 3 >> fplot(’polyval([ 1. >> x= A\b x = -1 1 >> A*x ans = 1 1 >> 3. .. . Le graphe de la fonction polynômiale est présenté à la figure 3.[-2.0) ans = -1 >> polyval(p. La syntaxe de l’instruction est fplot(’polyval([ a_n. lu. Voici par exemple comment définir le polynôme p(x) = x2 − 1... -1] .. [x_min ..3 4]. C’est-à-dire que l’on a p(1) = a_n.factorisation LU est réalisée en utilisant la méthode d’élimination de Gauss avec stratégie de pivot partiel. [-3. 0.

.n sont obtenus sous forme d’un vecteur p et sont rangés dans l’ordre décroissant des indices.0000 Stéphane Balac .. p(n+1) = a_0.. .0000 1.Débuter avec matlab 35 ..0000 0.0000 >> -1. .... C’est-à-dire que p(1) = a_n.n . Les coefficients {ai }i=0.8 7 6 5 4 3 2 1 0 −1 −3 −2 −1 0 1 2 3 Fig.0000 >> poly(r) ans = 1.. L’instruction poly permet d’obtenir la représentation canonique p(x) = an xn +an−1 xn−1 + · · · + a1 x + a0 d’un polynôme de degré n dont on connait les n racines {xi }i=1... 3 – Graphe de la fonction polynômiale p(x) = x2 − 1. >> r = roots(p) r = -1.

4 4. >> pi ans = 3. format court à 5 chiffres avec notation en virgule flottante. >> A = magic(4). L’autre façon d’afficher un tableau est de taper son nom. format long à 15 chiffres avec notation en virgule flottante. On obtiendra tous les formats d’affichage possibles en tapant help format. La commande disp se contente d’afficher le tableau sans écrire le nom de la variable ce qui peut améliorer certaines présentations. Par défaut le format est le format court à 5 chiffres. Pour revenir au format par défaut on utilise la commande format ou format short.Débuter avec matlab . >> disp(A) 16 2 3 5 11 10 9 7 6 4 14 15 >> A A = 16 2 3 5 11 10 9 7 6 13 8 12 1 13 8 12 36 Stéphane Balac .2 Affichage simple.006 >> format short >> 4.1006e+01 >> format short g >> pi^3 ans = 31. matlab dispose également des formats format short g et format long g qui utilise la « meilleure » des deux écritures à virgule fixe ou à virgule flottante. Les autres principaux formats sont : format long format short e format long e : : : format long à 15 chiffres.1416 >> format long >> pi ans = 3. On impose un format d’affichage en tapant l’instruction de format correspondante dans la fenêtre de contrôle. par exemple format long. la commande disp La commande disp permet d’afficher un tableau de valeurs numériques ou de caractères.14159265358979 >> format short e >> pi^3 ans = 3.1 Les entrées-sorties Les formats d’affichage des réels matlab dispose de plusieurs formats d’affichage des réels.

Une valeur numérique est directement affectée à la variable var tandis qu’une instruction matlab est évaluée et le résultat est affecté à la variable var. end if rep == ’o’ | rep == ’y’ disp([’Le resultat vaut ’. 4. Par exemple disp([’Le déterminant de la matrice A vaut ’. Cette donnée peut être une valeur numérique ou une instruction matlab. De même il est possible de lui spécifier un format d’affichage particulier de la valeur numérique . Un retour chariot provoque la fin de la saisie. num2str(res)]) end 4. rep = ’o’. On utilise également la commande disp pour afficher un résultat.Débuter avec matlab 37 . Si l’on souhaite saisir une réponse de type chaîne de caractères on utilise la syntaxe var = input(’ une phrase ’. Pensez à mettre un point virgule ( . Par exemple disp(’Calcul du déterminant de la matrice A’).) à la fin de l’instruction si vous ne souhaitez pas voir s’afficher var = . on consultera la documentation matlab pour plus de détails. if isempty(rep). En effet un tableau doit être d’un type donné. les éléments d’un même tableau ne peuvent donc être des chaînes de caractères et des valeurs numériques.’s’). Par défaut la commande num2str affiche 4 décimales mais il est possible de lui spécifier le nombre de décimales souhaité en second paramètre. Signalons qu’un retour chariot (sans autre chose) initialise la variable var au tableau vide []. Le modèle d’édition utilisé par matlab est le modèle d’édition du langage C. On remarque que l’usage de la commande disp est alors un peu particulier. Voici un exemple d’utilisation de la commande input (on suppose que la variable res contient une valeur numérique). si la chaîne de caractères contient une apostrophe il est impératif de doubler l’apostrophe.’s’).4 >> 14 15 1 On utilise fréquemment la commande disp avec un tableau qui est une chaîne de caractères pour afficher un message.4 Impressions dirigées par format La commande sprintf permet l’impression de variables selon un modèle donné. Attention. La phrase une phrase est affichée et matlab attend que l’utilisateur saisisse une donnée au clavier. Stéphane Balac .3 Lecture La commande input permet de demander à l’utilisateur d’un programme de fournir des données. en particulier sa longueur en nombre de caractères. Un modèle d’édition se présente sous la forme du symbole pourcent (%) suivi d’indications permettant de composer le contenu du champ à imprimer. rep = input(’ Affichage du resultat ? o/n [o] ’. num2str(det(A))]). Il est possible de provoquer des sauts de ligne pour aérer le présentation en utilisant le symbole \n de la manière suivante : var = input(’ \n une phrase : \n ’). La syntaxe est var = input(’ une phrase ’). On a donc recours à la commande num2str (« number to string ») pour convertir une valeur numérique en une chaîne de caractères. Sous cette forme il est impossible d’avoir une donnée de type chaîne de caractères dans la mesure où matlab essaie d’interpréter cette chaîne de caractères comme une instruction.

Par défaut le champ est justifié à droite (si la longueur de la variable est plus petite que la longueur du champ L. >> sprintf(’%s’. temps) ans = il fera beau a Brest >> sprintf(’%-30s’. sprintf(’%s’. – format est le format d’édition. Par défaut le champ est justifié à droite (si la longueur de la chaîne de caractères est plus petite que la longueur L du champ. Le symbole − (moins) permet de justifier à gauche. Modèle d’édition de caractères Un modèle d’édition de caractères est de la forme %Ls où % est le symbole de début de format et s le symbole précisant que la donnée est de type chaîne de caractères. Le symbole − (moins) juste après le symbole % permet de justifier à gauche.Dt. temps) ans = meteo : il fera beau a Brest >> Modèle d’édition des réels Un modèle d’édition de réel est de la forme % ± L. D est le nombre de décimales à afficher et t spécifie le type de notation utilisée. Le symbole + (plus) provoque l’affichage systématique d’un signe + devant les réels positifs. Il s’agit d’une chaîne de caractères contenant les modèles d’éditions des variables à imprimer. temps) ans = il fera beau a Brest >> sprintf(’meteo : %s’. L est un entier donnant la longueur total du champ (en nombre de caractères. où % est le symbole de début de format. des espaces sont insérés avant la chaîne de caractères). ’il fera beau a Brest’) ans = il fera beau a Brest >> temps = ’il fera beau a Brest’.La syntaxe de la commande sprintf est : sprintf(format. variables) où – variables est le nom des variables à imprimer suivant le modèle d’édition spécifié dans format . L est un entier donnant la longueur total du champ (en nombre de caractères). des espaces sont insérés à gauche). point virgule compris). En l’absence de l’entier L la longueur totale du champ est égale au nombre de caractères de la chaîne.temps) ans = il fera beau a Brest >> sprintf(’%30s’.Débuter avec matlab 38 . Les principales valeurs possibles pour t sont les suivantes : Stéphane Balac .

5 . 6 .6f) = %4.6f) = %4. >> Il est possible d’utiliser les symboles suivant dans les chaînes de caractères \n \t \b \r : : : : provoque le passage à une nouvelle ligne insère une tabulation horizontale décale l’impression du champ suivant d’un caractère vers la gauche saut horizontal >> z =[]. 2 .1415e+00) même notation mais E remplace e (ex : 3. 10 .2f’. >> x = [1:10].791759E+00 7. 8 .1415) la notation la plus compacte entre la notation à virgule flottante et la notation à virgule fixe est utilisée >> x = pi/3.0 | 6. log(x(i))]. x = [1:10].y) ans = exp(1.87 >> sprintf(’sin(%8. z ) ans = 1.047198) = 0.x) ans = 1 .y) ans = sin(1. y = sin(x).047198) = 8. 4 . >> s = sprintf(’%4.6E \n ’.0 | 1.000000E+00 2.386294E+00 5. for i=1:length(x).1f | %8.0 | 1.0 | 1. 7 .609438E+00 6. >> sprintf(’sin(%8.d e E f g : : : : : pour les entiers pour une notation à virgule flottante où la partie exposant est délimitée par un e minuscule (ex : 3.0 | 0.1415E+00) pour une notation à virgule fixe (ex : 3.2E’.098612E+00 4.931472E-01 3. 3 . x.’. colonne par colonne. x.0 | 1. >> sprintf(’ %d . end.Débuter avec matlab 39 . z = [z .945910E+00 Stéphane Balac .x(i). 9 .66E-01 >> Utilisations particulières La commande sprintf est « vectorielle » : si la variable n’est pas scalaire le format d’impression est réutilisé pour tous les éléments du tableau.0 | 1.

La commande fprintf est l’analogue de sprintf pour imprimer de variables selon un modèle donné dans un fichier.0 | 2.079442E+00 9.8. Stéphane Balac .Débuter avec matlab 40 . on le doublera %% pour qu’il ne soit pas interprété comme le début d’un format.0 | 2.0 | 2.302585E+00 >> Si l’on a besoin d’afficher le caractère %.197225E+00 10.

function [r. . . . .m. Ils sont également un élément important dans la programmation d’applications où les fonctions jouent le rôle des fonctions et procédures des langages de programmation usuels.. . . – vare1 .. . varsn ] = fonc(vare1 . . . .. Suit entre crochets les variables de sortie de la fonction. Si la fonction ne possède qu’une seule variable de sortie.q] = modulo(a.n) Arguments de sortie : r : le residu q : le quotient 41 Stéphane Balac .. varsn sont les variables de sortie de la fonction . – séquence d’instructions est le corps de la fonction. Un script est un ensemble d’instructions matlab qui joue le rôle de programme principal. Même si l’on ne souhaite pas à proprement parler écrire de programme.m on l’exécute dans la fenêtre matlab en tapant nom. On distingue 2 types de M-file. · · · . . varem sont les variables d’entrée de la fonction .m (d’où le nom M-file) pour être considéré par matlab comme un fichier d’instructions. varem ) séquence d’instructions où – vars1 . Il est en effet beaucoup plus simple de modifier des instructions dans un fichier à l’aide d’un éditeur de texte que de retaper un ensemble d’instructions matlab dans la fenêtre de commande. Un tel fichier doit obligatoirement avoir une extension de la forme . . . n − 1 (système de résidus considéré par la fonction incorporée mod). Dans l’exemple qui suit. .n) % % % % % % % % Calcule la valeur de a modulo n en prenant pour systeme de residus 1. . n au lieu de 0. Le fichier doit impérativement commencer par le mot-clé function.5 5. . n-1. Les fichiers de fonctions ont deux rôles.Débuter avec matlab . on définit une fonction modulo qui calcule la valeur de a modulo n en prenant pour système de résidus 1. Si le script est écrit dans le fichier de nom nom.q] = modulo(a. .m sans quoi cette fonction ne sera pas « visible » par matlab. les crochets sont inutiles. les fichiers de scripts et les fichiers de fonctions. n au lieu de 0. appel : [r.1 Programmer sous matlab Scripts et fonctions Il est possible d’enregistrer une séquence d’instructions dans un fichier (appelé un « M-file ») et de les faire exécuter par matlab. utiliser un script est très utile. le symbole =. le nom de la fonction et enfin les variables d’entrée entre parenthèses. . Les lignes qui suivent doivent être enregistrées dans un fichier de nom modulo. · · · . . Ils permettent à l’utilisateur de définir des fonctions qui ne figurent pas parmi les fonctions matlab incorporées (« built-in functions ») et de les utiliser de la même manière que ces dernières (ces fonctions sont nommées « fonctions utilisateur »). On définit la fonction fonc de la manière suivante : function [vars1 . . Il est impératif que la fonction ayant pour nom fonc soit enregistrée dans un fichier de nom fonc.

. % si le reste de la division entiere vaut 0.m) r = 2 q = 2 >> modulo(10.n*q..q = floor(a. .Débuter avec matlab 42 . end Les lignes précédées du symbole % sont des lignes de commentaire..q] = modulo(a. On ne peut écrire qu’une seule fonction par fichier (qui doit porter le nom de cette fonction). .5) ans = 5 >> Remarques : Il n’y a pas de mot-clé (par exemple end) pour indiquer la fin de la fonction. r = n. Les lignes de commentaire situées entre la ligne function . Une sous-fonction est une fonction écrite dans le même fichier qu’une autre fonction Stéphane Balac . >> [r. . La fonction est supposée se terminer à la fin du fichier.. .. n au lieu de 0./n).n) Arguments de sortie : r : le residu q : le quotient >> L’appel d’une fonction utilisateur s’effectue de la même façon que l’appel de n’importe quelle fonction matlab : >> b = 10 .q] = modulo(b. appel : [r. n-1. le residu vaut par convention n if r == 0. r = a . m = 4. >> help modulo Calcule la valeur de a modulo n en prenant pour systeme de residus 1.. Il est toutefois possible de provoquer un retour au programme appelant dans le corps de la fonction grâce à la commande return. Toutefois dans la version 5 de matlab existe la notion de « sous-fonction ». et la 1re ligne d’instructions sont affichées si l’on demande de l’aide sur la fonction modulo.

else A = fix(T*rand(m. on est obligé d’effectuer un appel de la forme [r. Si le fichier ne commence pas par le mot-clé function on a tout simplement écrit un script ! La gestion des variables d’entrée et de sortie est très souple sous matlab.m) Matale(T. Aussi.n)). d’une manière générale. Calcule le rang de la matrice si l’appel est effectue avec 2 arguments de sortie. Par contre.Débuter avec matlab 43 . le parametre n peut etre omis. Si l’on n’est intéressé que par le résidu et pas par le quotient. Stéphane Balac . On gère aussi les variables de sortie afin de ne pas calculer le rang de la matrice si aucune variable de sortie pour le résultat n’est prévue lors de l’appel.r] = A = A = Matale(T. on gère les variables d’entrée de la fonction de sorte de ne pas avoir besoin de donner lors de l’appel le nombre de lignes et de colonnes si la matrice est carrée. Il est également possible d’appeler une fonction donnée avec moins de variables d’entrée que le nombre indiqué pour la définition de la fonction (il faut bien entendu que le corps de la fonction soit programmé de sorte de prévoir cette éventualité).n) Matale(T.n) Matale(T.q] = modulo(10.r] = [A. on peut se contenter de ne mettre qu’une seule variable de sortie. Dans cet appel la variable v contiendra le résidu (la première variable de sortie).m) if nargin == 2 A = fix(T*rand(m)).m.rang] = matale(T. Voici un petit exemple venant illustrer ces possibilités. Si la matrice est carree.m. function [A.(dite principale) et qui ne sera utilisable que par cette fonction principale (une sousfonction ne peut pas être appelée par un autre sous-programme que la fonction principale). end if nargout == 2 rang = rank(A).4) et donc de définir une variable inutile. il est bon de ranger les variables de sortie par ordre « d’importance ». même si l’on ne souhaite recueillir que le quotient.n) % % % % % % % % % % % Construit une matrice A de m lignes et n colonnes ayant des elements entiers generes de maniere aleatoire entre 0 et T.m. end Dans cet exemple. Appels: [A. v = modulo(10. Il existe deux fonctions matlab utiles pour gérer cette situation : nargin qui retourne le nombre de variables d’entrée utilisés lors de l’appel et nargout qui retourne le nombre de variables de sortie prévues lors de l’appel.4).

Par exemple pour déclarer la variable numex globale on écrit global numex. Stéphane Balac . 5.3) A = 12 0 18 5 14 9 3 8 8 r = 3 >> A = matale(20. La communication avec des variables du programme principal (ou du « workspace ») ou avec des variables d’autres fonctions se fait uniquement par les variables d’entrée et sortie de la fonction.Débuter avec matlab 44 . Une variable globale peut être partagée entre un programme principal et plusieurs fonctions sans qu’il soit besoin de la spécifier parmi les variables d’entrée-sortie des différentes fonctions. Attention. la déclaration global numex doit être reprise dans chaque fonction utilisant numex comme variable.3.3) A = 8 7 2 17 16 4 1 0 3 >> Un point important concerne la gestion des variables entre le programme principal (ou le workspace) et les fonctions de l’utilisateur.>> [A. Toutes les variables définies à l’intérieur d’une fonction sont des variables locales à cette fonction. On déclare une variable globale grâce au mot clé global.2 Opérateurs de comparaison et opérateurs logiques Les opérateurs de comparaison sont : == > < > = < = ˜= : : : : : : égal à (x == y) strictement plus grand que (x >y) strictement plus petit que (x <y) plus grand ou égal à (x ≥ y) plus petit ou égal à (x ≤ y) différent de (x ˜= y) Les opérateurs logiques sont : & | ˜ : : : et (x & y) ou (x | y) non (˜ x) Les opérateurs de comparaison et les opérateurs logiques sont utilisés essentiellement dans les instructions de contrôle.r] = matale(20.3.4) A = 16 13 13 10 10 16 7 14 4 0 16 8 r = 3 >> [A. Une alternative existe toutefois : il est possible de déclarer certaines variables comme des variables globales.r] = matale(20. voir le paragraphe 5.

5. Ce processus est mis en œuvre par la « boucle for ».1 Boucle FOR : parcours d’un intervalle Une première possibilité pour exécuter une séquence d’instructions de manière répétée consiste à effectuer une boucle pour les valeurs d’un indice. La syntaxe est alors borne_inf : pas : borne_sup. Le pas peut être négatif. incrémenté à chaque itération.8 >> Stéphane Balac . end r = 1. 5. Il est possible d’imbriquer des boucles mais elles ne doivent pas se recouvrir. borne_sup. On parle du corps de la boucle. par contre il est interdit de modifier sa valeur s’il apparaît.3. pour les valeurs de la variable indice égales à borne_inf.1 r = 1 r = 0. variant entre deux bornes données.1:0.9 r = 0. Attention a bien gérer la borne supérieure ! Voici un exemple (idiot) venant illustrer les possibilités de variations de l’indice de la boucle >> for r=1. On peut utiliser un incrément (pas) autre que 1 (valeur par défaut).Débuter avec matlab 45 . – borne_inf et borne_sup sont deux constantes réelles (appelées paramètres de la boucle) .3 Instructions de contrôle Les instructions de contrôle sous matlab sont très proches de celles existant dans d’autres langages de programmation. borne_inf + 1. on passe à l’instruction qui suit immédiatement l’instruction de fin de boucle (end). Si borne_inf est strictement plus grand que borne_sup. num2str(r)]).75 disp([’r = ’. borne_sup − 1. Syntaxe : for indice = borne_inf : borne_sup séquence d’instructions end où – indice est une variable appelée l’indice de la boucle . D’autre part il n’est pas nécessaire que l’indice de la boucle apparaisse dans le corps de la boucle . · · · . le traitement séquence d’instructions est exécuté (borne_sup − borne_inf + 1) fois. Remarque : L’indice de boucle ne prend pas nécessairement des valeurs entières. Interprétation : Si borne_inf est plus petit ou égal à borne_sup.1:-0. – séquence d’instructions est le traitement à effectuer pour les valeurs d’indices variant entre borne_inf et borne_sup avec un incrément de 1.

faire Une seconde possibilité pour exécuter une séquence d’instructions de manière répétée consiste à effectuer une boucle tant qu’une condition reste vérifiée. .3. Remarque : expression logique est en général le résultat d’un test (par exemple i < Imax) ou le résultat d’une fonction logique (par exemple all(x)). Interprétation : Tant que expression logique est vraie le traitement séquence d’instructions est exécuté sous forme d’une boucle. Syntaxe : while expression logique séquence d’instructions end où – expression logique est une expression dont le résultat peut être vrai ou faux . Ce processus est mis en œuvre par la « boucle while ». >> for k = 1:n nfac = nfac*k. nfac = 1. >> k = 1.Débuter avec matlab 46 . >> nfac = 1. Lorsque expression logique devient faux. . On arrête de boucler dès que cette condition n’est plus satisfaite. on passe à l’instruction qui suit immédiatement l’instruction de fin de boucle (end). – séquence d’instructions est le traitement à effectuer tant que expression logique est vraie. Voici comment calculer n!3 avec une boucle while : >> n = 4. end >> nfac nfac = 24 >> 5.Voici un exemple d’utilisation d’une boucle pour calculer n!3 >> n = 4. Stéphane Balac . Il est impératif que le traitement de la séquence d’instructions agisse sur le résultat de expression logique sans quoi on boucle indéfiniment (-:.2 Boucle WHILE : tant que .

3 L’instruction conditionnée IF On a parfois besoin d’exécuter une séquence d’instructions seulement dans le cas où une condition donnée est vérifiée au préalable. – séquence d’instructions est le traitement à effectuer si expression logique est vraie. il n’y a pas de mot clé « then » dans cette instruction conditionnée.>> while k <= n nfac = nfac*k. . après exécution de la séquence d’instructions on reprend le programme à l’instruction qui suit le mot clé end. end >> nfac nfac = 24 >> 5. Il existe une séquence conditionnée sous forme d’alternatives : Syntaxe : if expression logique séquence d’instructions 1 else séquence d’instructions 2 3 Le lecteur attentif sait calculer n! plus simplement . Dans le cas contraire on exécute l’instruction qui suit le mot clé end.Débuter avec matlab 47 . Dans le cas où l’expression logique est vraie. L’instruction conditionnée la plus simple a la forme suivante : Syntaxe : if expression logique séquence d’instructions end où – expression logique est une expression dont le résultat peut être vrai ou faux .3. Interprétation : la séquence d’instructions n’est exécutée que si le résultat de l’évaluation de l’expression logique est vraie (c’est-à-dire vaut 1). Différentes formes d’instruction conditionnée existent sous matlab. .Comme par exemple en exécutant prod([1 :n]) Stéphane Balac . Remarque : Contrairement à certains langages de programmation. Notez également que la marque de fin de bloc conditionné est le mot clé end et non pas « endif ». k = k+1.

Il est possible d’effectuer un choix en cascade : Syntaxe : if expression logique 1 séquence d’instructions 1 elseif expression logique 2 séquence d’instructions 2 . . Stéphane Balac . – séquence d’instructions 1 est la séquence d’instructions à exécuter dans le cas où expression logique est vraie et séquence d’instructions 2 est la séquence d’instructions à exécuter dans le cas où expression logique est faux. etc. Remarque : Attention à ne pas laisser d’espace entre else et if . Il est bien entendu possible d’imbriquer des séquences d’instructions conditionnées (au sens où la séquence d’instruction conditionnée contient des séquences d’instructions conditionnée). Si aucune des expressions logiques 1 à N n’est vraie alors séquence d’instructions par défaut est exécutée. Le déroulement du programme reprend ensuite à la première instruction suivant le mot clé end. sinon si expression logique 2 est vraie la séquence d’instructions 2 est exécutée et le programme reprend ensuite à la première instruction suivant le mot clé end. Pour une meilleure lisibilité. sinon c’est la séquence d’instructions 2 qui est exécutée. il est recommandé d’utiliser des indentations afin de mettre en évidence l’imbrication des séquences d’instructions conditionnées. . Interprétation : Si expression logique est vraie la séquence d’instructions 1 est exécutée. le mot clé est elseif.end où – expression logique est une expression dont le résultat peut être vrai ou faux . elseif expression logique N séquence d’instructions N else séquence d’instructions par défaut end Interprétation : Si expression logique 1 est vraie la séquence d’instructions 1 est exécutée et le programme reprend ensuite à la première instruction suivant le mot clé end.Débuter avec matlab 48 .

– séquence d’instructions i est la séquence d’instructions à exécuter si var==cst_i. elseif numex == 2 A = magic(n).’). l’instruction switch Une alternative à l’utilisation d’une séquence d’instructions conditionnées pour effectuer un choix en cascade existe. Syntaxe : switch var case cst_1 . case cst_N . end 5. cst_N. cst_N. (par exemple cst_i) alors la séquence d’instructions correspondante (ici séquence d’instructions i) est exécutée.3. séquence d’instructions N otherwise séquence d’instructions par défaut end où – var est une variable numérique ou une variable chaîne de caractères .4 Choix ventilé. else error(’numero d’’exemple non prevu . . on initialise une matrice A en fonction de la valeur d’une variable numex (numéro d’exemple) de la manière suivante : if numex == 1 A = ones(n). . .. séquence d’instructions 2 . Il s’agit de l’instruction switch. Interprétation : Si la variable var est égale à l’une des constantes cst_1. . Par exemple.. . . – cst_1. .. Le programme reprend ensuite à la première instruction suivant le mot-clé end. ..Débuter avec matlab 49 . sont des constantes numérique ou des constantes chaîne de caractères .On utilise fréquemment un choix en cascade lors d’initialisation de données. séquence d’instructions 1 case cst_2 . Si la Stéphane Balac . elseif numex == 3 | numex == 4 A = rand(n).

A = ones(n) case 2.’o’}.4}. En utilisant un choix ventilé on obtient : switch numex case 1. otherwise error(’numero d’’exemple non prevu .’).variable var n’est égale à aucune des constantes la séquence d’instructions par défaut est exécutée. case ’chepas’ disp(’c’’est pourtant facile .. alors le programme continue à la première instruction suivant le mot-clé end.. cst_N...’). case { cst_k . .’n’} disp(’perdu . . A = rand(n)... case {’non’..Débuter avec matlab 50 . cst_N. switch rep case {’oui’. . disp(’bravo . . case {3. . . .. La syntaxe est alors. S’il n’y a pas de cas par défaut et si la variable var n’est égale à aucune des constantes cst_1. chepas) :’). A = magic(n). Remarque : La variable var doit bien entendu être du même type que les constantes cst_1. Si la séquence d’instructions à exécuter est la même pour différents cas il est possible de les regrouper.’)... rep = input(’Votre reponse (oui..} séquence d’instructions commune Reprenons l’exemple où l’on souhaite initialiser une matrice A en fonction de la valeur prise par une variable numérique numex (numéro d’exemple).’). end Voici un exemple de choix ventilé portant sur une variable de type chaîne de caractères. cst_l . end Stéphane Balac . non. Il n’est pas nécessaire de prévoir un cas par défaut (bien que cela soit préférable)..

end if nargin == 2 A = fix(T*rand(m)). L’instruction error permet d’arrêter un programme et d’afficher un message d’erreur. end if nargout == 2 rang = rank(A).rang] = matale(T. % Si la matrice est carree.r] = Matale(T. Il est possible d’indiquer à matlab de ne pas afficher les messages de mise en garde d’un programme en tapant warning off dans la fenêtre de commandes. % Calcule le rang de la matrice si l’appel est effectue avec 2 arguments % de sortie.m. L’instruction return provoque un retour au programme appelant (ou au clavier).n) % A = Matale(T. L’instruction warning permet d’afficher un message de mise en garde sans suspendre l’exécution du programme.n)). La syntaxe est warning(’ message de mise en garde ’). % % Appels: % [A.m. L’instruction break permet de sortir d’une boucle for ou d’une boucle while. L’instruction return est souvent utilisée conjointement avec une instruction conditionnée par exemple pour tester dans le corps d’une fonction si les paramètres d’entrée ont les valeurs attendues. L’exécution se poursuit alors séquentiellement à partir de l’instruction suivant le mot clé end fermant la boucle. error(’ La fonction matale doit avoir 2 ou 3 arguments d’’entree ’). En cas de boucles imbriquées.3..5 Interruption d’une boucle de contrôle Il est possible de provoquer une sortie prématurée d’une boucle de contrôle. else Stéphane Balac .n) % Construit une matrice A de m lignes et n colonnes ayant des elements % entiers generes de maniere aleatoire entre 0 et T.. if nargin == 2. else A = fix(T*rand(m. on arrete tout . if nargin ~= 2 & nargin ~= 3. on interrompt seulement l’exécution de la boucle intérieure contenant l’instruction break.5. rangx = m. La syntaxe est error(’ message d”erreur ’). On peut ainsi améliorer la fonction matale de la manière suivante : function [A.Débuter avec matlab 51 .m.m) % si la fonction est appelee avec un nombre d’arguments d’entree % different de 2 ou 3.m) % A = Matale(T.r] = Matale(T.n) % [A. Les instructions suivant le return ne sont donc pas exécutées. le parametre n peut etre omis. On rétablit l’affichage en tapant warning on.

c(x)) de l’entier x. Partant d’un carré d’ordre impair n = 2k + 1. 5.Initialisation de l’algorithme en plaçant l’unité dans la case immédiatement au dessous de la case centrale.Débuter avec matlab 52 . end if rang ~= rangx. L’instruction pause(n) suspend l’exécution du programme pendant n secondes. ??? Error using ==> matale La fonction matale doit avoir 2 ou 3 arguments d’entree >> A = matale(20. on place l’entier x + 1 suivant les règles suivantes : Stéphane Balac .rangx = min([m.m at line 34 A = 1 4 3 10 15 11 3 12 9 r = 2 >> La commande pause permet d’interrompre l’exécution du programme.3) Warning: Le rang n’est pas maximum > In /home0/maths/balac/DOCMATLAB/matale.n]). .4 Un exemple complet Une technique de construction de carrés magiques d’ordre impair a été proposée par Manuel Moschopoulos au début du XIV e siècle. autrement dit à l’intersection de la (k + 1)e colonne et de la (k + 2)e ligne : l(1) = k + 2.3) A = 8 18 8 12 14 18 15 3 18 >> [A. L’exécution normale reprend dès que l’utilisateur enfonce une touche du clavier. la technique de Moschopoulos peut se formuler comme suit : . end.Connaissant la position (l(x). end On obtient alors les messages suivants : >> A = matale(3). Notons l(x) le numéro de la ligne et c(x) le numéro de la colonne du carré sur lequel se trouve l’entier x. warning(’ Le rang n’’est pas maximum ’).r] = matale(20. Cette technique est décrite dans [1]. c(1) = k + 1.

La fonction magik met en œuvre la méthode de Moschopoulos. c(x + 1) = 1 + c(x) ( modulo n). . .l(x-1). . . .lx. .c(x-1))) = x.l(x-1).cx. c(1) = k+1. n − 1.c(x)] = pos(x-1. . si x est multiple de n.c(x)) = x.^2 [l(x).c(x-1).cy] = pos(x. le système de résidus que l’on considère est 1. alors l(x + 1) = 1 + l(x) ( modulo n). . error(msg) end k = (n-1)/2. ..n) % % Retourne la position (indice de ligne ly et indice de colonne cy) % dans le carre magique d’ordre nde l’entier y = x+1 selon la Stéphane Balac . % % Entree: % n : ordre du carre (entier impair) % Sortie: % M : le carre magique % if rem(n.Débuter avec matlab 53 .2) == 0. Dans ces règles pour la prise du modulo. 1. M(l(1). 2. % ou plus simplement M(pos(x. for x = 2:n. l(1) = k+2.. alors l(x + 1) = 2 + l(x) ( modulo n).n). msg = [’la methode de Moschopoulous ne construit que des carres’ . c(x + 1) = c(x) ( modulo n). M(l(x). function M = magik(n) % % Calcule le carre magique d’ordre n selon la methode % de Moschopoulous.’ d’’ordre impair’].si x n’est pas un multiple de n.c(1)) = 1. n et non pas 0. end function [ly.

Pour calculer la somme des éléments diagonaux c’est un peu plus compliqué.n). On vérifie que la somme des éléments des différentes lignes ainsi que la somme des éléments des différentes colonnes sont bien constantes.n) == 0 ly = modulo(2+lx.n).1) ans = 65 65 65 65 >> sum(magik(5). else ly = modulo(1+lx. On remarque que le carré magique construit diffère du carré magique retourné par la fonction matlab incorporée magic. end Voici quelques exemples d’utilisation de la fonction magik.% % % % % % % % % % % % regle de Moschopoulous. cy = modulo(1+cx. Entree: n : ordre du carre (entier impair) x : l’entier considere lx : indice de ligne de l’entier x dans le carre magique cx : indice de colonne de l’entier x dans le carre magique Sortie: ly : indice de ligne de l’entier y=x+1 dans le carre magique cy : indice de colonne de l’entier y=x+1 dans le carre magique if rem(x.n).Débuter avec matlab 54 . cy = modulo(cx.2) ans = 65 65 65 65 65 >> magic(5) ne construit que des carres d’ordre impair 3 16 9 22 15 65 Stéphane Balac .n). >> magik(4) ??? Error using ==> magik la methode de Moschopoulous >> magik(5) ans = 11 24 7 20 4 12 25 8 17 5 13 21 10 18 1 14 23 6 19 2 >> sum(magik(5).

http://www. Presses Polytechniques et Universitaires Romandes. Cours de Mathématiques de Première Année avec Exercices Corrigés Stéphane Balac.Débuter avec matlab 55 .org Stéphane Balac . Lausanne.ans = 17 23 4 10 11 24 5 6 12 18 1 7 13 19 25 8 14 20 21 2 15 16 22 3 9 Toutes les mathématiques de première année en un seul volume : Algèbre et Analyse. 2003 (ISBN: 2-88074-558-6). Frédéric Sturm Collection Sciences Appliquées de l’INSA de Lyon.ppur.

On ferme une fenêtre graphique précédemment ouverte en exécutant la commande close(n). Chaque fenêtre se voit affecter un numéro. La commande close permet de fermer la fenêtre graphique active.1 Graphisme Gestion des fenêtres graphiques Une instruction graphique ouvre une fenêtre dans laquelle est affiché le résultat de cette commande. On peut ouvrir une nouvelle fenêtre graphique par la commande figure. Le résultat d’une instruction graphique est par défaut affiché dans la dernière fenêtre graphique ouverte qui est la fenêtre graphique active. L’apparence de la fenêtre graphique peut varier légèrement suivant le système informatique utilisé.6 6. Fig. une nouvelle instruction graphique sera affichée dans la même fenêtre et écrasera la figure précédente. où n désigne le numéro de la figure.Débuter avec matlab 56 . La figure 4 représente la fenêtre graphique numéro 1 où est affiché le graphe de la fonction cosinus entre 0 et 2π. Il est également possible de fermer toutes les fenêtres graphiques en tapant close all. Stéphane Balac . où n désigne le numéro de la figure. Par défaut. 4 – Fenêtre graphique et résultat de la commande fplot(’cos’. On rend active une fenêtre graphique précédemment ouverte en exécutant la commande figure(n). résultat de la commande fplot(’cos’.[0 2*pi]). Ce numéro est visible dans le bandeau de la fenêtre sous forme d’un titre.[0 2*pi]).

[-2*pi 2*pi]).m de la manière suivante4 : function y=h(x) y=x. la commande fplot La commande fplot permet de tracer le graphe d’une fonction sur un intervalle donné. Il faut pour cela utiliser la commande fplot de la manière suivante : fplot(’[nom_f1 . Illustrons par des exemples les trois façons d’utiliser la commande fplot. soit le nom d’une fonction utilisateur. x_max . nom_f3]’. L’autre façon de procéder est d’exécuter l’instruction5 : fplot(’x*sin(x)’. 5. cos(x)/x]’. Il est possible de tracer plusieurs fonctions sur la même figure. on peut définir la fonction utilisateur h dans le fichier h.*sin(x) ou x*sin(x) Stéphane Balac .1 Graphisme 2D Tracer le graphe d’une fonction . [-5. Pour limiter le graphe aux ordonnées comprises entre les valeurs y_min et y_max on passera comme second argument de la commande fplot le tableau [x_min .*sin(x). On obtient alors le graphe de la fonction h par l’instruction : fplot(’h’. Dans les deux cas on obtient le dessin représenté à la figure 5. y_min .*sin(x) et non pas x*sin(x) là on a le choix entre écrire x. nom_f3 est soit le nom d’une fonction matlab incorporée. La syntaxe est : fplot(’nomf’. nom_f2 . [xmin . 1]) >> 4 5 attention de bien lire x. On obtient le graphe de la fonction incorporée sinus entre −2π et 2π par l’instruction : fplot(’sin’. [x_min . soit une expression définissant une fonction de la variable x.2 6.6. nom_f2. Pour tracer le graphe de la fonction h(x) = x sin(x) entre −2π et 2π. soit le nom d’une fonction utilisateur. soit une expression définissant une fonction de la variable x. xmax]) où – nomf est soit le nom d’une fonction matlab incorporée. y_max ]. [-2*pi 2*pi]). – [xmin . -1. Voici un exemple dont le résultat est affiché à la figure 6 : >> fplot(’[sin(x)/x .2. x_max]) où nomf_f1. [-2*pi 2*pi]). xmax] est l’intervalle pour lequel est tracé le graphe de la fonction. Il est également possible de gérer les bornes des valeurs en ordonnées.Débuter avec matlab 57 .

yi ) sont reliés entre eux par des segments de droites.01:2*pi]. On comprend très vite l’intérêt de gérer les bornes des valeurs en ordonnées si l’on exécute la commande fplot(’cos(x)/x’.2. Voici par exemple une autre façon de tracer le graphe de la fonction h(x) = x sin(x) entre −2π et 2π. Par défaut. La figure.y) >> Essayez aussi >> x=[-2*pi:1:2*pi]. yi ) i = 1. >> x=[-2*pi:0. y = x. >> plot(x.y) >> Stéphane Balac . · · · .*sin(x). qui n’est pas vraiment esthétique. n’est pas reproduite ici (-:.2 1 0 −1 −2 −3 −4 −5 −6 −4 −2 0 2 4 6 Fig.Débuter avec matlab 58 .2 La commande plot La commande plot permet de tracer un ensemble de points de coordonnées (xi .*sin(x). N . 5]) pour tracer le graphe de la fonction cos(x)/x entre −5 et 5. Bien entendu les vecteurs x et y doivent être de même dimension mais il peut s’agir de vecteurs lignes ou colonnes. 5 – Graphe de la fonction h(x) = x sin x entre −2π et 2π. >> plot(x. La syntaxe est plot(x.y) où x est le vecteur contenant les valeurs xi en abscisse et y est le vecteur contenant les valeurs yi en ordonnée. y = x. les points (xi . [-5. 6.

On peut spécifier à matlab quelle doit être la couleur d’une courbe.01 dans le premier cas et de 1 dans le deuxième cas) et on a calculé l’image par la fonction h de ces valeurs (vecteur y). Dans cet exemple on a défini un vecteur x de valeurs équi-réparties entre −2π et 2π (avec un pas de 0.8 0.6 sin(x)/x 0.4 −0.8 −1 −5 −4 −3 −2 −1 0 1 2 3 4 5 Fig. Pour cela on donne un troisième paramètre d’entrée à la commande plot qui est une chaîne de 3 caractères de la forme ’cst’ avec c désignant la couleur du trait. s le symbole du point et t le style de trait. trait plein pointillé court pointillé long pointillé mixte Stéphane Balac .2 0 cos(x)/x −0. y(i)).4 0. o x + * s d v ˆ < > p h point cercle marque x plus étoile carré losange triangle (bas) triangle (haut) triangle (gauche) triangle (droit) pentagone hexagone : – -.6 −0.Débuter avec matlab 59 . Les possibilités sont les suivantes : y m c r g b w k jaune magenta cyan rouge vert bleu blanc noir . On affiche les points de coordonnées (x(i).1 0.2 −0. yi ). 6 – Graphe des fonctions sin(x)/x et cos(x)/x entre −5 et 5. quel doit être le style de trait et/ou quel doit être le symbole à chaque point (xi .

*cos(x).N). >> 8 6 4 2 0 −2 −4 −6 −8 −10 −12 −5 −4 −3 −2 −1 0 1 2 3 4 5 Fig. y = rand(1. La commande grid permet d’obtenir un quadrillage de la figure. 7 – Résultat de la commande plot(x.x. Il n’est pas obligatoire de spécifier chacun des trois caractères. >> plot(x. y.’bd’). y2. >> y = x.z.^2. On peut se contenter d’en spécifier un ou deux. y1. whitebg >> 6 La commande whitebg permet de passer la fenêtre graphique en inverse vidéo Stéphane Balac . >> x = rand(1. >> x = [-5:0. comme paramètres de la commande plot.Les valeurs par défaut sont c = b. 5] la fonction x2 cos x en trait plein bleu et la fonction x cos x en trait pointillé rouge. voir par exemple la figure 4.Débuter avec matlab 60 .z. et t = .x.’r:’).N). on utilisera des options de couleurs et/ou de styles de traits distincts après chaque couple de vecteurs x. · · · .’b-’.’r :’). Voici un exemple dont le résultat est affiché à la figure 7.01:5]. >> plot(x.y. Si l’on souhaite que les courbes aient une apparence différente.’b-’. Il est possible de tracer plusieurs courbes sur la même figure en spécifiant plusieurs tableaux x1. s = .*cos(x). z = x. Voici un autre exemple amusant6 .y. On trace sur l’intervalle [−5.y. >> N=200. x2. Les autres seront les valeurs par défaut.ce qui correspond à un trait plein bleu reliant les points entre eux.

3 6.y). La syntaxe est title(’ le titre ’) pour obtenir comme titre le titre. La commande ylabel fait de même pour l’axe des ordonnées. la commande loglog(x. >> loglog(x.3 La commande loglog Si x et y sont deux vecteurs de même dimension.y) >> 10 9 10 8 10 7 10 6 10 5 10 4 10 3 10 2 10 1 10 0 10 0 10 1 10 2 10 3 Fig. Quelle est la pente de la droite ? >> x = [1:10:1000]. La commande xlabel permet de mettre un texte en légende sous l’axe des abscisses. y = x.1 Améliorer la lisibilité d’une figure Légender une figure Il est recommandé de mettre une légende à une figure.^3. 8 – Résultat de la commande loglog(x.Débuter avec matlab 61 . Stéphane Balac .6.2. La commande title permet de donner un titre à la figure. 6.y) permet d’afficher le vecteur log(x) contre le vecteur log(y). Voici un exemple dont le résultat est affiché à la figure 8.3. La commande loglog s’utilise de la même manière que la commande plot. La syntaxe est xlabel(’ légende ’) pour obtenir le mot légende en légende.

01:e]) grid hold off Stéphane Balac . Le résultat est présenté à la figure 10.01:e]. Voici un exemple d’utilisation de la commande hold on.[1/e e]) plot([-1:0. Pour rétablir la situation antérieure (le résultat d’une nouvelle instruction graphique remplace dans la fenêtre graphique le dessin précédent) on tapera hold off.posy.[-1:0. Une mire. apparaît. que l’on déplace en utilisant la souris. Pour cela on construit un tableau de type chaîne de caractères en convertissant la valeur contenue dans la variable en une chaîne de caractères grâce à la commande num2str. t = [0:.Débuter avec matlab 62 .01:2]. On obtiendra pour titre de la figure Exemple numero 5 par l’instruction : title([’Exemple numero ’. L’exemple suivant dont le résultat est affiché à la figure 9 illustre l’utilisation des différentes commandes permettant de légender une figure. grid xlabel(’temps en minutes’) ylabel(’concentation en gramme par litre’) title([’evolution de la concentration du produit ’. disons 5. supposons que la variable numex contienne le numéro de l’exemple traité.[-1 1]) fplot(’log’. plot(t. La syntaxe est text(posx.On peut aussi écrire un texte donné à une position précise sur la figure grâce à la commande text. . Il suffit d’un « clic-souris » pour que le texte apparaisse à la position sélectionnée. >> >> >> >> >> >> >> >> >> e = exp(1). Les résultats de toutes les instructions graphiques exécutées après appel à la commande hold on seront superposés sur la fenêtre graphique active. ’ au cours du temps ’]) >> gtext(’concentration maximale’) >> 6. c = 12*exp(-2*t) .3.c). num2str(numex)]). La commande gtext permet quant à elle de placer le texte à une position choisie sur la figure à l’aide de la souris.8*exp(-6*t).2 Afficher plusieurs courbes dans une même fenêtre Il est possible d’afficher plusieurs courbes dans une même fenêtre graphique grâce à la commande hold on. >> >> >> >> >> >> >> P = 5. Par exemple.. La syntaxe est gtext(’ un texte ’). Il est possible avec ces commandes d’afficher une valeur contenue dans une variable au milieu de texte. figure hold on fplot(’exp’. num2str(P)..’ un texte ’) où posx et posy sont les coordonnées du point (dans le système associé au déssin) où doit débuter l’écriture du texte un texte.

3). grid fplot(’acos’.4 1.1). Les fenêtres sont numérotées de gauche à droite et de haut en bas.4 0.n.i) où – m est le nombre de sous-fenêtres verticalement .5).[0 4*pi]). Suivant le contexte on privilégiera l’une de ces solutions plutôt que l’autre. 9 – Exemple de légendage d’une figure. title(’sinus’).3.6 0. grid 63 Stéphane Balac . subplot(2.[0 4*pi]).2 temps en minutes 1. title(’tangente’). grid fplot(’asin’.3.3. soit avoir recours à la commande hold on. – n est le nombre de sous-fenêtres horizontalement . La syntaxe est subplot(m. title(’cosinus’). L’exemple suivant dont le résultat apparaît à la figure 11 illustre l’utilisation de la commande subplot.[-1 1]).2). – i sert à spécifier dans quelle sous-fenêtre doit s’effectuer l’affichage. grid fplot(’sin’.4).evolution de la concentration du produit 5 au cours du temps 6 concentration maximale 5 concentation en gramme par litre 4 3 2 1 0 0 0. subplot(2.[-1 1]). grid fplot(’tan’. On peut soit donner plusieurs couples de vecteurs abscisses/ordonnées comme argument de la commande plot.[-pi/3 pi/3]). Il est possible de décomposer une fenêtre en sous-fenêtres et d’afficher une figure différente sur chacune de ces sous-fenêtres grâce à la commande subplot.Débuter avec matlab .3. title(’arc-cosinus’). On dispose donc de deux façons de superposer plusieurs courbes sur une même figure.6 1.3.8 2 Fig. title(’arc-sinus’).2 0. subplot(2. >> >> >> >> >> >> figure subplot(2. subplot(2.8 1 1. fplot(’cos’.

La syntaxe de la commande print est : print -f<num> -d<format> <nomfic> où – <num> désigne le numéro de la fenêtre graphique.6).3. Les principaux sont : ps psc eps epsc jpeg tiff : : : : : : PostScript noir et blanc PostScript couleur PostScript Encapsulé noir et blanc PostScript Encapsulé couleur Format d’image JPEG Format d’image TIFF 64 Stéphane Balac . une extension par défaut est ajoutée au nom du fichier en fonction du format choisi (.5 2 2. Si aucune extension de nom n’est donnée. title(’arc-tangente’). par exemple).jpg pour du jpeg. Ces formats sont nombreux.5 y = exp(x) 2 1. fplot(’atan’. – <format> est le format de sauvegarde de la figure. grid >> 6.ps pour du PostScript.5 y=x 1 0.3 2.5 Fig. c’est la fenêtre active qui est prise en compte. Si ce paramètre n’est pas spécifié.5 0 −0. – <nomfic> est le nom du fichier dans lequel est sauvegardée la figure.3 Sauvegarder une figure La commande print permet de sauvegarder la figure d’une fenêtre graphique dans un fichier sous divers formats d’images. On pourra obtenir la liste complète en tapant help plot. .5 y = log(x) −1 0.3.5 1 1.Débuter avec matlab . >> subplot(2. 10 – Superposition de plusieurs courbes dans la même fenêtre graphique.[-sqrt(3) sqrt(3)]).

>> Z = X.4 6.5 −1 arc−tangente 0 1 Fig.*exp(-X.Y.Y] = meshgrid(-2:. y) pour x ∈ [xmin .5 −1 −1 0 5 10 −1 0 5 10 −2 −1 0 1 arc−cosinus 3. ou être définie comme une fonction utilisateur. du domaine [xmin .Z).cosinus 1 1 sinus 2 tangente 0. 2] × [−2.Y.Débuter avec matlab 65 . Pour tracer les lignes de niveau de la fonction g(x.1 Graphisme 3D Tracer les lignes de niveau d’une fonction de 2 variables La commande contour permet de tracer les lignes de niveau d’une fonction de 2 variables réelles. ymax ] grâce à la commande meshgrid. ymax ] on procède de la manière suivante : – création d’un maillage.5 1 0 0 0 −0.2:2). 2 2 Ainsi pour tracer les lignes de niveau de la fonction (x. Cette fonction peut être définie par une expression matlab (par exemple x. Z = g(X. on exécute : >> [X.5 2 0 1.^2-Y.Y) soit directement en définissant la fonction par une expression matlab. y) −→ xe−(x +y ) sur le domaine [−2.^2).5 1 0. -2:. contour(X. soit par appel à la fonction utilisateur définissant la fonction. 2] en prenant un maillage de maille de longueur h = 0. – Affichage des lignes de niveau grâce à la commande contour. [X.5 0 −0.4.Z) >> Stéphane Balac .5 −0. y_min :h :y_max). xmax ]×[ymin .ˆ2)). xmax ] et y ∈ [ymin .2. >> contour(X.5 1 0.Y] = meshgrid(x_min :h :x_max.5 −1 −1 0 1 −1. de maille de longueur h.2:2. 11 – Fenêtre graphique décomposée en sous-fenêtres 6.ˆ2-y.5 3 2.*exp(-x.5 0. – Évaluation de la fonction aux nœuds de ce maillage.5 0 −1 0 1 −2 −1 1 2 arc−sinus 1.

5 −1 −1.Débuter avec matlab 66 . >> contour(X.5 2 Fig. 2 1. function x3 = g(x1.Z.5 −1 −0. il suffit d’appeler la fonction contour avec la valeur n comme quatrième paramètre.^2-x2.2:2).On peut également écrire une fonction utilisateur g.5 1 0.Z) >> Dans les 2 cas on obtient le résultat présenté à la figure 12.Y] = meshgrid(-2:.5 0 0.*exp(-x1. et exécuter >> [X. Pour imposer le nombre n de lignes de niveau à afficher.5 −2 −2 −1.5 1 1. 12 – Exemple de visualisation des lignes de niveau par la commande contour. Si l’on souhaite afficher les valeurs pour toutes les lignes de niveau. >> Z = g(X.5 0 −0.m. Le nombre de lignes de niveau est déterminé de manière automatique à partir des valeurs extrêmes prises par la fonction sur le domaine considéré. contour(X. on utilise la commande clabel de la manière suivante : Stéphane Balac .x2) x3 = x1.Y.Y).^2).n).2:2.Y. Il existe deux manières d’afficher les valeurs des lignes de niveau sur la figure. -2:.

Z.8 0.4 2.48 35 39 9 1 Fig.0968 8.h.2 58 1 −0.4 4.h] = contour(X.Y.^2. on utilise la commande clabel de la manière suivante : >> [C.2 0 0.6 4. 1] et pour choisir à l’aide de la souris les lignes de niveau pour lesquelles l’isovaleur doit être affichée.^2-Y).6 −1 −1 −0. -2:. y) −→ (x − 1)2 + 10 (x2 − y)2 sur le domaine [−1.4 −0.’manual’) On peut alors grâce à la souris sélectionner les lignes de niveau pour lesquelles on souhaite afficher la valeur.Y] = meshgrid(-2:.h) Si l’on souhaite afficher uniquement les valeurs de quelques lignes de niveau.8 −0.2:2. vous obtiendrez toutes les Stéphane Balac . >> [C.25 81 7.h] = contour(X.6 −0.6 0.2 −0.4 0. Il est possible de modifier la palette des couleurs en utilisant la commande colormap. >> Z = (X-1).419 0 4 −0.6 12 21 .8 15 . En tapant help graph3d dans la fenêtre de contrôle matlab.Y.5161 581 0. 1] × [−1.h. 1 0.2 0.2 0. 13 – Exemple de visualisation des lignes de niveau par la commande contour.9 67 7 −0.Débuter avec matlab 67 .>> [C.h] = contour(X.’manual’) >> Le résultat est présenté à la figure 13. Ainsi pour tracer 30 lignes de niveau de la fonction (x. on exécute : >> [X.2:2).^2 + 10*(X.n) >> clabel(C.Z.2 7 38 1.8 4.n) >> clabel(C.Y.8 26 .30).29 03 . >> clabel(C.Z.

30).2 −0.2:2.4 −0. La commande contourf s’utilise de la même manière que la commande contour.Débuter avec matlab 68 .6 −0. -2:.6 0.4 −0. La figure 14 présente un exemple d’utilisation de la commande contourf obtenu de la manière suivante : >> >> >> >> >> [X.Z. 14 – Exemple de visualisation des lignes de niveau par la commande contourf.Y] = meshgrid(-2:. Stéphane Balac .2 0.6 −0.2:2).^2-Y).2 0 0.Y.4 0. A vous de les tester pour obtenir le meilleur effet (-:.8 1 Fig. ce qui est très utile si l’on souhaite une impression de la figure sur une imprimante noir et blanc.8 −0.^2 + 10*(X. Elle permet d’afficher. un dégradé continu de couleurs qui varie en fonction des valeurs prises par la fonction. La commande colormap(gray) permet d’utiliser une palette en dégradé de gris.8 −1 −1 −0.^2. colormap(cool).2 0 −0.4 0. Z = (X-1).palettes de couleurs disponibles. contourf(X.8 0. 1 0. en plus des lignes de niveau.6 0.

5o et 30o . >> Z = X. l’instruction axis auto restaure la figure originale.^2). Il est possible de modifier ces valeurs (et également les valeurs extrêmes en abscisses et ordonnées) par la commande axis dont la syntaxe est axis(x_min x_max y_min y_max z_min z_max). >> mesh(X. ymax ] grâce à la commande meshgrid. Par défaut les valeurs extrêmes en z sont déterminées automatiquement à partir des extremums de la fonction sur le domaine spécifié. y).30).Débuter avec matlab 69 .Y).2 Représenter une surface d’équation z = g(x.Y.Y] = meshgrid(-2:. Il est également possible de modifier le point de vision grâce à la commande view. de maille de longueur h. – Affichage de la surface grâce à la commande mesh.Y] = meshgrid(-2:. Stéphane Balac . La fonction g peut être définie directement par une expression matlab ou être définie comme une fonction utilisateur.Z). soit par appel à la fonction utilisateur définissant la fonction. xmax ]×[ymin .Y. 2] × [−2. y_min :h :y_max).2:2). y) La commande mesh permet de tracer une surface d’équation z = g(x.x2) x3 = x1. – Évaluation de la fonction aux nœuds de ce maillage. La figure 17 montre par exemple le résultat de l’instruction view(37.m. Pour tracer la surface d’équation z = g(x. Si vous n’êtes pas satisfait du résultat. -2:.Z) >> Si la fonction est définie comme une fonction utilisateur dans le fichier g. Par défaut ces angles ont repectivement les valeurs −37.^2-Y. on exécute : >> [X.Z) >> Dans les 2 cas on obtient le résultat présenté figure 15. xmax ] et y ∈ [ymin . >> contour(X.Y] = meshgrid(x_min :h :x_max.2:2.5.2:2). >> Z = g(X.4.^2). [X. du domaine [xmin . mesh(X. y) pour x ∈ [xmin .*exp(-X. function x3 = g(x1.Y) soit directement en définissant la fonction par d’une expression matlab.2.Y. 2] avec un maillage de maillage de longueur h = 0. Z = g(X. 2 2 Ainsi pour tracer la surface d’équation z = xe−(x +y ) sur le domaine [−2. ymax ] on procède de la manière suivante : – création d’un maillage. La commande view a deux arguments qui sont l’angle de vision horizontal et l’angle de vision vertical en degré. on exécute : >> [X.^2-x2.6. La figure 16 montre par exemple le résultat de l’instruction axis([ -2 2 -2 2 -2 2]). -2:.2:2.*exp(-x1.

5 0 −0. La commande meshz permet de tracer une boite sous la surface. Stéphane Balac . y) grâce à la commande mesh. Les commandes meshc et meshz s’utilisent de la même manière que la commande mesh.0. Un exemple d’utilisation de ces commandes est présenté à la figure 18.5 2 1 0 0 −1 −2 −2 −1 1 2 Fig. La commande meshc permet d’afficher des lignes de niveau sous la surface dans le plan z = zmin .Débuter avec matlab 70 . 15 – Exemple de visualisation d’une surface d’équation z = g(x.

5 0 −0. 17 – Exemple de modification de l’angle de vision par la commande view.5 −1 −0.5 0 2 −0.5 −2 −1 0 1 2 −2 −1 0 1 Fig. Stéphane Balac .5 −2 2 1 0 −1 −2 −2 −1.Débuter avec matlab 71 .5 1 1.5 0 0.5 1 0.5 −1 −1.2 1. 16 – Exemple d’utilisation de la commande axis 0.5 2 Fig.

Stéphane Balac .5 2 1 0 0 −1 −2 −2 −1 1 2 Fig. y) grâce au commandes meshc et meshz.5 2 1 0 0 −1 −2 −2 −1 1 2 0.5 0 −0.Débuter avec matlab 72 .5 0 −0.0. 18 – Exemple de visualisation d’une surface d’équation z = g(x.

6.4.3

Représenter une surface paramétrée

La fonction G = (g1 , g2 , g3 ) peut être définie directement par une expression matlab ou être définie comme une fonction utilisateur. Pour tracer la surface paramétrée d’équation (E) pour u ∈ [umin , umax ] et v ∈ [vmin , vmax ] on procède de la manière suivante : – création d’un maillage de maille de longueur h du domaine de paramétrisation [umin , umax ] × [vmin , vmax ] grâce à la commande meshgrid, [U,V] = meshgrid(u_min :h :u_max, v_min :h :v_max). – Évaluation de la fonction aux nœuds de ce maillage, soit par appel à la fonction utilisateur définissant la fonction [X,Y,Z] = G(U,V) soit directement en définissant la fonction par d’une expression matlab. – Affichage de la surface grâce à la commande surf, surf(X,Y,Z). Ainsi pour tracer la surface paramétrée d’équations   x = v cos u, y = v sin u,  z = 2u. [U,V] = meshgrid(0:.2:2*pi, 0:.2:2); X = V.*cos(U); Y = V.*sin(U); Z = 2*U; surf(X,Y,Z) Si la fonction est définie comme une fonction utilisateur dans le fichier G.m, function [x1, x2, x3] = G(u,v) x1 = v.*cos(u); x2 = v.*sin(u); x3 = 2*u; on exécute : >> [U,V] = meshgrid(0:.2:2*pi, 0:.2:2); >> [X,Y,Z] = G(U,V); >> surf(X,Y,Z) Dans les 2 cas on obtient le résultat présenté figure 19. Stéphane Balac - Débuter avec matlab 73

La commande surf permet de tracer une surface paramétrée d’équations,   x = g1 (u, v), y = g2 (u, v), (E)  z = g3 (u, v).

sur le domaine [0, 2π]× [0, 2] avec un maillage de maillage de longueur h = 0.2, on exécute : >> >> >> >> >>

14 12 10 8 6 4 2 0 2 1 0 0 −1 −2 −2 −1 1 2

Fig. 19 – Exemple de visualisation d’une surface paramétrée grâce à la commande surf.

Stéphane Balac - Débuter avec matlab

74

Références
[1] Jean Luc Chabert, ed. Histoire d’algorithmes, du caillou à la puce. Regards sur la science, Belin, 1994. [2] Kermit Sigmon, 1993. Matlab Tutorial. http ://www.mines.utah.edu/gg_computer_seminar/matlab/matlab.html .

Toutes les mathématiques de première année en un seul volume : Algèbre et Analyse, Cours de Mathématiques de Première Année avec Exercices Corrigés Stéphane Balac, Frédéric Sturm Collection Sciences Appliquées de l’INSA de Lyon, Presses Polytechniques et Universitaires Romandes, Lausanne, 2003 (ISBN: 2-88074-558-6). http://www.ppur.org

Stéphane Balac - Débuter avec matlab

75

68 cos.Index ==. 30 acosh. 33 inverse. 12 disp. 30 atan. 62 hold off. 8. 44 ˜=. 33 diag. 28. 11 any. 44 &. 12 ceil. 47 inv. 30 déterminant. 29 expm. 23 diary. 37 instruction conditionnée. 29 for. 29 ans. 28 input. 36 fplot. 10 all. 65 contourf. 36 76 division entière. 24 gcd. 29 asin. 28 doc. 51 exp. 28 error. 62 i. 44 abs. 57 fprintf. 29 fliplr. 33 delete. 45 boucle while. 60 gtext. 31 angle. 29 factor. 29 arrondi. 46 break. 29 conjugué. 40 full. 30 cosh. 30 axis. 67 conj. 45 format. 47 imag. 29 fonctions trigonométriques. 29 choix ventilé. 30 atanh. 29 exponentielle matricielle. 56 colormap. 66 clear. 30 asinh. 28 grid. 49 chol. 41 fonctions hyperboliques. 36 formats d’affichage des réels. 29 factorisation LU. 11 edit. 62 hold on. 51 cd. 34 fenêtre graphique. 29 acos. 33 eps. 56 fix. 14. 30 aide en ligne. 28 close. 33 . 14. 29 fonction utilisateur. 31 floor. 31 exponentielle. 12 det. 33 exponentiation. 56 figure. 33 eye. 34 clabel. 30 cross. 21 facteurs premiers. 28 if. 14. 29 inf. 29 contour. 10 dir. 31 argument. 69 boucle for. 34. 12 eig. 14.

34 rand. 27 speye. 37 module. 29 racines d’un polynôme. 34 polynôme caractéristique. 28 rem. 18. 20 matrice tridiagonale. 27 sprand.ischar. 41 modèle d’édition. 34 M-file. 29 partie réelle. 21 palette des couleurs. 28 plot. 24 matrice par blocs. 24 norm. 41 sign. 61 lookfor. 31 sous-fonction. 42 sparse. 30 qr. 29 realmax. 33 rank. 35 polynôme. 63 77 . 67 Stéphane Balac . 65. 29 log10. 31 mean. 23 max. 37. 21 rang. 62 ones. 29 pause. 58 plus grand commun diviseur. 29 loglog. 33. 69 meshc. 70 meshgrid. 43 nargout. 69. 30 produit vectoriel. 13 j. 51 message de mise en garde. 25 spdiags. 12. 34 round. 51 roots. 33 méthode de gradient conjugué. 28 return. 34 magic. 33 real. 30 sinh. 28 lcm. 29 strcmp. 11 lu. 15 islogical. 41 méthode de Choleski. 29 sauvegarder une session. 29 sin. 16 lignes de niveau.Débuter avec matlab partie imaginaire. 64 prod. 29 logarithme. 28 realmin. 34 print. 18 load. 13 isreal. 51 min. 28 nargin. 13 isempty. 9 script. 21 matrice creuse. 19 sort. 37. 29 poly. 31 mesh. 14. 9 log. 24 sqrt. 31 mod. 29 plus petit multiple commun. 34 quit. 28 length. 18. 33 num2str. 27 sprintf. 39 spy. 70 message d’erreur. 43 nnz. 65 linspace. 14. 30 size. 16 subplot. 73 meshz. 52 pi. 33 polyval. 29 NaN. 31 produit scalaire. 33 norme. 9 save. 34 méthode QR. 7 racine carrée.

12 valeur absolue. 29 valeurs propres. 24 tril. 33 variables globales. 8 xlabel. 30 text. 33 trace. 61 zeros. 8 whos. 33 view. 60 who.sum. 21 Stéphane Balac . 16 vecteurs propres. 18. 69 warning. 46 whitebg. 31 surf. 73 switch. 23 triu.Débuter avec matlab 78 . 49 système linéaire. 62 title. 44 vecteur. 33 tan. 8 workspace. 33 transposée. 61 ylabel. 23 type. 44 variables locales. 51 while. 61 trace. 30 tanh.

You're Reading a Free Preview

Télécharger
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->