Vous êtes sur la page 1sur 36

Licence Sciences Physiques

3e année
Année Universitaire 2015-2016

Introduction aux méthodes numériques

1 Introduction à Matlab
1.1 Généralités
Matlab est un logiciel de calcul numérique développé par MathWorks 1 , utilisé dans de nombreux domaines
d’application aussi bien dans le domaine de l’éducation que dans le monde de la recherche et du développement
(notamment en ingénierie et en mathématiques appliqués). Matlab est un langage de programmation de
haut niveau doublé d’un environnement de calcul matriciel. Matlab est d’ailleurs l’abréviation de « Matrix
Laboratory », car toutes les variables dans Matlab sont considérées comme des matrices (un scalaire est par
exemple une matrice 1◊1). Matlab est un language de programmation interprété contenant de nombreuses
bibliothèques pré-programmées et une interface permettant la visualisation graphique des résultats. Matlab
propose donc des facilités de programmation et de visualisation, ainsi qu’un grand nombre de fonctions
réalisant diverses méthodes numériques. Cette première séance de TP est destinée à vous familiariser avec
l’usage de Matlab, en introduisant les commandes les plus courantes, et à faire vos premiers pas dans le
domaine du calcul numérique.

1.1.1 Accès et lancement


1. Lancer l’exécution de Matlab en ligne de commande depuis un terminal :
• se placer dans le répertoire dans lequel on souhaite travailler à l’aide de la commande cd (change-
ment de dossier/répertoire)
• taper matlab puis presser la touche Entrée.
2. Vérifier dans la barre d’outils en haut au centre que l’on se trouve bien dans le bon répertoire. Les
fichiers contenus dans le répertoire de travail doivent apparaître dans la fenêtre Current Directory.
Tous les fichiers d’instructions (scripts) et les fichiers de fonctions à appeler ultérieurement depuis la
fenêtre de commandes doivent se trouver dans le chemin d’accès (path) aux fichiers et fonctions de
Matlab qui peut être affiché à l’aide de la commande path.

intro lance une introduction à Matlab


demo lance une démonstration donnant une représentation des fonctionnalités de bases de Matlab
info fournit des informations sur Matlab et MathWorks
path affiche le chemin d’accès (path) aux fonctions et fichiers de Matlab
quit ou exit quitte/termine une session Matlab

Question 1. Exécuter l’introduction de Matlab, charger quelques démonstrations. Bref, faites un petit tour
du propriétaire !

1. http://www.mathworks.com/

1
1.1.2 Environnements
Par défaut lorsque matlab est lancé, on se trouve dans la fenêtre de commandes (Command Window)
dans laquelle il est possible de taper directement des instructions. L’invitation à taper des commandes est
symbolisée par des chevrons >> (prompt).
En tapant edit dans la fenêtre de commandes, on peut ouvrir un éditeur de texte (Editor) dans lequel
on peut créer ou éditer des scripts (ou fichiers d’instructions) contenant une succession d’instructions (lignes
de code) avec la coloration syntaxique de Matlab. Les scripts doivent être enregistrés avec l’extension .m. Un
script peut être lancé simplement en tapant son nom sans l’extension dans la fenêtre de commandes dès lors
qu’il se trouve dans le répertoire courant.
En tapant workspace dans la fenêtre de commandes, on peut ouvrir l’espace de travail (Workspace) dans
lequel sont stockées toutes les variables définies ainsi que leurs valeurs.
En tapant commandhistory dans la fenêtre de commandes, on peut ouvrir l’historique des commandes
(Command History) dans lequel on trouve toutes les commandes précédemment tapées dans la fenêtre de
commandes.
On peut également faire apparaître une des fenêtres Command Window, Command History, Current
Directory, Workspace ou Editor en cliquant sur Window dans la barre de navigation puis en sélectionnant la
fenêtre souhaitée.

edit ouvre un éditeur de texte (Editor)


workspace ouvre l’espace de travail (Workspace)
commandhistory ouvre l’historique des commandes (Command History)

Remarque : Dans les dernières versions de Matlab, la fenêtre Current Directory est appelée Current Folder,
et on peut faire apparaître ou disparaître une des fenêtres en cliquant sur Home dans la barre de navigation
puis en sélectionnant Layout.

1.1.3 Aide en ligne


Pour obtenir de l’aide sur une commande, on peut faire une requête directement dans la fenêtre de
commandes à l’aide de la commande help. On peut également faire apparaître le menu d’aide en cliquant
sur Help dans la barre de navigation puis en sélectionnant Product Help ou Function browser. Un menu de
recherche permet alors de taper une requête.

helpwin ouvre une fenêtre contenant la liste des commandes Matlab


ainsi que leurs documentations
helpdesk ou doc donne accès une documentation hypertexte complète supportée par le navigateur internet
help donne la liste de toutes les commandes Matlab par thèmes
help nom décrit la fonction nom .m
lookfor nom recherche une instruction dans l’aide en ligne à partir du mot-clé nom

Question 2. Charger l’aide en ligne de Matlab. Trouver la fonction qui donne les valeurs propres d’une
matrice. Taper help de cette fonction dans la fenêtre de commandes.

Solution

>> lookfor eigen


>> doc % ou helpdesk
>> help eig
eig Eigenvalues and eigenvectors.
E = eig(A) produces a column vector E containing the eigenvalues of
a square matrix A.

2
[V,D] = eig(A) produces a diagonal matrix D of eigenvalues and
a full matrix V whose columns are the corresponding eigenvectors
so that A*V = V*D.

[V,D,W] = eig(A) also produces a full matrix W whose columns are the
corresponding left eigenvectors so that W'*A = D*W'.

[...] = eig(A,'nobalance') performs the computation with balancing


disabled, which sometimes gives more accurate results for certain
problems with unusual scaling. If A is symmetric, eig(A,'nobalance')
is ignored since A is already balanced.

[...] = eig(A,'balance') is the same as eig(A).

E = eig(A,B) produces a column vector E containing the generalized


eigenvalues of square matrices A and B.

[V,D] = eig(A,B) produces a diagonal matrix D of generalized


eigenvalues and a full matrix V whose columns are the corresponding
eigenvectors so that A*V = B*V*D.

[V,D,W] = eig(A,B) also produces a full matrix W whose columns are the
corresponding left eigenvectors so that W'*A = D*W'*B.

[...] = eig(A,B,'chol') is the same as eig(A,B) for symmetric A and


symmetric positive definite B. It computes the generalized eigenvalues
of A and B using the Cholesky factorization of B.

[...] = eig(A,B,'qz') ignores the symmetry of A and B and uses the QZ


algorithm. In general, the two algorithms return the same result,
however using the QZ algorithm may be more stable for certain problems.
The flag is ignored when A or B are not symmetric.

[...] = eig(...,'vector') returns eigenvalues in a column vector


instead of a diagonal matrix.

[...] = eig(...,'matrix') returns eigenvalues in a diagonal matrix


instead of a column vector.

See also condeig, eigs, ordeig.

Overloaded methods:
codistributed/eig
gpuArray/eig
sym/eig

Reference page in Help browser


doc eig

3
1.1.4 Gestion des fichiers et commandes système
Pour gérer les différents fichiers d’un programme, on peut utiliser la fenêtre Current Directory ou à défaut
une des commandes suivantes.

pwd affiche le nom du répertoire courant pour Matlab


cd répertoire change le répertoire courant pour Matlab qui devient répertoire
mkdir répertoire créé un nouveau répertoire dans le répertoire courant pour Matlab
dir ou ls fournit le catalogue du répertoire courant
delete efface des fichiers ou des objets graphiques
getenv ' nom ' ou getenv(' nom ') renvoie la variable d’environnement nom
! appelle et exécute une commande système
unix ou dos appelle et exécute une commande système, renvoie le résultat

Question 3. Créer un nouveau répertoire de travail TP_intro dans le répertoire Documents et ajouter le au
chemin d’accès (path) (sélectionner le menu File puis Set Path). Fermer la session et rouvrir une nouvelle
session Matlab. Vérifier que le répertoire TP_intro se trouve dans le chemin d’accès (path). Si non, créer un
fichier pathdef.m (sélectionner le menu File puis Set Path) dans votre répertoire de démarrage. A chaque
démarrage de Matlab, il vous suffira de lancer la commande pathdef pour inclure TP_intro au chemin
d’accès (path). Cela permet de classer correctement ses documents dans une arborescence claire.

