Universit´e Pierre et Marie Curie - Paris VI
Outils Math´ematiques et utilisation de Matlab
Cours 2013-2014
Licence Professionnelle (L3)
Instrumentation Optique et Visualisation
Quentin Glorieux
Table des mati`eres
Avant-Propos
1 Introduction `a Matlab
1.1 La philosophie de Matlab
1.2 L’interface de Matlab
1.2.1 Command Window
1.2.2 Workspace
1.2.3 Command History
1.2.4 Current Folder
1.2.5 Editor
1.2.6 Help
”Hello World”
1.3.1
Script
1.3.2 Fonction
1.3
1.4 Outils de base
1.4.1 Types de variables
1.4.2 Pr´ecision
1.4.3 Arithm´etique et op´erations sur les scalaires
1.5 Vecteurs
1.5.1 D´efinir un vecteur
1.5.2 Manipuler un vecteur
1.5.3 Op´erations vectorielles
1.6 Matrices
1.6.1 D´efinir une matrice
1.6.2 Manipuler une matrice
1.6.3 Op´erations matricielles : addition et soustraction
1.6.4 Op´erations matricielles : produit
1.6.5 Op´erations matricielles : inverse et division
1.6.6 R´esoudre un syst`eme lin´eaire
1.7 Repr´esentation graphique
1.7.1 Graphique d’une fonction
1.7.2 Graphique de plusieurs fonctions
1.7.3 Bar graphs et Box plots
1.7.4 Histogrammes
1.7.5 Nuage de points
1.7.6 Graphiques des fonctions de 2 variables
1.7.7
Images
1.8 Notions de programmation
1.8.1 Boucles
1.8.2 Test SI
Travaux Pratiques 1
2 Traitement du signal
2.1 S´eries de Fourier
2.2 Application a la synthese de signaux sous Matlab
2.3 Transform´ee de Fourier
2.3.1 D´efinition
2.3.2 Transform´ee de Fourier discr`ete
5
1
1
1
1
2
2
2
3
4
4
4
4
5
5
5
6
8
8
9
10
11
11
13
14
14
15
16
18
18
19
22
23
24
24
26
27
27
27
29
33
33
34
36
36
36
4 Table des mati`eres
2.3.3 Un exemple pas `a pas de FFT
2.4 Corrig´es
36
40
Avant-Propos
Il s’agit des notes de cours destin´ees aux ´etudiants de Licence Professionnelle
LIOVIS de l’UPMC. Ce cours suppose une familiarit´e avec les notions de bases
d’alg`ebre, d’analyse et de statistiques. Le format de ce cours est compos´e de 4
s´eances de 4h de cours associ´ees `a 4 s´eances de 4h de travaux pratiques. Chaque
couple de s´eances (cours-TP) porte sur un theme di↵´erent associ´e a un chapitre
de ces notes. L’utilisation de logiciel de calcul est devenu depuis les ann´ees 70 ab-
solument indispensable dans le domaine scientifique, aussi bien pour le technicien
que l’ing´enieur ou le chercheur. Matlab a ´et´e d´evelopp´e par la soci´et´e Mathworks.
Il s’agit d’un des langages de programmation scientifique les plus populaires.
Dans ce cours nous allons parcourir les bases de Matlab pour analyser des
donn´ees ecacement, et simuler num´eriquement des syst`emes physiques. Il
faut bien comprendre la di↵´erence entre ces deux objectifs. D’une part une s´erie
de donn´ees est produite par une exp´erience et notre objectif est d’analyser ces
donn´ees pour en faire ressortir les ´el´ements les plus pertinents. Lorsque l’on parle
de donn´ee, il peut s’agir par exemple d’une mesure d’un param`etre physique, du
cours de la bourse, des r´eponses `a un sondage ou bien de tout autres valeurs pou-
vant ˆetre tabul´ees.
Lorsque l’on parle de simulations num´eriques, on s’int´eresse `a la mod´elisation d’un
syst`eme ce qui passe le plus souvent par la r´esolution d’´equations di↵´erentielles.
Pour ces deux objectifs, nous allons utiliser des notions de math´ematiques qui se-
ront parfois nouvelles pour le lecteur. Ce cours n’a pas pr´etention `a ˆetre un cours
formel et rigoureux du point de vue math´ematiques et je pr´esenterai donc uni-
quement les points n´ecessaires `a la compr´ehension des concepts sans entrer dans
les d´etails. Lorsque cela sera n´ecessaire, j’indiquerai les r´ef´erences bibliographiques
permettant de traiter ces notions math´ematiques plus en profondeur.
La particularit´e de Matlab est de manipuler uniquement des variables num´e-
riques (pas de calcul formel). Par d´efaut ces variables sont cod´ees sur 64 bits
(double pr´ecision) et peuvent contenir jusqu’`a 16 chi↵res significatifs. Les nombres
les plus grands manipul´es par Matlab sont 10306, au del`a de cette limite ils seront
consid´er´es comme infini et not´es Inf. R´eciproquement, les nombres les plus petits
306, au del`a de cette limite ils seront consid´er´es comme z´ero et not´es 0.
sont 10
Lorsqu’une valeur est manquante ou si le r´esultat d’un calcul n’existe pas ( 0
0 par
exemple), la variable prendra la valeur Nan.
Des alternatives libres existent
comme par exemple Scilab, R ou
Octave.
Nous verrons que les probl`emes
d’arrondi peuvent s’av´erer im-
portant lors que nous ´etudierons
la stabilit´e des m´ethodes de r´eso-
lution d’´equations di↵´erentielles.
,
Ce cours est divis´e en 2 parties. Dans le chapitre 1, je vais introduire l’interface
de Matlab et nous ´ecrirons le premier programme afin d’acher un message simple.
Nous ´etudierons ensuite la structure des donn´ees ainsi que les op´erations de base
, /). Une part importante de ce chapitre sera consacr´e `a la pr´esentation
(+,
⇤
de donn´ees sous forme de graphiques en 2D et 3D, ce qui nous simplifiera la
tache pour de nombreux exercices par la suite. Je ferai ´egalement quelques rappels
de statistiques ´el´ementaires. Enfin, ce chapitre se termine par la pr´esentation du
produit matriciel et son utilisation.
Le chapitre 2 a pour but d’introduire les notions essentielles au traitement de
donn´ees. L’analyse et le traitement de donn´ees est un sujet tr`es vaste qui n´eces-
siterais un cours a part entiere. Je pr´esenterai ici principalement deux sujets : le
filtrage en utilisant les principes de la transform´ee de Fourier ainsi que la recherche
de corr´elations dans un ensemble de donn´ees.
6 Avant-Propos
Nous reviendrons en detail sur
les formats de donn´ees plus loin
dans ce cours. En e↵et c’est un
point tr`es important car la pr´e-
cision d’un ordinateur n’est pas
infinie et donc tout les nombres
utilis´es seront des arondis.
Chapitre 1
Introduction `a Matlab
1.1 La philosophie de Matlab
L’objectif de ce premier chapitre est d’introduire les outils n´ecessaires `a l’uti-
lisation de Matlab. En programmation on parle d’objet pour d´ecrire de mani`ere
g´en´erale les concepts que l’on manipulent, de la mˆeme mani`ere que l’on parle de
variables en math´ematiques. L’objet le plus commun dans Matlab est la matrice.
C’est donc un tableau d’´el´ements d’un type donn´e, par exemple un tableau d’en-
tiers, de r´eels, de texte, de variable logiques...
Le format de la matrice est libre, il se d´efinit par le nombre de lignes et le
nombre de colonnes. Une matrice colonne (n lignes X 1 colonne) est appel´ee
vecteur. Dans ce chapitre nous allons donc apprendre a d´efinir, a acher et `a
r´ealiser des op´erations sur ces matrices.
Le deuxi`eme point que nous allons aborder est une r´evision de statistiques de
base et leur utilisation dans Matlab. Un vecteur d´efinit pr´ec´edemment peut conte-
nir des variables qui d´ecrivent une exp´erience (par exemple les notes d’une classe
lors d’un cours de Math´ematiques), et il est donc int´eressant de connaitre les pro-
pri´et´es statistiques de celui-ci.
Nous aborderons pour finir la repr´esentation graphique sous Matlab. En e↵et,
pour pr´esenter des donn´ees, on est tres souvent amener a r´ealiser des graphes. Nous
verrons quelques une des possibilit´es de Matlab dans ce domaine, ce qui nous sera
tr`es utile par la suite.
1.2 L’interface de Matlab
Avant de commencer le cours proprement dit, nous allons nous familiariser avec
l’interface de Matlab. Selon la version utilis´ee, l’interface peut changer l´eg`erement
mais les points centraux resteront identiques.
1.2.1 Command Window
C’est le terminal dans lequel on doit taper les commandes et sur lequel on
verra l’achage des r´esultats. Une ligne commence toujours par >>. Essayez la
commande suivante :
>> 1+1
ans =
2
et comparez `a la commande :
Publicité
>> 1+1;
2
1.2. L’interface de Matlab
La commande whos() peut ´ega-
lement ˆetre utilis´ee seule (sans
argument). Elle retourne alors la
liste des variables.
Deux points sont `a noter ici. Le premier est que Matlab d´efinit une variable ans,
lorsque l’on e↵ectue un calcul. Cette variable (qui veut dire answer /r´eponse),
s’ache sur le terminal lorsque l’on omet le signe ; en fin de ligne. Ici ans est une
matrice de taille 1x1 (une ligne par une colonne). Une commande utile lorsque l’on
a un doute sur le type de variable que l’on vient de cr´eer est whos :
>> whos(’ans’)
Name
Size
Bytes Class
Attributes
ans
1x1
8 double
Cette commande retourne le nom de la variable (ans), sa taille (1x1), le nombre
d’octets utilis´es (8), et le type de donn´ees (ici r´eel en double pr´ecision).
Une seconde commande utile est clc. Cette commande permet de vider l’´ecran
de Command Window pour repartir sur une fenˆetre propre.
De plus, Matlab supporte l’auto-compl´etion, c’est `a dire que si vous connaissez
le d´ebut d’une commande, vous pouvez n’entrer que les premi`eres lettres et utiliser
la touche Tab pour chercher parmi les commandes commen¸cant ainsi.
1.2.2 Workspace
Dans cette fenˆetre, on obtient la liste des variables connues par Matlab . Il
est possible de double-cliquer sur une variable pour l’acher. Un clic-droit sur les
variables o↵re de nombreuses options telles que : Copiez, Collez, Supprimez etc.
1.2.3 Command History
Lorsque l’on e↵ectue une analyse de donn´ees sur les r´esultats d’une exp´erience
il est essentiel de conserver une trace de toutes les op´erations qui ont ´et´e r´ealis´ees.
C’est la base de la tra¸cabilite et de la reproductibilit´e des r´esultats scientifiques.
Il est possible de cliquer sur une commande dans cette fenˆetre pour l’ex´ecuter
a nouveau. On peut ´egalement remonter dans la liste de commandes en se pla-
¸cant dans la Command Window et en pressant les fl`eches de direction. Matlab
est ´egalement capable de remonter dans la liste de commandes en ne prenant en
compte que les commandes qui commencent par certains caract`eres. Si l’on re-
cherche une commande que l’on a entr´ees pr´ec´edemment, on peut taper le d´ebut
de cette commande puis la fl`eche du haut et Matlab cherchera uniquement parmi
les commandes ayant le mˆeme d´ebut.
Par ailleurs, il est parfois important d’enregistrer dans un fichier ind´ependant
la liste des commandes utilis´ees. Pour ce faire on utilise :
>> diary filename
Cette commande va cr´eer un fichier filename qui enregistrera toutes les com-
mandes entr´ees jusqu’`a ce que l’on utilise diary off.
1.2.4 Current Folder
Je viens de le d´ecrire la commande diary permet de cr´eer un fichier. On peut se
poser la question l´egitime d’ou Matlab va stocker ces donn´ees. Il est tres important
de bien maitriser ce point si l’on souhaite ne pas se perdre dans l’ensemble des
fichiers auxquels nous allons faire appel via Matlab. Matlab d´efinit ce qui s’appelle
le PATH (chemin). C’est les dossiers dans lesquels Matlab va chercher lorsque l’on
appelle un commande. Le PATH est divis´e en deux sous-parties : d’une part le
MATLABPATH et d’autre par le USERPATH.
Le premier (MATLABPATH) correspond aux di↵´erents dossiers auxquels Matlab va
faire r´ef´erence pour utiliser des fonctions pr´ed´efinies par Matlab. Il s’agit si l’on
veut des chemins par d´efaut dans lesquels Matlab cherche les fonctions et il peut
contenir un grand nombre de dossiers. L’exemple de code suivant permet d’acher
le MATLABPATH :
Introduction `a Matlab 3
Le USERPATH est un sous en-
semble du MATLABPATH qui doit
ˆetre personalis´e `a chaque session.
C’est la premi`ere ligne lorsque
l’on entre la commande path.
L’importation de donn´ees ´etant
un point fondamental nous le
traiterons en d´etail par la suite.
La syntaxe de la fonction n’est
pas le sujet ici. Nous reviendrons
en d´etails sur cela plus tard ainsi
que sur la commande sqrt()
>> path
Le second (USERPATH) est un unique dossier qui est propre `a l’utilisateur lors d’une
session. Il est fortement conseill´e de d´efinir le USERPATH, imm´ediatement lorsque
l’on commence une session Matlab. Le fichier diary par exemple est sauv´e dans
le USERPATH. Deux m´ethodes peuvent ˆetre utilis´ee pour modifier le USERPATH. En
ligne de commande :
>> newpath = ’C:\Research_Project’;
userpath(newpath)
ou bien en s´electionnant File> Set Path dans les menus d´eroulants.
La fenˆetre Current Folder ache donc le contenu du USERPATH. On peut na-
viguer entre les dossiers en utilisant la mˆeme nomenclature que sous Unix. On peut
tester notamment les commandes suivantes : cd, ls ,cd .., mkdir(’newfolder’).
Respectivement ces commandes permettent de changer de dossier, de lister les fi-
chiers du dossier, de remonter d’un niveau dans l’arborescence, et de cr´eer un
dossier newfolder. On peut tester le code suivant pour cr´eer un nouveau dossier
puis l’ajouter au path :
>> mkdir(’c:/\texttt{Matlab }/myfiles’)
addpath(’c:/\texttt{Matlab }/myfiles’)
Une autre application tr`es importante de la fenˆetre Current Folder est d’a-
cher la listes des fichiers de donn´ees qui peuvent ˆetre charg´es par l’utilisateur. En
e↵et, tres souvent les donn´ees a analyser seront g´en´er´ees par un autre logiciel puis
import´ees dans Matlab via la commande importdata(filename).
1.2.5 Editor
La plupart de votre travail sous Matlab va consister `a cr´eer ou modifier des
fichiers .m qui est le suxe standard pour les proc´edures Matlab. Lorsque l’on
r´ealise une tache sous Matlab, il est tr`es souvent possible de le faire en utilisant
uniquement la Command Window. Cependant lorsque cette tache devient plus
complexe (plusieurs dizaines de ligne de code) ou que l’on souhaite pouvoir la
transmettre `a quelqu’un d’autre simplement, on utilise la fenˆetre Editor. On cr´ee
un fichier .m qui peut ˆetre au choix un script ou une fonction (function en an-
glais). Un script est une suite de commande que l’on aurait tout aussi bien pu
taper dans la Command Window. Une fonction permet d’´etendre les possibilit´es
au del`a des fonctions pr´eprogramm´ees par les d´eveloppeurs de Matlab .
Par exemple, on pourra r´ealiser une fonction racineplus2(input) qui `a un
param`etre d’entr´ee input va r´epondre pinput + 2 : Pour cr´eer un fichier .m on peut
soit utiliser les menus contextuels, soit entrer la commande : edit FileName.m.
On entre ensuite le code suivant :
function [ output ] = racineplus2( input )
output=sqrt(input+2);
end
Lorsque l’on sauve cette fonction sous la forme d’un fichier .m, il est important
de nommer le fichier racineplus2.m et de sauver ce fichier dans le USERPATH. On
peut ensuite appeler cette fonction simplement dans la Command Window par :
>> racineplus2(7)
ans =
3
Il est ´evident que cette fonction ne fait pas partie des fonctions de base de Matlab :
pourquoi choisir +2 et pas +3. Cependant si l’on souhaite l’utiliser souvent il est
utile de d´efinir une fonction utilisateur qui sera rapide `a utiliser. Une fois que
l’on a cr´e´e un fichier .m, il est possible d’acc´eder `a l’´editeur en double-cliquant sur
le nom du fichier dans la fenˆetre Current Folder.
4
1.3. ”Hello World”
La tradition d’utiliser ”Hello
World” comme message de test
a ´et´e initi´ee par Brian Kerni-
ghan et Dennis Ritchie dans le
livre The C Programming Lan-
guage publi´e en 1978.
1.2.6 Help
Le menu d’aide de Matlab est une des bases de son succ`es. En e↵et, l’aide est
essentielle lorsque l’on programme avec un langage de haut-niveau comme Matlab,
ou le nombre de fonctions est tres important et la syntaxe est parfois complexe.
Pour acc´eder `a l’aide on peut au choix s´electionner une fonction et presser F1,
taper help FunctioNname ou utiliser les menus d´eroulants. L’aide doit ˆetre vu
comme compl´ementaire de ce cours. Ici j’explique les outils math´ematiques que
nous utiliserons, dans l’aide de Matlab vous trouverez la syntaxe des di↵´erentes
fonctions. Mais j’insiste : il est essentiel que vous vous familiarisiez avec les outils
de l’aide de Matlab pour r´eussir dans ce cours.
1.3 ”Hello World”
Tout cours de programmation qui se respecte commence par l’exemple ”Hello
World”. Il s’agit d’un bref programme pour mettre en place les di↵´erents ´el´ements
n´ecessaires. Nous allons r´ealiser deux exemples de ce programme pour mettre en
´evidence la di↵´erence entre un script et une fonction.
1.3.1 Script
Le script est le fichier .m le plus simple. Il s’agit simplement d’une liste de
commandes mises bout `a bout et sauvegard´ee dans un fichier. Pour commencer
on fixe le USERPATH. On cr´ee ensuite un fichier .m dans ce dossier et on nomme ce
fichier hello.m. On ´edite ensuite le fichier .m de la fa¸con suivante :
str=’Hello world’;
str
Sauvez ensuite ce script. Puis dans la fenˆetre Command Window, on tape la com-
mande : hello.
Voila nous avons fait le programme le plus simple possible de Matlab, voyons
comment nous pouvons l’am´eliorer.
1.3.2 Fonction
Une fonction va permettre de rentrer des arguments en entr´ee et d’obtenir
di↵´erentes variables en sortie. On va essayer ici de modifier le script hello.m
pour en faire une fonction qui prend votre pr´enom en entr´ee et retourne Hello
Votrepr´enom en sortie. On commence de fa¸con similaire `a pour un script : on cr´ee
un fichier .m que l’on nomme hello2.m.
function [ str ] = hello2 ( prenom )
str = [’Hello ’, prenom ];
end
On sauvegarde le fichier .m puis on l’appelle depuis la fenˆetre Command Win-
dow. Cette fois la fonction a besoin d’un param`etre en entr´ee, on tape donc :
hello2(’Quentin’). On obtient l’achage voulu. La syntaxe d’une fonction est
relativement simple et doit ˆetre connue. On d´efinit ce que va retourner la fonc-
tion : function [output1,output2 ... outputN]. Puis on nomme la fonction,
ici : = hello2(). On d´efinit alors les param`etres d’entr´ee hello2(input1, im-
put2, ... inputM). On peut passer alors au corps mˆeme de la fonction, qui doit
contenir une d´efinition de toutes les variables de sortie output1,output2 ...
outputN. Finalement, une fonction se conclut toujours par end.
1.4 Outils de base
Introduction `a Matlab 5
On l’a d´ej`a dit, le principe de base de Matlab est de consid´erer la plupart
des objets comme des matrices. Ainsi les op´erations usuelles +,
, / doivent se
⇤
comprendre comme des op´erations matricielles. On consacrera la section suivante
`a ces op´erations. Nous allons dans un premier temps regarder ce qu’ils se passent
pour les matrices 1x1 (c’est `a dire un seul ´el´ement), puis pour les matrices 1xn ou
nx1 (c’est `a dire des vecteurs ligne ou colonne).
,
On peut d´efinir la partie imagi-
naire d’un complexe en utilisant
au choix i ou j.
1.4.1 Types de variables
Il existe cinq grands types de variables sous Matlab : les entiers, les r´eels, les
complexes, les chaˆınes de caract`eres et le type logique. D´efinissons une variable de
chaque type :
>> a = 1.3; b = 3+i; c = ’bonjour’;
>> d1 = true(1==1); d2 = logical(1);
>> e = int8(2);
a repr´esente un r´eel, b un complexe, c une chaine de caract`eres, d1 et d2 sont deux
mani`eres de d´efinir une variable logique (VRAI dans le cas pr´esent) et e est un
entier cod´e sur 8 bits. On peut alors v´erifier le type de ces di↵´erentes variable en
utilisant la fonction whos :
>> whos
Name
a
b
c
d1
d2
e
Publicité
Size
Bytes Class
Attributes
1x1
1x1
1x7
1x1
1x1
1x1
complex
8 double
16 double
14 char
1 logical
1 logical
1 int8
Il n’est donc pas n´ecessaire (impossible en fait) de d´eclarer le type de variable
lorsque l’on cr´ee une variable dans Matlab. Il peut alors s’av´erer utile de v´erifier
quel est le type d’une variable. On utilise les fonctions ischar,islogical,isreal.
1.4.2 Pr´ecision
Avant de poursuivre, je vais mentionner quelques une des limites qu’il est im-
portant de connaitre lorsque l’on fait du calcul num´erique. Il s’agit du r´eel le plus
grand et le plus petit qui peuvent ˆetre manipul´e par Matlab, ainsi que de la pr´eci-
sion sur ces derniers. Les constantes realmax et realmin renvoient respectivement
le plus grand (petit) nombre `a virgule flottante manipulable. La constante eps
renvoie la pr´ecision num´erique relative.
>> min=realmin
max=realmax
precision=eps
min = 2.2251e-308
max = 1.7977e+308
precision = 2.2204e-16
10308 avec une pr´ecision de 10
16, vous allez me dire pourquoi s’int´eresse t’on `a
cela ? Pour en comprendre l’importance revenons a la maniere dont un ordinateur
code des nombres entiers et r´eels. Un ordinateur travaille uniquement en binaire
(base 2).Les nombres entiers sont donc cod´es en binaire sur un nombre plus ou
moins important de bits.Si l’on d´ecide de coder un entier naturel (donc non n´ega-
tif) sur 8 bits, on aura acces a tout les entiers entre 0 et 28
1 = 255. De mˆeme si
d´esormais on souhaite travailler avec des entiers relatifs, toujours sur 8 bits, alors
Pour definir ou convertir un
nombre en entier on utilise uint
ou int pour les entiers naturel ou
relatifs suivi du nombre de bits.
Par exemple uint16 signifie un
entier naturel cod´e sur 16 bits.
6
1.4. Outils de base
on aura acc`es aux entiers entre
entiers jusqu’`a 64 bits.
27 =
128 et 27
1 = 127. Matlab supporte les
Passons maintenant aux nombres r´eels. Il existe deux types principaux de
codage pour les nombres r´eels : simple pr´ecision (single) ou double pr´ecision
(double). Ces deux codages utilisent le principe de la virgule flottante (float).
Cela consiste `a repr´esenter un nombre par son signe (+1 ou -1) s, les chi↵res signifi-
10e. Lorsqu’il
catifs (ou mantisse) m et un exposant e. Le nombre s’´ecrit alors s
est cod´e en simple pr´ecision (c’est `a dire sur 32 bits), le nombre se compose d’un bit
de signe, 8 bits d’exposant, et 23 bits pour la mantisse. Si la mantisse est cod´ee sur
23 bits, cela signifie que l’on peut obtenir les nombres entre 0 et 223
1 = 8388607,
ainsi un nombre r´eel cod´e en simple pr´ecision aura environ 7 chi↵res significatifs
(ce qui est parfois relativement peu). En double pr´ecision (c’est `a dire sur 64 bits),
le nombre se compose d’un bit de signe, 11 bits d’exposant, et 52 bits pour la
mantisse. Dans ce cas, on obtient environ 16 chi↵res significatifs (c’est le sens de
la constante eps).
m
⇤
⇤
Bien choisir son type de donn´ees permet d’optimiser la m´emoire utilis´ee ainsi
que la rapidit´e et la pr´ecision des calculs num´eriques. Il s’agit donc d’un crit`ere
important lors de l’´evaluation de la qualit´e d’un code.
Un dernier point est le nombre de chi↵res lors de l’achage `a l’´ecran. Le nombre
de chi↵res retenus pour l’achage n’est pas n´ecessairement le mˆeme que celui
retenu pour la pr´ecision (il ne peut pas ˆetre plus grand c’est ´evident !). Les deux
formats les plus utilis´es sont short (d´efaut) et long qui correspondent `a 5 et 15
chi↵res respectivement.
1.4.3 Arithm´etique et op´erations sur les scalaires
Avant de commencer, je conseille
d’utiliser les trois commandes
suivantes : clc pour nettoyer
l’´ecran, clear all pour suppri-
mer toutes les variables cr´e´ees
auparavant, et close all pour
fermer toutes les fenˆetres in-
utiles.
Nous allons nous int´eresser aux op´erations math´ematiques de bases avec des
matrices 1x1, c’est `a dire des nombres. Commen¸cons par les 4 op´erations que vous
,
connaissez depuis l’´ecole primaire : +,
, /.
⇤
>> x = 1+1
x = 2
On peut ´egalement travailler avec des variables d´efinies par l’utilisateur :
>> x = 2; y = 1.5 ;
somme = x+y
difference = x-y
produit = x*y
division = x/y
somme = 3.5000
difference = 0.5000
produit = 3
division = 1.3333
Matlab est sensible `a la casse :
la variable ToTo est di↵´erente de
tOtO
On peut ´egalement utiliser les fonctions trigonom´etriques, puissance, logarith-
miques etc
>> x = 2; y = pi;
cos(y)
exp(x)
sqrt(x)
ans = -1
ans = 7.3891
ans = 1.4142
Voici une liste (non exhaustives) des fonctions incorpor´ees dans Matlab :
Introduction `a Matlab 7
Evidemment les fonction hyper-
boliques et inverses sont aussi va-
lables pour le cosinus et la tan-
gente
exp(x)
log(x)
log10(x)
xˆn
sqrt(x)
abs(x)
sign(x)
sin(x)
cos(x)
tan(x)
asin(x)
sinh(x)
asinh(x)
:
:
:
:
:
:
:
:
:
:
:
:
:
exponentielle de x
logarithme n´eperien de x
logarithme en base 10 de x
x `a la puissance n
racine carr´ee de x
valeur absolue de x
1 si x > 0 et 0 si x
0
sinus de x
cosinus de x
tangente de x
sinus inverse de x (arcsin de x)
sinus hyperbolique de x
sinus hyperbolique inverse de x
On pourra ´egalement utiliser les fonctions d’arrondis :
round(x)
floor(x)
ceil(x)
:
:
:
entier le plus proche de x
arrondi par d´efaut de x
arrondi par exc´es de x
ainsi que les fonctions d’arithm´etiques :
rem(m,n)
lcm(m,n)
gcd(m,n)
factor(n)
:
:
:
:
reste de la division enti`ere de m par n
plus petit commun multiple de m et n
plus grand commun diviseur de m et n
d´ecomposition en facteurs premiers de n
Enfin lorsque l’on travaille avec des complexe on pourra utiliser :
conj(z)
:
conjugu´e de z
abs(z)
: module de z
angle(z)
real(z)
imag(z)
:
:
:
argument de z
partie r´eelle de z
partie imaginaire de z
8
Publicité
1.5. Vecteurs
Exercices
(1.1) Evaluez les quantit´es suivantes dans Matlab avec 5 chi↵res significatifs :
(a)
tanh(e)
(b)
log10(2)
(c)
1
1+ 1
1+ 1
2
(d) PGCD(48972, 36533112)
(e)
e102.7
(g) PPCM (318,732)
(h) p3⇡
(f)
(i)
cos
1( ⇡
4 )
ln 1
⇡ .
(1.2) Calculez 8
100
0.5
2
4
10
. Commentez le r´esultat.
(1.3) Calculez e14 et 382801⇡ jusqu’au 15`eme chi↵res significatifs. Quel est le
⇥
⇤
plus grand ?
(1.4) Quelle est la meilleure approximation de p7 : 2709
210 , 10583
4000 ou 2024
765 ?
Pour grouper des ´el´ements de
types di↵erents par exemple des
caract`eres et des r´eels, on utili-
sera les structures.
(1.5) Comparez la division a droite / et la division a gauche
. Commentez.
\
(1.6) Trouvez la partie r´eelle et imaginaire des nombres complexes suivants :
(a)
ei(3⇡+4)
(b)
1
1+i
(c)
1).
ln(
(1.7) Calculez la norme et l’argument des nombres complexes suivants :
(a)
ei(3⇡+4)
(b)
1
1+i
(c)
1).
ln(
(d)
3 + 7i
(e)
i3 + 1
(f)
ei ⇡
5 .
1.5 Vecteurs
Passons maintenant `a l’utilisation des vecteurs. Un vecteur sous Matlab est une
collection de d’´el´ements du mˆeme type. Un vecteur pourra repr´esenter des valeurs
exp´erimentales ou bien les valeurs discr´etis´ees d’une fonction continue.
1.5.1 D´efinir un vecteur
La m´ethode la plus simples pour d´efinir un vecteur est de donner sa description
explicite `a l’aide de la commande [ ], par exemple :
vec = [1 2 4 7 9 2.3]
vec =
1.0000
2.0000
4.0000
7.0000
9.0000
2.3000
On peut ´egalement d´efinir un vecteur colonne en utilisant le ;
col = [1 ; 2 ; 4 ; 7]
col =
1
2
4
7
Introduction `a Matlab 9
ones(m,1) sera donc vecteur co-
lonne de longueur m dont tous les
´el´ements valent 1 (de mˆeme pour
zeros et rand).
On peut concat´ener deux vecteurs :
vec1 = [1 3 5];
vec2 = [9 10 11];
vec = [vec1 vec2]
vec =
1
3
5
9
10
11
Et on peut ´egalement prendre la transpos´ee pour passer d’une ligne `a une colonne
ou r´eciproquement :
vec1 = [1 3 5];
vec = vec1’
vec =
1
3
5
Il n’est pas n´ecessaires de d´efinir la taille d’un vecteur (c’est automatique), par
contre la commande length() permet de retourner cette quantit´e.
length(vec)
ans = 3
Lorsque l’on veut acher le graph d’une fonction f telle que y = f (x) sous
Matlab, il faut d´efinir deux vecteurs : un pour le vecteur x, l’autre pour le vecteur
y = f (x). Matlab ne fait pas du calcul formel, il faut donc discretiser l’axe des x.
On utilise pour ce faire la fonction linspace(a,b,n) Cette commande g´en`ere un
vecteur ligne de n ´el´ements espac´es lin´eairement entre a et b. Par d´efaut n = 100.
Une autre m´ethode pour g´en´erer des vecteurs espac´es lin´eairement consiste `a
utiliser [a,s,b]. On cr´ee alors un vecteur entre a et b avec un espacement s :
vec=[1:2:10]
vec =
1
3
5
7
9
Il existe enfin des vecteurs sp´eciaux pr´ed´efinis dans Matlab :
ones(1,n)
zeros(1,n)
rand(1,n)
:
:
:
vecteur ligne de longueur n dont tous les ´el´ements valent 1
vecteur ligne de longueur n dont tous les ´el´ements valent 0
vecteur ligne de longueur n dont les ´el´ements sont g´en´er´es
de mani`ere al´eatoire entre 0 et 1.
1.5.2 Manipuler un vecteur
Il est important ´egalement de se familiariser `a la manipulation de vecteurs,
c’est-a-dire ˆetre capable d’extraire des sous-ensembles a l’aide des indices. Le keme
´el´ement d’un vecteur vec peut ˆetre ach´e grˆace `a la commande vec(k). k doit
ˆetre un entier sinon Matlab retournera une erreur :
>> vec = linspace(1,10,10)
2
vec = 1
3
4
5
6
7
8
9
10
>> vec(4)
ans = 4
>> vec(4.2)
Subscript indices must be real positive integers or logical.
10
1.5. Vecteurs
On peut ´egalement utiliser des vecteurs d’indices pour extraire un sous-vecteur :
>> vec = linspace(1,89,9)
vec =
12
23
1
34
45
56
67
78
89
>> vec(3:6)
ans = 23
34
45
56
>> vec(4:2:8)
ans = 34
56
78
>> subvec=[1 3 5]; vec(subvec)
ans = 1
45
23
1.5.3 Op´erations vectorielles
Pour les exposants on utilise
vec.^2
Les op´erations alg´ebriques usuelles +,
, / doivent ˆetre prises avec pr´ecau-
⇤
tions pour les vecteurs. La somme et la di↵´erence sont des op´erations termes `a
termes, et n´ecessitent donc des vecteurs de mˆeme dimension. Le produit
est le
produit matriciel. Nous y reviendrons dans la section sur les matrices. Pour utiliser
et / par ./
la mutliplication ou la division termes `a termes on doit remplacer
par .
⇤
,
Publicité
⇤
⇤
>> vec = [1 3 5 6]; vec2 = [10 20 30 40];
>> vec+vec2
ans = 11
>> vec-vec2
ans = -9
23
35
46
-17
-25
-34
>> vec.*vec2
ans = 10
60
150
240
>> vec2.*vec
ans = 10.0000
6.6667
6.0000
6.6667
De la mˆeme mani`ere que pour les scalaires, on peut appliquer toutes les fonc-
tions d´efinies pr´ec´edemment pour les vecteurs. Par exemple :
>> vec = linspace(1,10,10);
out=sqrt(vec)
out =
Columns 1 through 5
1.0000
1.4142
1.7321
2.0000
2.2361
Columns 6 through 10
2.4495
2.6458
2.8284
3.0000
3.1623
>> out2=vec.^2
out2 =
Columns 1 through 5
1
4
9
16
25
Columns 6 through 10
36
49
64
81
100
>> out3=cos(vec)
out3 =
Columns 1 through 5
0.5403
-0.4161
-0.9900
-0.6536
0.2837
Columns 6 through 10
0.9602
0.7539
-0.1455
-0.9111
-0.8391
Introduction `a Matlab 11
commandes
s’appliquent
Ces
aussi aux matrices. Dans ce cas
la commande porte sur chaque
vecteur colonne de la matrice.
Il existe aussi des commandes qui sont propres aux vecteurs.
sum(x)
prod(x)
max(x)
min(x)
:
:
:
:
somme des ´el´ements du vecteur x
produit des ´el´ements du vecteur x
plus grand ´el´ement du vecteur x
plus petit ´el´ement du vecteur x
mean(x)
: moyenne des ´el´ements du vecteur x
sort(x)
fliplr(x)
:
:
ordonne les ´el´ements du vecteur x par ordre croissant
renverse l’ordre des ´el´ements du vecteur x
Exercice
(1.8) Manipulation de vecteurs
Donnez le code Matlab qui permet de :
a. Cr´eez un vecteur colonne vec de 5 ´el´ements lin´eairement espac´es entre 2 et 3.
b. Ajoutez deux lignes `a la fin de ce vecteur avec la valeur 0.
c. Ajoutez 1 au deuxieme et sixieme ´el´ements de ce vecteur.
d. Cr´eez un second vecteur vec2 colonne de mˆeme dimension que vec contenant
les entiers pairs sup´erieurs ou ´egaux `a 6.
e. D´efinir un vecteur sumvec comme la somme des deux vecteurs vec et vec2.
f. D´efinir un vecteur prodvec comme le produit termes `a termes des deux vecteurs
vec et vec2.
g. Quel est la somme des ´el´ements de prodvec ?
h. Quel est la moyenne des ´el´ements de sumvec ?
i. Quel est le plus grand ´el´ement du vecteur v3 = vec2+pvec2+1
vec.(vec2+1) ?
1.6 Matrices
Nous arrivons maintenant aux matrices ! C’est le coeur de Matlab. Donc on se
concentre ! ! !
1.6.1 D´efinir une matrice
Une matrice va se d´efinir de fa¸con similaire `a un vecteur avec la commande [].
A =
1
4
✓
2
3
◆
On d´efinit la matrice A :
>> A = [1 2 ; 4 3]
A =
1
4
2
3
12
1.6. Matrices
Cela est ´equivalent `a
>> A = [1 2
4 3]
A =
1
4
2
3
Une matrice est compos´ee de m lignes et n colonnes. Si on souhaite connaitre la
valeur de m ou n, on utilise la commande size(A)
>> A = [1 2 5 ; 4 3 6]
2
A = 1
3
4
5
6
>> [m n] = size(A)
m = 2
n = 3
>> size(A,1)
ans = 2
On peut construire tr`es simplement une matrice ”par blocs”. Si A, B, C, D d´esignent
4 matrices (aux dimensions compatibles), on d´efinit la matrice blocs :
par l’instruction M = [A B ; C D].
M =
A B
C D
✓
◆
Comme pour les vecteurs il existe des matrices pr´ed´efinies :
la matrice identit´e (carr´ee de taille n)
la matrice `a m lignes et n colonnes dont tous les ´el´ements valent 1
la matrice `a m lignes et n colonnes dont tous les ´el´ements valent 0
une matrice `a m lignes et n colonnes dont les ´el´ements sont
g´en´er´es de mani`ere al´eatoire entre 0 et 1.
une matrice magique de dimension n.
0
0
1
1
1
1
1
:
:
:
:
:
eye(n)
ones(m,n)
zeros(m,n)
rand(m,n)
magic(n)
>> eye(3)
ans =
1
0
0
0
1
0
>> ones(2,4)
ans =
1
1
1
1
>> zeros(2)
ans =
0
0
0
0
>> rand(2,3)
ans =
0...