Formation Matlab GIPSA 2013
Formation Matlab GIPSA 2013
Formation Matlab GIPSA 2013
Initiation Matlab
Coriandre Vilain
GIPSA-Lab
Janvier 2014
[email protected]
Demandez le programme!
1) Ouverture de Matlab
2) Matrices
3) Chanes de caractres
4) Visualisation graphique simple
5) Programmes et Fonctions
6) Bases de programmation
7) Gestion des fichiers textes
Sance 1
Sance 2
Sance 3
Formation Matlab
Premiers pas
Prsentation de Matlab
Matlab (Matrix Laboratory) est un logiciel de calcul
matriciel syntaxe 'simple' (relativement des
langages volus comme C, C++). MATLAB est un
interprteur de commandes: les instructions sont
interprtes et excutes ligne par ligne (pas de
compilation avant de les excuter).
Il existe deux modes de fonctionnement:
q
Espace de travail :
liste des variables
dj dfinies
Aide du fichier
slctionn (si
elle existe)
Historique des
d e r n i r e s
commandes
1-Ouverture de Matlab
n
Les variables
La variable x a t dfinie trs simplement sans avoir prciser le type
de donne qu'elle contient ni sa taille : c'est un des grands avantages
de MATLAB (mais parfois aussi un inconvnient. `
Ex: pi = 18, sin = 3, affectation de valeurs des variables dj connues
de Matlab au risque de se tromper par la suite dans linterprtation);
q Une variable est dfinie par sa classe (son type). Ex : double, char
Pour avoir une information sur une variable x : whos x
q Pour effacer la variable x de l'espace de travail, taper clear x
q Pour effacer toutes les variables de l'espace de travail taper clear all
6
q
2-Matrices
a) Dfinition d'une matrice
Sous matlab, les donnes sont gnralement dfinies comme des matrices, ie des tableaux
1, 2 n dimensions. On ne considrera ici que des tableaux 1 ou 2 dimensions.
Exemple :
q
NB : Si l'on ne souhaite pas voir afficher la valeur de la variable qu'on dfinit, il suffit de
terminer la commande par le caractre ; . La variable est alors bien dfinie (on le
vrifie dans l'espace de travail) mais elle ne s'affiche pas. Si on veut vrifier la valeur de
cette variable il suffit de taper le nom de cette variable sans ; .
7
2-Matrices
Bon savoir
n
[1 ;2 ;3 ;4] (vecteur
2-Matrices
b) Elments d'une matrice
n
Chaque lment d'une matrice est accessible condition de spcifier sa place dans la matrice.
Pour cela, il suffit de donner le numro de ligne et de colonne entre ().
Exemple :
q
Si on a A = [1 5 2 6] alors A(1,2) = 5 (1re ligne, 2me colonne).
NB : en fait ici, vu que la matrice A ne contient qu'1 seule ligne on peut se contenter
d'crire A(2) pour obtenir 5
q
Si on a A = [1 5 6 ; 2 3 6] alors A(2,2) = 3 (2me ligne, 2me colonne).
q
La variable end permet de rcuprer les dernier lment d'un vecteur. Si on a A = [1 5 2 6]
alors A(end) = 6
Pour rcuprer plusieurs lments d'une matrice, il suffit de prciser l'ensemble des numros
de lignes et de colonnes des lments prlever. En particulier, pour rcuprer l'ensemble des
lments d'une ligne ou d'une colonne on utilise le caractre ' :'.
Exemple :
q
A = [1 2 4 ; 2 6 8 ; 3 5 4].
q Pour rcuprer les 2 premiers lments de la 2me ligne : A(2,[1 2]) = [2,6]
q pour rcuprer la 3me ligne : A(3, : ) = [3 5 4]
q pour rcuprer la 2me colonne : A( :,2) = [2 ;6 ;5]
9
2-Matrices
c) Opration sur les matrices
n
10
2-Matrices
c) Opration sur les matrices
n
n
n
n
n
n
n
fonctions trigonomtriques : cos, acos, sin, asin, tan, atan, cot, acot
fonctions logarithmiques : exp, log (log Nprien), log10 (log de base 10)
fonctions somme et produits : sum, cumsum, prod, cumprod
gnration de nombres alatoires : rand, randn
Permutations alatoires : randperm
transforme de Fourier discrte : fft, ifft
Arrondis : round, floor, ceil
NB : pour connatre la syntaxe d'une fonction : taper help nom_de_la_fonction
Exemples :
n
A = [1:10];
sin(A) = [0.84 0.91 0.14 -0.76 -0.96 -0.28 0.66 0.99 0.41 -0.54]
log(A) = [0 0.69 1.10 1.39 1.61 1.79 1.95 2.08 2.20 2.30]
sum(A) = 55 (sum(A) = 1+2+3+4+5+6+7+8+9+10)
cumsum(A) = [1 3 6 10 15 21 28 36 45 55] ( somme cumule)
rand(1,10) = [0.95 0.23 0.61 0.49 0.89 0.76 0.46 0.02 0.82 0.44] (par exemple)
(vecteur 1 ligne et 10 colonnes obtenu par tirage alatoire avec une loi de probabilit
uniforme : chaque lment compris entre 0 et 1 a la mme probabilit de sortir).
11
2-Matrices
d) Exercices
EX 1 :
La formule permettant de calculer rapidement la valeur de la somme des n premiers
entiers naturels est la suivante : sn =1+2+3+4++n = n*(n+1)/2.
Vrifier cette formule pour diffrentes valeurs de n : n = 100, n = 100 000.
EX 2 :
1) Gnrer un vecteur x 1 ligne et 30 colonnes rempli de 3 en utilisant la fonction ones().
2) Calculer la somme cumule de x (fonction cumsum()) et l'affecter la variable y.
3) Prlever un chantillon sur 9 de y et placer ces chantillons dans un vecteur z.
EX 3 :
1) Gnrer un vecteur x 1 colonne et 1000 lignes rempli de nombres alatoires
distribus uniformment entre 0 et 1 en utilisant la fonction rand()
2) Calculer la moyenne et l'cart type du vecteur x en utilisant mean() et std()
3) Crer un gnrateur de 'lancer de d' ie un gnrateur de nombre alatoire entier
compris entre 1 et 6 avec une probabilit uniforme (avec rand() et ceil() par exemple)
12
3-chanes de caractres
a) Dfinition d'une chane de caractre
n
nom = 'dupont';
phrase = 'ceci est une phrase';
rg = [ 'dupont';'dupond']
13
3-chanes de caractres
b) Elments d'une chane de caractres
n
Pour prlever son prnom et le mettre dans la variable prenom_du_capitaine, on peut faire
Prenom_du_capitaine = nom_du_capitaine(1:9);
On aura alors prenom_du_capitaine = 'Archibald'
NB : D'autres possibilits existent si on ne connait pas l'avance la longueur de la
chane de caractre correspondant au prnom. On peut par exemple rechercher tous
les caractres situs avant l'espace situ entre le prnom et le nom. On verra plus
loin!
14
3-chanes de caractres
c) Opration sur les chanes de caractres
n
15
NB : Par dfaut, matlab relie les points affichs par des lignes. On peut alors avoir
l'impression trompeuse d'un signal continu alors que seules les valeurs des
chantillons sont connues (signal discret)!!!
16
Exemple :
plot(A,'+') pour utiliser un marqueur de type '+'
plot(A,'-+') pour utiliser un marqueur de type '+'
ajout une ligne continue
NB : on peut aussi utiliser le gestionnaire de figure
de Matlab en slectionnant la flche de saisie
d'objet dans les icones situs au dessus de la
figure puis en faisant un click droit sur la figure
puis Show Property Editor
17
Exemple :
X = [1 5 7 9 11 13 15],
A = [1 6 3 5 7 9 12],
plot(X, A,'+')
18
:
A = [1 6 3 5 7 9 12];
B = [2 3 8 3 6 4 8];
hold on
Plot(A,'+-'), plot(B,'o-')
n Si
:
A = [1 6 3 5 7 9 12];
B = [2 3 8 3 6 4 8];
subplot(2,1,1), plot(A,'+-')
subplot(2,1,2), plot(B,'o-')
19
n Pour
n Pour
2.
EX 4 :
Visualisation d'un signal sinusodal de frquence f = 100 Hz,
chantillonn 20 kHz pendant 10 secondes
1 - Gnrer un vecteur t contenant les dates en secondes des
chantillons d'un signal de dure 10 sec et chantillonn 20
kHz.
2 - Calculer les valeurs du signal sinusodal grce la formule : y =
sin(2*pi*f*t).
3 - Afficher le signal y en fonction du temps en marquant d'une croix
les valeurs des chantillons.
4 - Placer sur le graphique un titre, des labels d'abscisses et
d'ordonne.
23
Formation Matlab
Deuxime sance
24
Rcapitulatif de la leon 1:
q
n
n
n
n
n
Programmes et fonctions
Bases de programmation
25
5-Programmes et fonctions
a) Programmes
26
5-Programmes et fonctions
a) Programmes
27
5-Programmes et fonctions
a) Programmes
n
NB : Les lignes commenant par % sont des commentaires non interprts par Matlab mais
fort utiles pour comprendre la structure du programme.
Les premires lignes de commentaires sont affiches si on tape dans la fentre d'dition de
commande: help nom_du_programme.
28
5-Programmes et fonctions
a) Programmes
Exemple de programme:
Calcul de la moyenne et de l'cart-type d'un vecteur donn.
1.
2.
3.
4.
5.
5-Programmes et fonctions
b) Fonction
n
La fonction accepte des variables d'entre et de sortie lors de son appel dans l'diteur de
commande
Les variables utilises dans la fonction sont indpendantes des variables utilises dans
l'diteur de commande (on parle de variable locales).
Exemple de fonction : Calcul de la somme de 2 nombres
function y = somme (a,b)
%function y = somme (a,b)
% calcule la somme de a et b
y=a+b
Une fonction est souvent utilise pour raliser un calcul court, utilis par un autre programme
30
5-Programmes et fonctions
b) Fonction
% -------------------------------------------!
% Description de la fonction!
% !blablabla!
% ------------------------------------------!
% Variables d'entre:!
%
Mettre ici les variables requises par la fonction si besoin!
% Variables de sortie!
%
Mettre ici le nom des variables gnres par la fonction si besoin!
%-------------------------------------------!
% Auteur(s), date de programmation, dates de modifs!
!
Lignes de programme!
% commentaires sur ce que fait la fonction!
Lignes de programme!
!!
5-Programmes et fonctions
Exemple de fonction:
Calcul de la moyenne et de l'cart-type d'un vecteur donn.
function [moy,ec_typ] = calc_moy_ec_typ(x)!
moy = mean(x);!
ec_typ = std(x);!
1.
2.
Dans l'diteur de commande, crer un vecteur u dont on veut calculer la moyenne et l'cart
type. Exemple : u = 1:10;
3.
4.
32
Exercices rcapitulatifs
EX 5
Renommage de nom de fichier :
Soit la variable nom_fich = 'fichier_1.txt';
a) Dfinir une variable contenant le nom du fichier sans son extension
b) Ajouter cette variable le suffixe '_new.txt' par concatnation de
chane de caractre.
c) Gnrer une fonction change_extension qui accepte en variable d'entre des
chanes de caractre de type nom_de_fichier.extension et qui transforme
automatiquement le nom de l'extension ( 3 caractres) en dat . La valeur de
la sortie tant alors nom_de_fichier.dat.
EX 6
Gestion de matrices de chaines de caractres
Gnrer une variable nom_fich contenant sur 3 lignes 3 noms de fichiers :
toto_1.txt, toto_2.txt, toto_3.txt.
Que se passe t'il si l'on y concatne la chane 'toto_10.txt'?
33
6-Bases de programmation
a) Les expressions logiques (ou expressions boolennes).
En franais :
Est ce que A est gal B
Est ce que A est suprieur B
Est ce que A est un vecteur vide
Sous Matlab :
A==B (noter le double =)
A>B (noter le simple >)
isempty(A)
34
6-Bases de programmation
Principales fonctions utilisant des expressions logiques :
q
If else end
If expression logique
effectuer actions 1
else
effectuer actions 2
end
Exemple:
rep = input('Rponse 1 ou 2?');
if rep == 1
disp('Vous avez tap la rponse 1');
else
disp('vous avez tap la rponse 2') ;
end
35
6-Bases de programmation
q
A = [1 2 4 5 6]
find(A==4) donne le rsultat 3 (c'est l'chantillon associ au cas o
la condition
6-Bases de programmation
q
37
6-Bases de programmation
b) Les boucles
Elles permettent de rpter un ensemble d'actions pendant
un nombre de fois prdfini.
Sous matlab, il existe 2 types de boucles :
q La boucle forend
q La boucle while end
38
6-Bases de programmation
n
Elle permet de rpter une action utilisant une variable spcifie aprs le for.
Ex :
for i = 1:3
Les tches peuvent faire appel (ou pas) la variable i qui
tche 1
vaudra ici :
tche 2
1 lors du 1er passage de la boucle,
2 lors du 2nd passage
Exemple :
Pour calculer la somme des lments dun vecteur x on peut calculer:
som = 0; % initialisation
for i = 1:length(x)
som = som+x(i);
end
39
6-Bases de programmation
n
Elle permet de rpter une action tant que l'expression logique est vraie.
end
40
6-Bases de programmation
EX 7
Boucle for et nombre d'or.
1.
2.
EX 8
Boucle while
Demander l'utilisateur de donner un nombre entre 0 et 10 (en
utilisant la fonction input et le faire recommencer tant que le nombre
donn est diffrent de 8)
41
Formation Matlab
Troisime sance
42
Exemple:
n
n
44
formatage de chanes :
En plus de la concatnation de chanes avec [] ou strcat(), il existe des outils qui permettent
d'intgrer dans une chane de caractres des donnes de tout types (nombres virgule
flottante, entier,). C'est ce que permet la commande sprintf.
NB : Pour qu'une ' soit incluse dans le texte il faut la doubler, sinon matlab l'interprte comme la
fin de la ligne de texte et affiche une erreur.
45
Exemple :
q
q
q
a = sprintf('0+0 = %f',3)
a = sprintf('0+0 = %s','la tte toto')
a = sprintf('toto a %d amis qui s''appellent %s et %s',2, 'titi', 'tutu')
NB: '' le caractre % tant rserv au formatage, si l'on souhaite l'inclure dans
une chane formate, il faut utiliser %%
46
\t : tabulation
\n : nouvelle ligne
\r : retour charriot
Exemple :
q
47
2.34, 4))
[nom_de_fichier,val1,val2] = strread(a,'%s%f%d')
NB : la variable nom_de_fichier nest pas de format char mais de format cell (cellule). Pour
la convertir en char il faut faire : nom_de_fichier = char(nom_de_ficher)
48
49
fread(fid,n,'char)
fscanf(fid,'%c',n)
fgetl(fid) : Lecture de la ligne courante du fichier
50
51
load : Si les donnes ne contiennent que des nombres, on peut utiliser la commande load :
S = load('fichier.txt');
textread : Si les donnes sont des colonnes de nombres et de chanes de caractres, on
peut utiliser la commande textread
Exemple :
Si le fichier toto.txt contient 3 colonnes de donnes spares par un espace :
nom (chane de caractres) val1 (float) val2 (int), On peut rcuprer ces donnes de la faon
suivante :
[nom,v1,v2] = textread('toto.txt','%s%f%d')
52
53
54
55