Solution

>> cd Documents
>> mkdir TP_intro
>> cd TP_intro

1.1.5 Gestion des variables : affichage et commentaires


Matlab est un language interprété, donc il n’y a pas d’étape de compilation, ni de déclaration de variable,
ni de réservation mémoire. Le dernier résultat d’une instruction ou d’une suite d’instructions tapée dans la
fenêtre de commandes est affiché et stocké dans la variable ans :
>> 5+8
ans =
13

Pour conserver le résultat, il faut l’assigner à une variable :


>> a=5+8
a =
13

Pour ne pas faire afficher le résultat, il faut mettre un point-virgule ; à la fin de la commande :
>> a=5+8;

Les instructions placées derrière le caractère % ne sont ni interprétées, ni exécutée par Matlab. Cela permet
notamment d’insérer des lignes de commentaires (apparaissant en vert dans l’éditeur et dans la fenêtre de
commandes) dans ses scripts et fonctions :
>> a = 3;
>> b = 4;
>> c = sqrt(a^2+b^2) % calcul d'une hypoténuse
c =
5

4
Et il faut commenter ses scripts, fonctions, . . . surtout ceux de l’examen !

% met en commentaire
; supprime l’affichage d’une commande
format style définit le format d’affichage dans la fenêtre de commandes
avec le style spécifié : short (défaut), long, shorte, longe, . . .

1.1.6 Variables prédéfinies

ans réponse à une expression sans assignation


eps précision numérique (de la virgule flottante) : 2.2204e≠16
realmin plus petit nombre à virgule flottante manipulable : 2.2251e≠308
realmax plus grand nombre à virgule flottante manipulable : 1.7977e+308
pi valeur de fi : 3.14159. . .
i ou j nombre imaginiaire : i2 =≠1, j2 =≠1
Inf nombre infini : Œ
NaN n’est pas un nombre (exprime parfois une indétermination)

1.1.7 Historique
Matlab conserve l’historique des commandes qui est visible dans la fenêtre d’historique des commandes
(Command History). Il est donc possible de récupérer des instructions déjà saisies (et ensuite de les modifier
dans le but de les réutiliser).

commandhistory ouvre l’historique des commandes (Command History)


ø, ¿, æ, Ω permet de se déplacer dans les lignes de commandes
tapées dans la fenêtre de commandes

1.1.8 Variables d’environnement


Matlab garde en mémoire les variables qui ont été créées. Celles-ci sont visibles dans la fenêtre de l’espace
de travail (Workspace). Il est donc possible de les afficher et de les effacer.

workspace ouvre la fenêtre espace de travail


who donne la liste des variables présentes dans l’espace de travail
whos donne la liste des variables présentes dans l’espace de travail, et leurs propriétés
what donne la liste des fichiers .m et .mat présents dans le répertoire courant
which localise une fonction ou un fichier
type affiche le contenu d’un fichier .m
clear var1 . . . varn efface les variables var1 . . . varn de l’espace de travail
clear efface toutes les variables créées dans l’espace de travail
clc efface le contenu de la fenêtre de commandes
pack réorganise la mémoire
exist vérifie l’existence d’une variable, d’une fonction, d’un dossier, ou d’une classe

Question 4.
1. Taper les commandes clear et a=1:7;. Taper les commandes a, who et whos.
2. Utiliser ø pour modifier la variable a : a=1:2;.
3. Taper la commande b=a+2;. Réexécuter les commandes who et whos en utilisant ø. Taper clear et b.

Solution

5
1. >> clear
>> a=1:7;
>> a
a =
1 2 3 4 5 6 7
>> who
Your variables are:
a
>> whos
Name Size Bytes Class Attributes
a 1x7 56 double

2. >> a=1:2;

3. >> b=a+2;
>> who
Your variables are:
a b
>> whos
Name Size Bytes Class Attributes
a 1x2 16 double
b 1x2 16 double
>> clear
>> b
? ? ? Undefined function or variable ’b’.

1.2 Opérations élémentaires


Les règles de priorité des opérations sont conformes à celles qui sont utilisées dans la plupart des langages de
programmation et suivent donc l’ordre usuel de prévalence.

Opérations Niveau de priorité


= affectation
+ ≠ addition, soustraction 3
* / multiplication, division 2
^ e exposant, puissance de 10 1

A niveau de priorité égal, les opérations sont effectuées de la gauche vers la droite. Les parenthèses permettent
alors d’organiser les priorités dans les calculs. Leur utilisation est recommandée pour éviter les ambiguïtés et
risques d’erreurs.

1.3 Types de données : scalaires, vecteurs et matrices


Matlab traite essentiellement un seul type d’objet mathématique : les matrices à valeurs entières, réelles
ou complexes ! Toutes les variables sont donc considérées comme des matrices : les scalaires sont des matrices
de taille 1◊1, les vecteurs lignes des matrices de taille 1◊n et les vecteurs colonnes des matrices de taille n◊1.
On peut définir une matrice dans Matlab de plusieurs façons :
• en entrant la liste de ses éléments ;
• en la générant par une suite d’instructions et de fonctions ;
• en la lisant dans un fichier extérieur.
Remarque : Matlab distingue les majuscules et les minuscules.

6
1.3.1 Affectation
On peut créer des vecteurs et des matrices en entrant leurs coefficients, ou en utilisant des commandes
spécifiques.
• scalaire :
>> a=10
a =
10

• vecteur ligne de taille 1◊3 (les espaces ou les virgules , séparent les éléments d’un vecteur ligne) :
>> x=[1 2 3] % ou x=[1,2,3]

x =
1 2 3

• vecteur ligne contenant les entiers de 1 à 10 par pas de 2 :


>> x=[1:2:10] % ou x=1:2:10
x =
1 3 5 7 9

• vecteur colonne de taille 3◊1 (les points-virgules ; séparent les éléments d’un vecteur colonne) :
>> y=[1;2;3]

y =
1
2
3

• vecteur colonne contenant les entiers de 8 à 10 par pas de 1 :


>> y=[8:10]' % ou x=[8:1:10]'
y =
8
9
10

• matrice de taille 2◊3 (les points-virgules ; séparent les lignes d’une matrice) :
>> M=[1 2 3; 4 5 6] % ou M=[1,2,3; 4,5,6]

M =
1 2 3
4 5 6

• chaîne de caractères sous forme d’un vecteur ligne (les guillements '' servent à délimiter la chaîne de
caractères) :
>> ch='matlab'

ch =
matlab

• nombre complexe z=a+ib (i est le nombre imaginaire : i^2=≠1) :


>> z=2+i

z =
2.0000 + 1.0000i

• polynôme P représenté sous forme d’un vecteur ligne contenant les coefficients classés dans l’ordre
des puissances décroissantes. Par exemple, représentation du polynôme P d’expression P(x)=x2 ≠6x+9 :
>> P=[1 ≠6 9]

7
P =
1 ≠6 9

• structure : variable à plusieurs champs de nature différente (l’accès aux différents champs se fait par la
commande point .) :
>> maillage.label='aile';
>> maillage.nbnodes=800;
>> maillage
maillage =
label: 'aile'
nbnodes: 800

1.3.2 Manipulation
Un coefficient quelconque d’un vecteur ligne (ou colonne) est référencé par son indice. Un coefficient
quelconque d’une matrice est référencé par ses indices de ligne et de colonne, dans cet ordre. Les indices d’un
vecteur ou d’une matrice commencent toujours à 1 (l’indice 0 n’existe pas).
• Accès au ie élément d’un vecteur par son indice i :
>> x(3) % renvoie la valeur de la 3≠ieme composante de x
ans =
5

• Accès à la (i, j)e composante d’une matrice par ses indices i et j :


>> M(2,1) % renvoie la valeur contenue dans la 2≠ieme ligne de la 1≠iere colonne de M
ans =
4

• Stockage des matrices dans Matlab sous forme d’un seul vecteur colonne :
>> C=[1 5 3; 2 4 6; 3 6 9]
C =
1 5 3
2 4 6
3 6 9
>> C(4)
ans =
5

• Extraction d’une ligne d’une matrice :


>> v=M(2,:)
v =
4 5 6

• Extraction d’une colonne d’une matrice :


>> v=M(:,2)
v =
2
5

• Extraction de sous-structures et concaténation :


• sur les vecteurs :

8
>> a=zeros(1,5);
>> a(1:3)=[1 3 4]
a =
1 3 4 0 0
>> b=[2,5];
>> a(b)=[≠2 3] % modification des composantes 2 et 5 de a
a =
1 ≠2 4 0 3
>> A=[2,3,4; 3,≠2,6]
A =
2 3 4
3 ≠2 6
>> L=[A,A] % ou L=[A A] concaténation horizontale
L =
2 3 4 2 3 4
3 ≠2 6 3 ≠2 6
>> C=[A;A] % concaténation verticale
C =
2 3 4
3 ≠2 6
2 3 4
3 ≠2 6
>> D=[A;[1,1,1]] % ajout d'une ligne de 1
D =
2 3 4
3 ≠2 6
1 1 1

• sur les matrices :


>> M=[1,2,3; 8,9,10; ≠2,≠3,0; 1,1,1]
M =
1 2 3
8 9 10
≠2 ≠3 0
1 1 1
>> E=M([1,2],[2,3]) % extraction d'une sous≠matrice
E =
2 3
9 10
>> M([1,2],[2,3])=[0,0; 0,0] % modification d'un sous≠tableau
M =
1 0 0
8 0 0
≠2 ≠3 0
1 1 1

• Recherche des éléments d’une matrice vérifiant une condition particulière à l’aide de la commande
find :

>> I=find(E>3) % renvoie dans I tous les indices de E remplissant la condition


I =
2
4

9
Question 5.
1. Construire une suite croissante de nombres allant de ≠8 à ≠5 par pas de 0.25.
2. Construire une suite décroissante d’entiers allant de 15 à 3.
3. Construire une suite de 100 nombres allant de ≠fi à fi.

Solution

1. >> x=≠8:0.25:≠5;
2. >> x=15:≠1:3;
3. >> x=linspace(≠pi,pi,100); % ou x=≠pi:2*pi/99:pi;

1.3.3 Opérations vectorielles/matricielles versus terme à terme


Toutes les variables étant considérées comme des matrices dans Matlab, les opérateurs usuels sont
surchargés en conséquence et étendus aux matrices selon les règles de l’algèbre linéaire. Une matrice peut
être vue comme un tableau de valeurs, indépendamment de l’algèbre linéaire. Matlab permet de travailler
avec les valeurs contenues dans un tableau.
Pour l’addition + et la soustraction ≠, il n’y a pas de différence entre matrice et tableau de valeurs. Pour
la multiplication *, la division / ou l’élévation à une puissance ^, on fait précéder le symbole d’opération
d’un point . pour effectuer l’opération terme à terme (sur chacune des valeurs d’un tableau). Matlab autorise
que les dimensions ne concordent pas lorsqu’une des variables est un scalaire, l’opération entre une matrice
et un scalaire est alors appliquée à chaque élément de la matrice.
• Produit de deux matrices carrées en utilisant le symbole * :
>> C=[1 2 3; 2 4 6; 3 6 9]
C =
1 2 3
2 4 6
3 6 9
>> D=C*C % ou D=C^2
D =
14 28 42
28 56 84
42 84 126

• Produit terme à terme de deux matrices carrées en utilisant le symbole .* :


>> D=C.*C % ou D=C.^2 ou D=C.^(2*ones(3))
D =
1 4 9
4 16 36
9 36 81

1.3.4 Opérations vectorielles


• Vecteurs

10
n:m vecteur ligne constitué des nombres de n à m par pas de 1
n:p:m vecteur ligne constitué des nombres de n à m par pas de p
linspace(n,m,p) vecteur ligne constitué de p nombres uniformément répartis
logspace(n,m,p) vecteur ligne constitué de p nombres répartis logarithmiquement
(ou équidistants) entre n et m
length(x) longueur de x
x(i) ie coordonnée de x
x(i1:i2) coordonnées i1 à i2 de x
[x,y] concaténation des vecteurs x et y
x' transposée de x
x*y' produit scalaire des vecteurs lignes x et y
x'*y produit scalaire des vecteurs colonnes x et y
dot(x,y) produit scalaire des vecteurs (lignes ou colonnes) x et y
reshape(x,m,n) crée une matrice de taille m ◊ n à partir de x

• Matrices
size(A) taille/dimension de A (nombre de lignes et de colonnes de A)
A(i,j) coefficient d’ordre i,j de A
A(i1:i2,:) lignes i1 à i2 de A
A(i1:i2,:)=[] suppression des lignes i1 à i2 de A
A(:,j1:j2) colonnes j1 à j2 de A
A(:,j1:j2)=[] suppression des colonnes j1 à j2 de A
A(:) concaténation des vecteurs colonnes de A (conversion matrice en vecteur)
A(i) coefficient d’ordre i dans l’indexation linéaire de A
diag(A) coefficients diagonaux de A

• Matrices particulières

zeros(m,n) matrice nulle de taille m ◊ n (dont tous les coefficients valent 0)


ones(m,n) matrice de taille m ◊ n dont tous les coefficients valent 1
eye(n) matrice identité de taille n
diag(x) matrice diagonale dont la diagonale est le vecteur x
magic(n) carré magique de taille n
rand(m,n) matrice aléatoire de taille m ◊ n à coefficients indépendants
et identiquement distribuées de loi uniforme U(0, 1) (de support [0 , 1])
randn(m,n) matrice aléatoire de taille m ◊ n à coefficients indépendants
et identiquement distribuées de loi normale N (0, 1) (de moyenne 0 et d’écart-type 1)

1.3.5 Opérations matricielles

11
A' transposée de A
inv(A) inverse de A
logm(A) logarithme matriciel de A
expm(A) exponentielle matricielle de A
sqrtm(A) racine carrée matricielle de A
det(A) déterminant de A
trace(A) trace de A
rank(A) rang de A
poly(A) polynôme caractéristique de A
eig(A) valeurs propres de A
[V,D]=eig(A) matrice diagonale D dont la diagonale principale contient les valeurs propres de A
et matrice V dont les colonnes sont les vecteurs propres associés tels que AV = DV
diag(A) extrait la diagonale de A
tril(A) extrait la partie triangulaire inférieure de A
triu(A) extrait la partie triangulaire supérieure de A
spy(A) représentation graphique des éléments non nuls de A
reshape(A,m,n) redimensionne A en une matrice de taille m ◊ n (avec les mêmes éléments)
repmat(A,m,n) créé une grande matrice par blocs contenant m ◊ n copies de A
(dans le cas de matrices de grande taille)
+ ≠ addition, soustraction
* ^ multiplication, puissance (matricielles)
.* .^ multiplication, puissance terme à terme
\ / division à gauche, division à droite (matricielles)
.\ ./ division à gauche, division à droite terme à terme
x=A\b solution du système linéaire A*x=b
x=b/A solution du système linéaire x*A=b
norm(A) ou norm(A,2) norme 2 de A
q
norm(A,1) norme 1 de A : ÎAÎ1 = maxj=1...n ni=1 |Ai,j |
qn
norm(A,inf) norme infini de A : ÎAÎŒ = maxi=1...n |A |
Òqj=1 qi,j
norm(A,'fro') norme de Frobenius de A : ÎAÎfro = n
i=1
n
j=1 |Ai,j |
2

cond(A) conditionnement de A en norme 2


condest(A) estimation du conditionnement de A en norme 1

Taper help matfun pour avoir la liste complète des fonctions matricielles proposées par Matlab.
Question 6.
1. Construire la matrice A définie par Q R
1 2 3
c d
A = a4 5 6b
7 8 9
en tapant
>> A = [1 2 3; 4 5 6; 7 8 9]
2. Quels sont les résultats des commandes suivantes ?
>> A([2 3],[1 3])
>> A([2 3],1:2)
>> A([2 3],:)
>> A([2 3],end)
>> A(:)
>> A(5)
>> reshape(A(:),size(A))

12
Solution

1. >> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9

2. >> A([2 3],[1 3])


ans =
4 6
7 9
>> A([2 3],1:2)
ans =
4 5
7 8
>> A([2 3],:)
ans =
4 5 6
7 8 9
>> A([2 3],end)
ans =
6
9
>> A(:)
ans =
1
4
7
2
5
8
3
6
9
>> A(5)
ans =
5
>> reshape(A(:),size(A))
ans =
1 2 3
4 5 6
7 8 9

Question 7.
1. Calculer les valeurs propres et vecteurs propres de A.
2. Construire une matrice C de même taille que A. Essayer A+C, A*C et A.*C.
3. Définir la matrice B comme étant la matrice A à laquelle on a ajouté le vecteur colonne [1; 2; 3].

13
Solution

1. >> [V,D] = eig(A) % ou [V,D] = eigs(A) % eigenvalues D and eigenvectors V of A


V =
≠0.2320 ≠0.7858 0.4082
≠0.5253 ≠0.0868 ≠0.8165
≠0.8187 0.6123 0.4082

D =
16.1168 0 0
0 ≠1.1168 0
0 0 ≠0.0000

2. >> C=ones(3) % ou C=ones(3,3)


C =
1 1 1
1 1 1
1 1 1
>> A+C
ans =
2 3 4
5 6 7
8 9 10
>> A*C
ans =
6 6 6
15 15 15
24 24 24
>> A.*C
ans =
1 2 3
4 5 6
7 8 9

3. >> B=[A,[1; 2; 3]]


B =
1 2 3 1
4 5 6 2
7 8 9 3

Question 8.
1. Créer des matrices particulières. Exemple de création d’une matrice par blocs :
>> C=[A, zeros(3,2); zeros(2,3), eye(2)]
2. Répliquer le vecteur colonne [1; 3; 6] pour en faire une matrice de taille 3◊19, de deux manières :
en utilisant la commande ones et en effectuant une multiplication matricielle, puis en trouvant la
commande de réplication.

Solution

14
1. >> C=[A, zeros(3,2); zeros(2,3), eye(2)]
C =
1 2 3 0 0
4 5 6 0 0
7 8 9 0 0
0 0 0 1 0
0 0 0 0 1

2. >> v=[1; 3; 6]
v =
1
3
6
>> M=v*ones(1,19)
M =
Columns 1 through 13
1 1 1 1 1 1 1 1 1 1 1 1 1
3 3 3 3 3 3 3 3 3 3 3 3 3
6 6 6 6 6 6 6 6 6 6 6 6 6
Columns 14 through 19
1 1 1 1 1 1
3 3 3 3 3 3
6 6 6 6 6 6
>> M=repmat(v,1,19)
M =
Columns 1 through 13
1 1 1 1 1 1 1 1 1 1 1 1 1
3 3 3 3 3 3 3 3 3 3 3 3 3
6 6 6 6 6 6 6 6 6 6 6 6 6
Columns 14 through 19
1 1 1 1 1 1
3 3 3 3 3 3
6 6 6 6 6 6

Question 9. Ecrire la matrice carrée M de taille 12◊12 contenant les entiers de 1 à 144 rangés par ligne.
Extraire de cette matrice les sous-matrices suivantes :
1. la sous-matrice formée par les coefficients mi,j pour i = 1, . . . , 6 et j = 7, . . . , 12 ;
2. celle des coefficients mi,j pour (i, j) œ {1, 2, 5, 6, 9, 10}2 .

Solution
Construction de la matrice M avec initialisation et indexation linéaire :
>> M=zeros(12); % ou M=zeros(12,12);
>> M(:)=1:144
M =
1 13 25 37 49 61 73 85 97 109 121 133
2 14 26 38 50 62 74 86 98 110 122 134
3 15 27 39 51 63 75 87 99 111 123 135

15
4 16 28 40 52 64 76 88 100 112 124 136
5 17 29 41 53 65 77 89 101 113 125 137
6 18 30 42 54 66 78 90 102 114 126 138
7 19 31 43 55 67 79 91 103 115 127 139
8 20 32 44 56 68 80 92 104 116 128 140
9 21 33 45 57 69 81 93 105 117 129 141
10 22 34 46 58 70 82 94 106 118 130 142
11 23 35 47 59 71 83 95 107 119 131 143
12 24 36 48 60 72 84 96 108 120 132 144
>> M=M'
M =
1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104 105 106 107 108
109 110 111 112 113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128 129 130 131 132
133 134 135 136 137 138 139 140 141 142 143 144

Construction de la matrice M en utilisant la fonction reshape :


>> M=reshape(1:144,12,12)'
M =
1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104 105 106 107 108
109 110 111 112 113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128 129 130 131 132
133 134 135 136 137 138 139 140 141 142 143 144

Extraction de sous-matrices :
1. >> M(1:6,7:12)
ans =
7 8 9 10 11 12
19 20 21 22 23 24
31 32 33 34 35 36
43 44 45 46 47 48
55 56 57 58 59 60
67 68 69 70 71 72

2. >> v=[1,2,5,6,9,10];
>> M(v,v)

16
ans =
1 2 5 6 9 10
13 14 17 18 21 22
49 50 53 54 57 58
61 62 65 66 69 70
97 98 101 102 105 106
109 110 113 114 117 118

Question 10. Résolution d’un système sous-dimensionné :


I
2x1 + x2 ≠ 3x3 = 1
x1 ≠ 2x2 + x3 = 2

1. Ecrire le système sous la forme matricielle Ax = b et calculer le rang de la matrice A.


2. Définir le vecteur c = [1; 1; 1] et déterminer l’image du vecteur c par la matrice A.
3. Résoudre l’équation Ax = b en utilisant la commande \
4. Essayer de résoudre l’équation Ax = b à l’aide de la fonction inv. Conclure.

Solution

1. >> A=[2,1,≠3; 1,≠2,1]


A =
2 1 ≠3
1 ≠2 1
>> b=[1; 2]
b =
1
2

2. >> c = [1; 1; 1];


>> A*c
ans =
0
0

Le vecteur c est un élément du noyau de la matrice A :


>> c/norm(c)
ans =
0.5774
0.5774
0.5774
>> null(A)
ans =
0.5774
0.5774
0.5774

17
3. >> x=A\b
x =
0
≠1.4000
≠0.8000

4. >> x=inv(A)*b
? ? ? Error using ==> inv
Matrix must be square.

La matrice A n’est pas carrée, elle ne risque pas d’être inversible ! La solution x obtenue en faisant
x=A\b est une solution particulière parmi l’ensemble des solutions du système sous-dimensionné.

1.4 Fonctions
Certaines fonctions de Matlab s’appliquent à l’ensemble d’un vecteur. Lorsqu’on les applique à des
matrices, elles opèrent colonne par colonne.
• Fonctions élémentaires

abs(x) valeur absolue ou module de x


sign(x) signe de x : fonction valant 1 si x est positif ou nul, 0 sinon
sqrt(x) racine carrée de x
exp(x) exponentielle de x
log(x) logarithme népérien de x
log10(x) logarithme décimal (en base 10) de x
sin(x) cos(x) tan(x) sinus, cosinus, tangente de x
asin(x) acos(x) atan(x) arc sinus, arc cosinus, arc tangente de x
round(x) arrondi vers l’entier le plus proche de x
floor(x) arrondi par défaut (vers ≠Œ) de x (ou partie entière de x)
ceil(x) arrondi par excès (vers +Œ) de x
fix(x) arrondi par défaut si x positif et par excès si x négatif (ou troncature de x)
rem(x,y) reste de la division entière de x par y : rem(x,y)=x≠fix(x./y).*y
mod(x,y) reste signé de la division entière de x par y : mod(x,y)=x≠floor(x./y).*y
angle(x) angle, en radians, de x
conj(x) complexe conjugué de x

Taper help elfun pour avoir la liste complète des fonctions élémentaires proposées par Matlab. Taper
help specfun pour avoir la liste complète des fonctions spéciales.
• Fonctions vectorielles

18
max(x) maximum de x (plus grand élément de x)
[y,I]=max(x) retourne en plus les indices I du maximum de x
min(x) minimum de x (plus petit élément de x)
[y,I]=min(x) retourne en plus les indices I du minimum de x
sort(x) trie/ordonne les éléments de x par ordre croissant
[y,I]=sort(x) retourne en plus les indices I des éléments de x
I=find(x) retourne les indices I des éléments non nuls de x
[I,J]=find(x) retourne les indices des lignes (dans le vecteur I)
et des colonnes (dans le vecteur J) des éléments non nuls de x
sum(x) somme des éléments de x
cumsum(x) vecteur contenant la somme cumulée des éléments de x
prod(x) produit des éléments de x
cumprod(x) vecteur contenant le produit cumulé des éléments de x
diff(x) vecteur des différences entre deux éléments consécutifs de x
factorial(x) vecteur contenant le factoriel des éléments de x
mean(x) moyenne des éléments de x
median(x) médiane des éléments de x
var(x) variance des éléments de x
std(x) écart-type des éléments de x

Question 11. Regarder l’effet des instructions suivantes :


>> x=rand(1,5)
>> mean(x)
>> std(x)
>> median(x)
>> sort(x)

>> A=rand(3)
>> sort(A)
>> [B,I]=sort(A)
>> sort(A')
>> max(A)
>> max(A')
>> max(max(A))
>> sum(A)
>> cumsum(A)
>> prod(A)
>> diff(A)

>> D=A([1,2],1:3)
>> sum(D,1)
>> sum(D,2)

Solution

>> x=rand(1,5)
x =
0.2785 0.5469 0.9575 0.9649 0.1576
>> mean(x)
ans =
0.5811

19
>> std(x)
ans =
0.3745
>> median(x)
ans =
0.5469
>> sort(x)
ans =
0.1576 0.2785 0.5469 0.9575 0.9649

>> A=rand(3)
A =
0.9706 0.8003 0.9157
0.9572 0.1419 0.7922
0.4854 0.4218 0.9595
>> sort(A)
ans =
0.4854 0.1419 0.7922
0.9572 0.4218 0.9157
0.9706 0.8003 0.9595
>> [B,I]=sort(A)
B =
0.4854 0.1419 0.7922
0.9572 0.4218 0.9157
0.9706 0.8003 0.9595

I =
3 2 2
2 3 1
1 1 3
>> sort(A')
ans =
0.8003 0.1419 0.4218
0.9157 0.7922 0.4854
0.9706 0.9572 0.9595
>> max(A)
ans =
0.9706 0.8003 0.9595
>> max(A')
ans =
0.9706 0.9572 0.9595
>> max(max(A))
ans =
0.9706
>> sum(A)
ans =
2.4131 1.3639 2.6674
>> cumsum(A)
ans =
0.9706 0.8003 0.9157
1.9278 0.9422 1.7079

20
2.4131 1.3639 2.6674
>> prod(A)
ans =
0.4509 0.0479 0.6961
>> diff(A)
ans =
≠0.0134 ≠0.6584 ≠0.1235
≠0.4718 0.2799 0.1673

>> D=A([1,2],1:3)
D =
0.9706 0.8003 0.9157
0.9572 0.1419 0.7922
>> sum(D,1)
ans =
1.9278 0.9422 1.7079
>> sum(D,2)
ans =
2.6866
1.8913

Question 12. Calculer 10! en utilisant la fonction prod puis la fonction factorial.

Solution

>> prod(1:10)
ans =
3628800
>> factorial(10)
ans =
3628800

Question 13.
1. Construire le vecteur y de taille 8 défini par

y = (3.2, 4.8, 3.3, 3.2, 3.1, 4.2, 3.2, 3.3)

2. Construire la suite des moyennes empiriques (ȳn )n>1 définie par

1ÿ n
ȳn = yi
n i=1

Extraire ȳ8 . Donner une fonction qui calcule directement ȳ8 à partir de y.

Solution

21
1. >> y=[3.2 4.8 3.3 3.2 3.1 4.2 3.2 3.3]
y =
3.2000 4.8000 3.3000 3.2000 3.1000 4.2000 3.2000 3.3000

2. >> vmoy=cumsum(y)./(1:length(y))
vmoy =
3.2000 4.0000 3.7667 3.6250 3.5200 3.6333 3.5714 3.5375
>> moy=vmoy(end)
moy =
3.5375
>> moy=mean(y) % ou moy=sum(y)/length(y)
moy =
3.5375

Question 14. Tirer 20 nombres aléatoirement (et uniformément) dans l’intervalle [0 , 1]. Quelle est la valeur
minimale du vecteur et la position du coefficient qui la réalise ? Vérifier.

Solution

>> x=rand(1,20)
x =
Columns 1 through 10
0.2548 0.2240 0.6678 0.8444 0.3445 0.7805 0.6753 0.0067 0.6022
0.3868
Columns 11 through 20
0.9160 0.0012 0.4624 0.4243 0.4609 0.7702 0.3225 0.7847 0.4714
0.0358
>> [xmin,I]=min(x)
xmin =
0.0012

I =
12

Question 15. Soit X une matrice 2◊n contenant les coordonnées de n points du plan. Comment faire pour
obtenir une matrice où les points sont ordonnés par ordre croissant des abscisses ?

Solution

>> n=10;
>> X=rand(2,n);
X =
0.6557 0.8491 0.6787 0.7431 0.6555 0.7060 0.2769 0.0971 0.6948
0.9502
0.0357 0.9340 0.7577 0.3922 0.1712 0.0318 0.0462 0.8235 0.3171
0.0344
>> [Y,I]=sort(X(1,:))

22
Y =
0.0971 0.2769 0.6555 0.6557 0.6787 0.6948 0.7060 0.7431 0.8491
0.9502

I =
8 7 5 1 3 9 6 4 2 10
>> Z=X(:,I)
Z =
0.0971 0.2769 0.6555 0.6557 0.6787 0.6948 0.7060 0.7431 0.8491
0.9502
0.8235 0.0462 0.1712 0.0357 0.7577 0.3171 0.0318 0.3922 0.9340
0.0344

Question 16. Reprendre le vecteur y. Pour rappel, taper y.


1. Existe-t-il une coordonnée du vecteur y inférieure à 3.3 ?
2. Construire un vecteur logique z tel que la ie coordonnée de ce vecteur sera 1 si la ie coordonnée du
vecteur y est à l’extérieur de l’intervalle [ȳ8 ≠ ‡8 , ȳ8 + ‡8 ], où ‡8 est l’écart-type (racine carrée de la
variance) d’échantillonnage.

Solution

1. >> y
y =
3.2000 4.8000 3.3000 3.2000 3.1000 4.2000 3.2000 3.3000
>> I=find(y<3.3)
I =
1 4 5 7

2. >> I=find(mean(y)≠std(y)>y | y>ymean(y)+std(y))


I =
2 6
>> z=zeros(size(y));
>> z(I)=1
z =
0 1 0 0 0 1 0 0
>> z=mean(y)≠std(y)>y | y>mean(y)+std(y)
z =
0 1 0 0 0 1 0 0

Question 17.
1. Tirer 100 nombres aléatoirement (et uniformément) dans l’intervalle [0 , 1] et grouper les dans un
vecteur x = (xi )16i6100 .
2. Construire le vecteur y = (yi )16i6100 tel que yi = 2xi .
3. Construire le vecteur z = (zi )16i6100 tel que zi = Âyi Ê, correspondant à la partie entière de yi , à l’aide
de la fonction floor.
4. Donner la fréquence de 1 sur l’échantillon z. Pouvait-on s’attendre à ce résultat ?

23
Solution

1. >> x=rand(1,100);
2. >> y=2*x;
3. >> z=floor(y);
4. >> freq=mean(z)
freq =
0.5100

Environ la moitié (51%) des composantes du vecteur z valent 1, et l’autre moitié 0. D’après la loi des
grands nombres, plus le nombre n d’éléments (tirés aléatoirement) du vecteur x est élevé (ici n = 100),
plus la fréquence de 1 sur l’échantillon z est proche de 50%.

1.5 Fichiers : scripts, commandes structurées et fonctions


1.5.1 Scripts
Les scripts (ou fichiers d’instructions) sont des fichiers texte avec une extension .m. Ils contiennent
des suites d’instructions Matlab qui sont exécutées les unes après les autres. Si un fichier d’instructions
mon_script.m est placé dans un répertoire accessible, la commande mon_script devient une commande
Matlab comme toutes les autres.

1.5.2 Opérations relationnelles et logiques


Les opérateurs relationnels et logiques permettent de relier logiquement deux matrices. Ils peuvent être
utilisés avec des scalaires, des vecteurs ou des matrices. Le résultat d’une expression relationnelle est un
booléen valant 1 (vrai) ou 0 (faux). Appliqués à une matrice, ils rendent une matrice de même dimension
formée de 1 et de 0.

Opérateurs relationnels Opérateurs logiques


< inférieur à & ou && et
> supérieur à | ou || ou
<= inférieur ou égal à xor ou exclusif
>= supérieur ou égal à ≥ ou not non
== égal à
≥= différent de

Remarque : Attention à ne pas confondre = qui sert à affecter une valeur à une variable et == qui sert à
tester l’égalité.

1.5.3 Tests - Instructions conditionnelles


Syntaxe des blocs if . . . then . . . elseif . . . then . . . else . . . end :

24
if conditions si les conditions sont vérifiées,
instructions alors les instructions sont exécutées.
end
if conditions si les conditions sont vérifiées,
instructions1 alors les instructions1 sont exécutées,
else sinon,
instructions2 alors les instructions2 sont exécutées.
end
if conditions1 si les conditions1 sont vérifiées,
instructions1 alors les instructions1 sont exécutées,
elseif conditions2 si les conditions1 ne sont pas vérifiées mais les conditions2 le sont,
instructions2 alors les instructions2 sont exécutées.
else sinon (si ni les conditions1 ni les conditions2 ne sont vérifiées),
instructions3 alors les instructions3 sont exécutées.
end

Question 18.
1. Créer le script test_si.m suivant :
if a>0
b=0
else
b=1
end

2. Exécuter le script test_si.m dans la fenêtre de commandes :


>> a=1;
>> test_si
b =
0

Question 19.
1. Créer le script pile_ou_face.m qui simule le lancer d’une pièce de monnaie :
u=rand;
if u<p
disp('pile')
else
disp('face')
end

2. Exécuter le script pile_ou_face.m dans la fenêtre de commandes :


>> p=0.5;
>> pile_ou_face

Remarque : Une proposition logique (par exemple (x>0 & x<10) a pour valeur 1 si elle est vraie et 0 sinon.
Dans les calculs, on peut donc éviter d’utiliser l’instruction if en introduisant des indicatrices d’ensembles.

1.5.4 Boucles - Instructions répétitives


Syntaxe des boucles for et while :

25
for variable = vecteur les colonnes du vecteur sont affectées l’une après l’autre à la variable , et
instructions pour chaque valeur prise par la variable , les instructions sont exécutées.
end
while conditions tant que les conditions sont vérifiées,
instructions les instructions sont exécutées.
end

Une boucle for s’arrête à un rang fixé, tandis qu’une boucle while s’arrête conditionnellement. On donne les
instructions de rupture de séquence dans le tableau suivant. Il vaut mieux cependant mieux programmer
suffisamment proprement pour s’en dispenser !

break termine l’exécution de la boucle for ou while la plus proche


return termine l’exécution d’un fichier .m sans aller jusqu’à la fin
warning('texte') affiche la chaîne de caractères 'texte'
et continue l’exécution du programme en cours
error('texte') affiche le message d’erreur 'texte'
et interrompt l’exécution du programme en cours

Question 20. Tester les boucles for et while suivantes :


>> a=zeros(1,5);
>> for i=1:5
a(i)=2*i≠1;
end
>> a
a =
1 3 5 7 9
>> b=0;
>> while (b<5)
b=b+1;
end
>> b
b =
5

1.5.5 Choix
Syntaxe de la commande switch permettant d’effectuer un choix selon la valeur d’une expression :

switch expression
case cas1 dans le cas où l’ expression est égale au cas1 ,
instructions1 les instructions1 sont exécutées,
case cas2 dans le cas où l’ expression est égale au cas2 ,
instructions2 les instructions2 sont exécutées,
case cas3 dans le cas où l’ expression est égale au cas3 ,
instructions3 les instructions3 sont exécutées,
otherwise autrement,
instructions4 les instructions4 sont exécutées,
end

Question 21.
1. Créer le script choix.m suivant :

26
switch message
case 'Erreur'
sprintf('Attention erreur')
case 'Avertissement'
sprintf('Attention script incomplet')
otherwise
sprintf('Tout est OK')
end

2. Exécuter le script choix.m dans la fenêtre de commandes :


>> message='Erreur';
>> choix
ans =
Attention erreur

1.5.6 Fonctions
Comme pour les fichiers d’instructions, les fichiers de fonctions sont des fichiers texte avec une extension
.m. Leur syntaxe est particulière : ils nécessitent des arguments en entrée et renvoient des variables en sortie.
Ils contiennent la définition d’une fonction et portent le nom de cette fonction (avec l’extension .m). Si un
fichier de fonctions ma_fonction.m est placé dans un répertoire accessible, la fonction ma_fonction devient
une fonction Matlab comme toutes les autres. Le texte placé en commentaire sous la définition de la fonction
est le contenu de l’aide pour celle-ci.

Syntaxe d’un fichier nom_fonction.m contenant une fonction nom_fonction :


function [ sortie1 , sortie2 ,. . .]=nom_fonction( entrée1 , entrée2 ,. . .)
% Documentation renvoyée par la commande help nom_fonction
Corps de la fonction contenant des instructions

function définit une fonction (dans un fichier portant le même nom que la fonction avec l’extension .m)
nargin nombre d’arguments en entrée d’une fonction
nargout nombre d’arguments en sortie d’une fonction
varargin liste d’arguments variable en entrée d’une fonction
varargout liste d’arguments variable en sortie d’une fonction

Question 22.
1. Créer le fichier val_abs.m contenant la fonction val_abs :
function [b,pos]=val_abs(a)
% Renvoie la valeur absolue (b) et un booléen traduisant la positivité de a (pos)
if a>0
b=a;
pos=true;
else
b=≠a;
pos=false;
end

2. Exécuter la fonction val_abs dans la fenêtre de commandes :

27
>> a=≠5;
>> [b,pos]=val_abs(a)
b =
5

pos =
0

1.5.7 Sauvegarde et chargement

diary sauvegarde le texte d’une session Matlab


save nom ou save(' nom ') sauvegarde l’ensemble des variables existant
dans l’espace de travail dans un fichier binaire nom .mat
save nom var1 . . . varn sauvegarde les variables var1 . . . varn
ou save(' nom ', ' var1 ', . . . , ' varn ') dans un fichier binaire nom .mat
save ≠ascii nom var1 . . . varn sauvegarde la valeur des variables var1 . . . varn
dans un fichier texte nom
load nom ou load(' nom ') permet de récupérer toutes les données sauvegardées
dans le fichier binaire nom .mat

1.5.8 Dialogue avec l’utilisateur

disp(var) affiche le contenu de var


fprintf('%format',var) affiche le contenu de var au format spécifié par la
ou sprintf('%format',var) chaîne de caractère '%format'
var=input('texte') affiche la chaîne de caractère 'texte' et donne la main
à l’utilisateur pour qu’il entre la valeur de la variable var
pause arrête l’exécution d’un programme et attend que l’utilisateur
appuie sur une touche du clavier pour reprendre l’exécution
pause(n) arrête l’exécution d’un programme pendant n secondes
keyboard arrête l’exécution d’un programme et donne la main
à l’utilisateur jusqu’à ce qu’il presse la touche Entrée
var=menu('titre','item1','item2',. . .) génère un menu de choix pour l’utilisateur
et affecte l’'itemi' choisi à la variable var

Pour afficher du texte ou le contenu d’une variable à l’écran, on peut utiliser la commande disp, fprintf
ou sprintf. Pour afficher une chaîne de caractères et récupérer une valeur saisie au clavier par l’utilisateur,
on peut utiliser la fonction input.
Types de formats :

'%d' ou '%i' entier signé


'%u' entier non signé
'%f' nombre à virgule fixe (ex : 3.14)
'%e' nombre à virgule flottante,
où la puissance de 10 est délimitée par le caractère e (ex : 3.14e+00)
'%s' chaîne de caractères

Symboles 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

28
Question 23.
>> disp('Coucou')
Coucou
>> n=input('Entrez une valeur :\n')
Entrez une valeur :
4

n =
4
>> disp(['Vous avez tapé : ' num2str(n)])
Vous avez tapé : 4

Question 24.
>> 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('meteo : %s', temps)
ans =
meteo : il fera beau a Brest

Question 25.
>> x = pi/3; y = sin(x);
>> sprintf('sin(%8.6f) = %4.2f', x,y) % x et y : nombres à virgule fixe
ans =
sin(1.047198) = 0.87
>> sprintf('sin(%8.6f) = %4.2e', x,y) % y : nombre à virgule flottante
ans =
sin(1.047198) = 8.66e≠01

Question 26. Réinitialiser l’espace de travail en tapant clear (effacement des variables d’environnement)
puis effacer la fenêtre de commandes en tapant clc.

1.6 Représentation graphique


1.6.1 Représentation d’une courbe ou d’un nuage de points dans le plan
Il existe plusieurs possibilités pour représenter les valeurs d’un vecteur x (ensemble de points (i,x(i))),
ou de deux vecteurs x et y (ensemble de points (x(i),y(i))).

29
plot(y,'s') tracé d’une courbe ou d’un nuage de points (i,y(i))
plot(x,y,'s') tracé d’une courbe ou d’un nuage de points (x(i),y(i))
loglog(x,y,'s') tracé en échelle logarithmique (suir l’axe des abscisses
et des ordonnées)
semilogx(x,y,'s') tracé en échelle semi-logarithmique (sur l’axe des abscisses)
semilogy(x,y,'s') tracé en échelle semi-logarithmique (sur l’axe des ordonnées)
fill(x,y,c) créé un polygone 2D rempli à partir des valeurs de x et y
avec la couleur spécifiée par c
polar(t,r,'s') tracé en coordonnées polaires (r,t)
bar(x,y,'s') tracé sous forme d’un histogramme
stairs(x,y,'s') tracé sous forme d’une fonction en marches d’escalier
stem(x,y,'s') tracé sous forme d’un diagramme en bâtons
fplot(fun,limits) tracé d’une fonction fun entre les bornes limits,
limits est un vecteur correspondant au support [xmin xmax] de x
ou au support [xmin xmax ymin ymax] de x et y
hist(y,nbins) tracé d’un histogramme des valeurs de y réparties en nbins classes
si nbins est un scalaire, ou sur les classes centrées sur les valeurs de c
si nbins est un vecteur
[n,c]=hist(y,nbins) ne dessine pas d’histogramme mais retourne les vecteurs n et c,
où c est le vecteur des milieux des classes et n le nombre de valeurs de y
appartenant à chaque classe ; l’histogramme s’obtient par bar(c,n)

's' est un paramètre optionnel constitué d’une chaîne de caractères qui spécifie le type de tracé (style de
lignes, symbole des marqueurs, couleur). Taper help plot pour avoir la liste des valeurs possibles pour 's'.
Taper help graph2d pour avoir la liste des fonctions ou variables de contrôle d’un graphique 2D.

Symbole Style de lignes


'≠' trait continu/plein (défaut)
'≠≠' tirets
':' pointillés
'≠:' alternance tirets-pointillés

Symbole Symbole des marqueurs


'o' cercle
'+' plus
'*' étoile
'.' point
'x' croix
's' carré
'd' losange
'^' triangle pointant vers le haut
'v' triangle pointant vers le bas
'>' triangle pointant vers la droite
'<' triangle pointant vers la gauche
'p' pentagone
'h' hexagone

30
Symbole Couleur
'y' jaune
'm' magenta
'c' cyan
'r' rouge
'g' vert
'b' bleu
'w' blanc
'k' noir (défaut)

1.6.2 Gestion de la fenêtre graphique

figure créer une nouvelle fenêtre graphique


figure(n) affiche ou rend active la fenêtre graphique numéro n
clf efface le contenu de la fenêtre graphique active
hold on les prochains tracés se superposeront aux tracés déjà effectués
hold off le contenu de la fenêtre graphique active sera effacé lors du prochain tracé
subplot(n,m,p) partage la fenêtre graphique active ne m ◊ n espace graphiques et sélectionne le pe
close ferme la fenêtre graphique active
close all ferme toutes les fenêtres graphiques

1.6.3 Axes et légendes

axis([xmin xmax ymin ymax]) définit les échelles des axes


grid on affiche le quadrillage du graphique
grid off supprime le quadrillage du graphique
title('titre') titre du graphique
xlabel('légende x') légende pour l’axe des abscisses
ylabel('légende y') légende pour l’axe des ordonnées
zlabel('légende z') légende pour l’axe des côtes
legend('légende1','légende2',. . .) légende pour chaque courbe du graphique
text(x,y,'texte') texte explicatif à la position (x,y)
gtext('texte') texte positionné à l’aide de la souris
Ô
Remarque : Si a est une variable contenant le nombre 2, la commande text(x,y,['le résultat est '
num2str(a,3)]) affichera le texte « le résultat est 1.41 » à partir de la position (x,y) de la fenêtre
graphique.
Question 27.
figure(1)
x=≠pi:0.1:3*pi;
y=x.*sin(x);
plot(x,y)
axis([≠pi,3*pi,≠6,9])
xlabel('x')
ylabel('y')
title(['graphe de la fonction x sin(x) sur l''intervalle [' num2str(x(1)) ' , ' num2str(x(
end)) ']'])
plot(x,y,x,2*y)
title('graphes des fonctions x sin(x) et 2 x sin(x) sur l''intervalle [≠\pi,3\pi]','
FontSize',12)
plot(x,[y;2*y])
plot(x,y,'r≠≠',x,2*y,'g+')

31
figure(2)
fplot('[x*sin(x),2*x*sin(x)]',[≠pi,3*pi])
fplot(@(x) x.*sin(x),[≠pi,3*pi])
fplot('x*sin(x)',[≠pi,3*pi],'b≠')
hold on
fplot('2*x*sin(x)',[≠pi,3*pi],'yo')
hold off

figure(3)
t=0:0.1:2*pi;
plot(sin(t),sin(2*t))
plot(sin(t),sin(2*t),'c≠')

Question 28. Soient f et g les fonctions définies sur l’intervalle [0 , 10] par
3 4 3 4
x x
f (x) = exp ≠ et g(x) = cos
25 10
Tracer ces deux fonctions à l’aide de la fonction fplot dans une même fenêtre graphique mais sur des graphes
différents, puis sur le même graphe.

Solution

>> f=@(x) exp(≠x/25); g=@(x) cos(x/10);


>> figure
>> subplot(1,2,1)
>> fplot(f,[0,10],'≠b') % ou fplot('exp(≠x/25)',[0,10],'≠b')
>> grid on
>> xlabel('$x$','Interpreter','latex')
>> ylabel('$f(x)$','Interpreter','latex')
>> l=legend('$f(x)$');
>> set(l,'Interpreter','latex')
>> subplot(1,2,2)
>> fplot(g,[0,10],'≠r') % ou fplot('cos(x/10)',[0,10],'≠r')
>> grid on
>> xlabel('$x$','Interpreter','latex')
>> ylabel('$g(x)$','Interpreter','latex')
>> l=legend('$g(x)$');
>> set(l,'Interpreter','latex')
>> figure
>> fplot(f,[0,10],'≠b') % ou fplot('exp(≠x/25)',[0,10],'≠b')
>> hold on
>> fplot(g,[0,10],'≠r') % ou fplot('cos(x/10)',[0,10],'≠r')
>> hold off
>> box on
>> grid on
>> xlabel('$x$','Interpreter','latex')
>> ylabel('$f(x)$, $g(x)$','Interpreter','latex')
>> l=legend('$f(x)$','$g(x)$');
>> set(l,'Interpreter','latex')

32
1.6.4 Sauvegarde d’une figure
Une figure peut être sauvegardée sous plusieurs formats :
• sous un format propre à Matlab avec l’extension .fig. Pour cela, cliquer sur la commande Save as du
menu File de la fenêtre graphique et entrer un nom de fichier avec l’extension .fig dans l’encadré qui
apparaît. Un tel fichier (avec l’extension .fig) peut être visualisé en utilisant la commande Open du
menu File.
• sous un format PostScript avec l’extension .pdf, .eps, .epsc, .eps2, .epsc2, .ps, . . . en utilisant soit
la commande Save as, soit la commande Export Setup du menu File d’une fenêtre graphique.
On peut également utiliser une des commandes saveas ou print :
>> saveas(gcf,'nom_fichier','format')
>> print(gcf,'≠dformat','nom_fichier') % ou print ≠dformat 'nom_fichier'
format est une chaîne de caractères désignant le format de sauvegarde (extension) : pdf, eps, eps2, epsc,
epsc2, ps, . . .

Question 29.
1. Tirer 100 couples de points (x, y) aléatoirement (et uniformément) dans le carré [0 , 1]◊[0 , 1].
2. Représenter le nuage de points obtenus dans une fenêtre graphique.
3. Calculer le centre de gravité G du nuage de points.
4. Ajouter le centre de gravité en rouge au nuage de points.
5. Sauvegarder la figure sous le nom nuage.fig. Fermer la fenêtre graphique. Ouvrir une nouvelle fenêtre
graphique et faire apparaître le fichier nuage.fig.
6. Faire afficher dans une même fenêtre graphique deux histogrammes, un pour les abscisses et un pour
les ordonnées des points tirés.
7. Sauvegarder les variables x, y et le centre de gravité G dans un fichier binaire sauvegarde.mat. Effacer
les variables x, y et G avec la commande clear. Puis, charger le fichier sauvegarde.mat afin de les
récupérer. Vérifier la récupération avec la commande who.

Solution

1. >> x=rand(1,100); y=rand(1,100);


2. >> figure
>> plot(x,y,'+b')
>> grid on
>> xlabel('$x$','Interpreter','latex')
>> ylabel('$y$','Interpreter','latex')
>> l=legend('$(x,y)$');
>> set(l,'Interpreter','latex')

3. >> G=[mean(x);mean(y)]

4. >> hold on
>> plot(G(1),G(2),'+r')
>> hold off
>> l=legend('$(x,y)$','$(G_x,G_y)$');
>> set(l,'Interpreter','latex')
>> saveas(gcf,'nuage','fig')
>> close
>> open nuage.fig

33
5. Sur deux graphes différents :
>> figure
>> subplot(1,2,1)
>> hist(x,20) % ou [nx,cx]=hist(x,20); bar(cx,nx,'b')
>> ylabel('$x$','Interpreter','latex')
>> l=legend('$x$');
>> set(l,'Interpreter','latex')
>> subplot(1,2,2)
>> hist(y,20) % ou [ny,cy]=hist(y,20); bar(cy,ny,'r')
>> ylabel('$y$','Interpreter','latex')
>> l=legend('$y$');
>> set(l,'Interpreter','latex')

Sur le même graphe :


>> figure
>> hist([x(:) y(:)],20)
>> l=legend('$x$','$y$');
>> set(l,'Interpreter','latex')

6. >> save('sauvegarde','x','y','G') % ou save sauvegarde x y G


>> clear x y G
>> load('sauvegarde') % ou load sauvegarde
>> who

1.6.5 Exemple
On considère deux vecteurs ligne de taille 1 ◊ n notés x et y.
• La fonction figure permet de créer une fenêtre graphique.
• plot(y) trace une fonction passant par les n points du vecteur y avec en abscisse l’indice de y leur
correspondant.
plot(x,y) trace les valeurs de y avec en abscisse les valeurs de x du même indice.
• Des caractéristiques de style et de couleur peuvent être données au tracé en remplaçant le mot-clé
'LineSpec' par l’une de ses valeurs dans la commande plot(x,y,'LineSpec').
On pourra aussi regarder les options liées aux axes.
Exemples : axis tight permet d’ajuster les axes à l’amplitude des variables,
axis equal impose la même unité sur les deux axes, . . .
• La commande hold on permet de tracer plusieurs courbes sur un même graphe. La commande hold off
met fin à cette option.
• Les légendes sur les axes des abscisses et des ordonnées s’ajoutent à l’aide des commandes xlabel('
légende x') et ylabel('légende y'). Un titre peut être ajouté grâce à la commande title('titre'),
et une légende générale avec la commande legend('courbe1','courbe2').
Exemple :
x=linspace(0,2*pi,20);
y1=sin(x);
y2=sin(x+pi/2);
plot(x,y1,'≠xr');
hold on
plot(x,y2,':db');
xlabel('$x$ (en rad)','Interpreter','latex')

34
ylabel('$\sin(x)$','Interpreter','latex')
title('Fonction sinus avec et sans d\''ephasage de $\displaystyle\frac{\pi}{2}$','
Interpreter','latex')
l=legend('$\sin(x)$','$\sin\left(x+\displaystyle\frac{\pi}{2}\right)$');
set(l,'Interpreter','latex')

• Pour créer une animation sur des courbes 2D, on peut utiliser la commande plot encapsulée dans
une boucle en prenant soin de demander une pause d’une seconde entre chaque tracé pour rendre
l’animation visible. Par exemple, on souhaite tracer N courbes de M points stockés sur les lignes d’une
matrice A.
>> figure;
>> for j=1:N
plot(A(j,:))
pause(1)
end

• Pour représenter des graphes en 3D, on a le choix entre des isovaleurs associées à une échelle de couleurs
(commande imagesc), et une représentation en perspective qui nécessite une réorganisation des données
d’entrée grâce à la commande mesh.

1.7 Entrées/Sorties
• Lecture d’un fichier
Utile pour récupérer des données dans un fichier texte (fichier input avec l’extension .msh). On
considère le fichier wing.msh contenant les informations suivantes :
Nodes
4
1000
2 48 44 0
3 15.99999999994878 14.66666666661972 0
4 14.39999999998723 32.39999999998363 0

Ouverture du fichier .msh (fid=file identification=entier) :


>> fid=fopen('wing.msh','r') % 'r' pour read, 'w' pour write
'r' est la règle de permission usuelle pour la lecture, et 'w' est celle pour l’écriture dans un fichier.

Lecture de la chaine de caractères Nodes :


chaine=fgets(fid);

Lecture du nombre de noeuds (9) et stockage dans la sous-structure nnod de la structure analysis :
chaine=fgets(fid); % lecture de la ligne suivante
analysis.nnod=sscanf(chaine,'%d'); % stockage de la donnée chaine (entier indiqué par
le type de format '%d') dans la sous≠structure nnod de la structure analysis

Lecture de toutes les coordonnées stockées sur les lignes suivantes de wing.msh et stockage dans la
matrice coor préalablement initialisée avec des zéros :
>> coor=zeros(analysis.nnod,2);
>> for i=1:analysis.nnod
chaine=fgets(fid);
h=sscanf(chaine,'%d %f %f %f')';
coor(i,:)=h(2:3); % transposition pour stocker en ligne (stockage en colonne par
defaut)
end
disp(coor); % affichage de la matrice coor

35
Fermeture du fichier :
fclose(fid);

Question 30. Vous ferez un script pour rassembler les instructions précédentes

• Ecriture d’un fichier


Voyons comment écrire la dernière ligne de ce fichier.
Ouverture du fichier .msh :
>> fid=fopen('wing.msh','w') % 'w' pour write
Ecriture des éléments de la ligne à insérer dans une matrice y :
>> y=[9 14.39999999998723 32.39999999998363 0]
Ecriture du contenu de cette matrice dans le fichier :
>> fprintf(fid,'%d %f %f %f')';
Fermeture du fichier :
>> fclose(fid);

36

Vous aimerez peut-être aussi