Formation Matlab GIPSA 2013

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 55

Formation

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

mode interactif: MATLAB excute les instructions au fur et


mesure qu'elles sont donnes par l'usager.
mode excutif: MATLAB excute ligne par ligne un fichier
".m" (programme en langage MATLAB).

1-Ouverture de Matlab (R2011b)


Arborescence
Du dossier en cours

Fentre principale : Editeur


de commandes (pour taper
les instructions)

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 diffrentes fentres :


q

Dans la fentre d'dition de commande taper x = 1 et visualiser les


consquences sur la fentre d'espace de travail et d'historique de
commande.

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

Si on tape A = 335, on dfinit une variable A correspondant une matrice 1 ligne et


1 colonne contenant le nombre 335.
Si on tape A = [12 15 138], on dfinit une variable A correspondant une matrice 1
ligne et 3 colonnes contenant les nombre 12, 15 et 138 (On peut parler dans ce cas
de vecteur). Les espaces entre les nombres permettent de dlimiter les colonnes (on
peut aussi utiliser des , pour cela) .
Si on tape A = [1 3 5 ; 2 4 6], on dfinit une matrice A 2 lignes et 3 colonnes. Les
caractres ; permettent de passer la ligne et les espaces dlimitent les colonnes.
Concatnation : si on a A = [1 2 3] et B = [4 5 6 7], on peut concatner les 2 variables
en une seule : C = [A B], on aura alors C = [1 2 3 4 5 6 7];

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

Pour crer un vecteur A (matrice 1 ligne ou 1 colonne) contenant des nombres


rgulirement espacs d'un pas p, commenant par le nombre u et finissant par v, il suffit
de taper :
A=u:p:v
Exemples:
q
Vecteur commenant par 0 et allant jusqu' 100 : A = 0:100
q
vecteur commenant par 3 et finissant par 27 par pas de 3 : A = 3 :3 :27 (on aura alors
A = [3 6 9 12 15 18 21 24 27] ).

Pour transformer un vecteur ligne en vecteur colonne ou inversement, il suffit d'utiliser le


caractre ' (apostrophe) aprs le vecteur transformer.
Exemple :
q
Si on dfinit A = [1 4 2 6] (vecteur ligne), alors A' est gal
colonne).

[1 ;2 ;3 ;4] (vecteur

NB : le caractre ' est en fait le symbole de transposition, il est applicable une


matrice quelconque. Si A = [1 2 3 ; 4 5 6 ; 7 8 9] alors A' = [1 4 7 ; 2 5 8 ; 3 6 9]

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

Addition / soustraction : 2 matrices de mmes dimensions (mme nombre de


lignes et de colonnes) s'additionnent ou se soustraient terme terme.
Exemple:
q
A = [1 2 3 ; 4 5 6] ,
B = [2 4 6 ; 7 8 -1]
A+B = [3 6 9 ; 11 13 5]
A-B = [-1 -2 -3 ; -3 -3 7]

Multiplication ou division : la multiplication ou division de matrice obit des


rgles spciales qu'on ne dtaille pas ici. En revanche on peut multiplier ou
diviser 2 matrices terme terme par l'emploi des symboles .* ou ./
Exemple:
q
A = [1 2 3 ; 4 5 6] ,
B = [2 4 6 ; 7 8 -1]
A.*B = [2 8 18 ; 28 40 -6]
A./B = [0.5 0.5 0.5 ; 0.57 0.62 -6]

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

Les chanes de caractres sont des matrices de


caractres!

Pour dfinir une chane de caractre on utilise les


apostrophes
Exemple
q
q
q

nom = 'dupont';
phrase = 'ceci est une phrase';
rg = [ 'dupont';'dupond']

13

3-chanes de caractres
b) Elments d'une chane de caractres
n

Pour rcuprer certains caractres d'une chane de caractres, il suffit de


prciser les indices des numros de lignes et de colonnes correspondant.
Exemple:
Nom_du_capitaine = 'Archibald Haddock';

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

Concatnation : pour concatner 2 chanes de caractres, on peut


utiliser les symbole [];
Exemple:
a = 'Tryphon'
b = ' fait le zouave'
c = [a b];
Que croyez vous qu'il arrive si on affiche la valeur de c?

Transposition : on peut transposer une chane de caractres avec le


symbole '
NB : d'autres oprations sont possibles mais nous les dtaillerons dans
la partie avance.

15

4-Visualisation graphique simple


a) Affichage des valeurs d'un vecteur
n

Pour afficher les valeurs d'un vecteur


A = [1 6 3 5 7 9 12], il suffit de taper
plot(A). On obtient la figure ci-contre.
En abscisse, la valeur reprsente
correspond au numro de l'chantillon.
En ordonne, la valeur reprsente est
l'lment de A associ au numro
d'chantillon mentionn en abscisse

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

4-Visualisation graphique simple


q

On peut s'affranchir du problme en


reprsentant chaque point par un
marqueur.

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

4-Visualisation graphique simple


b) Affichage des valeurs d'un vecteur en fonction d'un autre vecteur
n Si

on veut afficher un vecteur A en fonction d'un autre vecteur X, il suffit de


taper : plot(X,A).

Matlab interprte le premier vecteur


comme celui correspondant l'axe des
abscisses et le second vecteur comme
celui correspondant l'axe des
ordonnes.
q

Exemple :
X = [1 5 7 9 11 13 15],
A = [1 6 3 5 7 9 12],
plot(X, A,'+')

18

4-Visualisation graphique simple


c) Affichage de plusieurs vecteurs
n Si

on veut afficher un vecteur A et un vecteur B sur une mme


fentre, il faut activer le mode hold dans l'diteur de commande
en tapant: hold on (par dfaut, ce mode est off).
Exemple

:
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

on veut afficher un vecteur A et un vecteur B sur une fentre


spare en 2 sous fentres, il faut utiliser la commande subplot.
Exemple

:
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

4-Visualisation graphique simple


c) Labels, grilles et lgendes :
En mode de commande, on peut paramtrer les proprits d'un graphique :
n pour mettre un label sur l'axe des x : xlabel('texte afficher')
n pour mettre un label sur l'axe des y : ylabel('texte afficher')
n pour mettre un titre la figure : title('texte afficher')
n pour rajouter un quadrillage : grid on
n pour afficher une lgende : legend('courbe 1','courbe 2')
Exemple :
X = [1 5 7 9 11 13 15] ;
A = [1 6 3 5 7 9 12] ;
plot(X, A,'+');
hold on
Y = [2 4 6 8 10 12 14] ;
B = [2 10 6 5 9 7 12] ;
plot(Y,B,'o');
xlabel('temps')
ylabel ('Valeurs')
title('Essai de graphique superpos')
grid on
legend('signal A', 'signal B') ;
20

4-Visualisation graphique simple


d) Cration, fermeture des figures
n Pour

crer une nouvelle figure : figure ou figure(num_de_figure)

n Pour

effacer la figure courante (en la laissant ouverte): clf (clear figure)

n Pour

fermer une figure :


n close : efface la figure courante
n close(num_de_figure) : ferme la figure de num_de_figure
n close all : ferme toutes les fentres ouvertes
NB : A sa cration, une figure est associe un identifiant (handle)
dfini par matlab. Pour rcuprer l'identifiant de la figure courante :
gcf
21

4-Visualisation graphique simple


e) Enregistrement des figures
n

Pour sauver une figure, il existe deux possibilits:


1.

Mode interactif : aller dans la fentre associe la figure et


cliquer sur >fichier>enregistrer sous puis rentrer le type de format
de sortie de la figure:
q
q

2.

Format graphique simple (bmp, jpg, tiff)


Format matlab (.fig) qui permettra de retravailler la figure
posteriori si besoin

Mode commande : rester dans la fentre d'diteur de commande


et taper saveas(gcf, 'nom_du_fichier',
'type_de_fichier_de_sortie').

Exemple: saveas(gcf, 'figure_cv','fig') permet de sauver la figure


courante (gcf) en format Matlab
22

4-Visualisation graphique simple


f) Exercice :

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

Suite la leon 1 vous devez savoir :


n
n

n
n
n
n
n

Gnrer un vecteur allant de 1 100 par pas de 2 : A = 1:2:100


Prlever dans un vecteur un chantillon tous les 3 chantillons : B =
A(1:3:end);
Additionner 2 matrices A et B de mmes dimensions : C = A+B
Multiplier 2 matrices A et B de mme dimension terme terme : C = A.*B;
Transposer une matrice : B = A';
Grer de faon simple les chanes de caractres
Gnration et manipulation de graphiques

La leon 2 va aborder les thmes suivants :


n
n

Programmes et fonctions
Bases de programmation
25

5-Programmes et fonctions
a) Programmes

Un programme matlab est une suite d'instructions enregistres dans un


fichier texte ayant l'extention '.m'.

Dans un programme, chaque instruction est effectue ligne par ligne


comme si elle tait tape dans la fentre d'dition de commande.

Toutes les variables utilises par le programme sont disponibles dans la


fentre d'diteur de commande.

26

5-Programmes et fonctions
a) Programmes

Pour excuter un programme, Matlab doit pouvoir le localiser. Pour cela il


existe la variable denvironnement path. Cest lensemble de tous les
emplacements des dossiers susceptibles de contenir des fichiers .m .

Par dfaut, Matlab cherche si le programme excuter est situ dans le


rpertoire courant. Sil ne le trouve pas, il cherche dans tous les dossiers
spcifis dans la variable path. Sil ne le trouve nulle part, il affichera un
message derreur de type : file not found

Pour ajouter un rpertoire dans la liste du path on peut utiliser la commande


addpath()

27

5-Programmes et fonctions
a) Programmes
n

La structure d'un programme devrait toujours tre grosso-modo la suivante


% toto.m!
%-------------------------------------------!
% Description du programme!
% !blablabla!
% ------------------------------------------!
% Variables d'entre:!
%
Mettre ici les variables requises par le programme si besoin!
% Variables de sortie!
%
Mettre ici le nom des variables gnres par le programme si besoin!
%-------------------------------------------!
% Auteur(s), date de programmation, dates de modifs!
!
Lignes de programme!
% commentaires sur ce que fait le programme!
Lignes de programme!

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.

Ouvrir l'diteur de matlab


Ecrire le programme suivant
% calc_moy_ec_type
% programme calculant la moyenne
% et l'cart type d'un vecteur x
% Input :
% * x : vecteur dont on veut connatre la moy, et l'et.
% Output:
% * moy, ec_typ : moyenne et cart type de x
% C.V. le 10/10/06
moy = mean(x);
ec_typ = std(x);

3.
4.
5.

Sauver le programme sous le nom que vous voulez, ex: calc_moy_et.m


Visualier l'aide de ce programme (help calc_moy_et)
Excuter le programme: calc_moy_et aprs avoir dfini le vecteur x
29

5-Programmes et fonctions
b) Fonction
n

Une fonction matlab ressemble un programme matlab. Deux diffrences


cependant :
q

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

Une fonction commence toujours par une ligne du type


function [Variables de sortie] = nom_de_la_fonction([Variables d'entre])

30

5-Programmes et fonctions
b) Fonction

La structure d'une fonction devrait toujours tre grosso-modo la suivante

function [Variables de sortie] = toto ([Variables d'entre])!


! % function [Variables de sortie] = toto ([Variables d'entre]) !

% -------------------------------------------!
% 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!
!!

L'appel de la fonction dans l'diteur de commande se fait alors par


[var_out1, var_out2,] = toto (var_in1, var_in2,)
31

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.

Enregistrer la fonction ci-dessus (par ex: calc_moy_et_func.m)

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.

Taper dans l'diteur de commande : [m, et] = calc_moy_ec_typ(u).


Dans ce cas, la variable m prendra le rsultat de la moyenne calcule dans la fonction sous le nom de
variable locale moy. La variable ec prendra le rsultat de l'cart type calcul sous le nom de ec_typ.

4.

Visualiser la valeur des variables x, moy et ec_typ


Les variables x, moy et ec_typ sont locales. Elles n'existent pas pour l'diteur de commande. Seules
existent les variables m et et

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

Expressions dont la rponse est


Oui ou Non
Exemples :
1) a = 2, a == 1
2) a = [1 2 3 1 4 6], a==1
3) a = 'toto', a == 'titi'
4) a = [1 2], a== [1 2 3]

Sous Matlab :
A==B (noter le double =)
A>B (noter le simple >)
isempty(A)

Expressions dont la rponse


est 1 (oui) ou 0 (non)

NB : Les termes comparer doivent tre de


mme taille (cas 1 et 3) sinon erreur (cas 4).
Exception si l'un des termes est un vecteur de
taille 1, dans ce cas Matlab se dbrouille (cas 2).

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

L'expression logique a la valeur 0 ou 1:


q si elle vaut 1 alors seule l'action 1 est
effectue,
q

sinon, seule l'action 2 est effectue.

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

find : find(Z) donne les valeurs des numros d'chantillons du


vecteur Z diffrents de 0
En particulier, si Z est le rsultat d'une opration logique (ie un
vecteur de 0 ou de 1) , find(Z) donne les numros d'chantillons
pour lesquels cette opration est vraie (ie pour lequel Z =1).
Find est trs utilise pour dtecter des seuils sur un signal.
Exemple :

A = [1 2 4 5 6]
find(A==4) donne le rsultat 3 (c'est l'chantillon associ au cas o

la condition

A==4 est vraie)

find (A>2) donne le rsultat [3 4 5]; (mme principe avec A>2)


ech_seuil = min(find (A>2)) donne le rsultat 3, (c'est le numro du 1er
chantillon dont la valeur est au dessus du seuil)
36

6-Bases de programmation
q

Strfind: strfind(s, 'chane chercher dans s') donne la valeur de


l'chantillon de s correspondant au dbut de la chane cherche
Exemple :
s

= 'toto est un sot';


strfind(s,'sot') donne le rsultat 13
strfind(s,'titi') donne le rsultat [] (ensemble vide)

Nom_du_capitaine = 'Archibald Haddock';


Pour prlever son prnom et le mettre dans la variable
prenom_du_capitaine, on peut aussi faire :
Prenom_du_capitaine = nom_du_capitaine(1:strfind(nom_du_capitaine,' ')-1);
On aura alors prenom_du_capitaine = 'Archibald'
Ici on n'a pas besoin de connatre le nombre de lettres exactes du prnom ou du
nom. On prend tout ce qui est avant l'espace pour le prnom.

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

La boucle for variable = expression end

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

3 lors du dernier passage


end

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

La boucle while expression logique end

Elle permet de rpter une action tant que l'expression logique est vraie.

while i<10 & j>10


tche 1
tche 2

end

Les tches seront


effectues tant
que i sera
infrieur 10 et j
sera suprieur
10

Exemple : Pour calculer la somme du


vecteur x comme prcdemment
som = 0; % initialisation
fin = 0; % variable logique qui nous
servira arrter la boucle
While not(fin)
som = som+x(i);
If i < length(x)
i = i+1;
else
fin = 1; % pour arrter la boucle
end
end

40

6-Bases de programmation
EX 7
Boucle for et nombre d'or.
1.

2.

Gnrer un vecteur A de taille 100 dont chaque chantillon A(i) est


gal la somme des 2 chantillons prcdents et que A(1) = A(2) =
1:
A(1) = 1,
A(2) = 1.
A(i) = A(i-1)+A(i-2).
Afficher sur un graphique la variable r dfinie par r(i) = A(i)/A(i-1);

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

Suite la leon 2 vous devez savoir :


q

Effectuer des oprations logiques sur des nombres


ou des chanes de caractre
Gnrer des programmes et des fonctions utilisant
des boucles for end ou while end

Programme de la 3me sance :


q
q
q

Gestion des fichiers textes


Oprations avances sur les chanes de caractres
Travaux Pratiques
43

7-Gestion des fichiers textes


a) Introduction
n

Un fichier texte est une suite de caractres enregistrs sur le


disque dur de l'ordinateur.
Matlab utilise le code ASCII ISO LATIN-1 pour coder chaque
caractre: un caractre est cod sous la forme d'un nombre de 2
octets (donc choisi parmi 2^16 possibilits).
Sous Matlab, la correspondance entre un caractre et son code
ascii se fait simplement par les commandes double ou char.
q

Exemple:
n
n

le code ascii du caractre 'a' est donn par double('a').


le caractre a correspondant au code ascii 98 est obtenu par
char(98).

44

7-Gestion des fichiers textes


b) Retour sur la gestion des chanes de caractres
n

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.

Ecriture de chanes formates avec sprintf :


sprintf s'utilise de la manire suivante :
A = sprintf('texte incluant les donnes d1 : %format-de-d1 et d2 : %format-de-d2 et des
caractres spciaux comme le retour la ligne \n',valeur de d1, valeur de d2)

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.

A = sprintf('l''ge du capitaine est %d ans.\n',55);

45

7-Gestion des fichiers textes


n

formatage de chanes (suite):


Le type de donnes intgres la chane est prcis avec le symbole %. On peut citer
par exemple :

%f : float (plus gnralement %a.bf avec a = nombre minimum de chiffres afficher, b:


nombre de dcimales afficher)
%d : entier (plus gnralement %.ad avec a = nombre minimum de chiffres afficher,
remplit de 0 si l'entier contient moins de chiffre que a)
%c : char
%s : string of char
q

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

7-Gestion des fichiers textes


n

formatage de chanes (fin):


En plus des donnes formates utilisant le caractre %, on
peut inclure dans les chanes formates certains 'caractres'
spciaux comme le retour la ligne, la tabulation :
n
n
n

\t : tabulation
\n : nouvelle ligne
\r : retour charriot

Exemple :
q

sprintf('le rsultat est \n\ta = 2\n\tb=2')

47

7-Gestion des fichiers textes


n

Lecture de chanes formates :


Pour lire des chanes contenant diffrents type de donnes on peut utiliser la
fonction strread.
Supposons qu'une chane de caractres A contienne les donnes suivantes :
nom_de_fichier valeur_1 valeur_2 avec :
n
n
n

nom_de_fichier : chane de caractres,


valeur_1 : float
valeur_2 : entier

On peut alors rcuprer les valeurs de nom_de_fichier, valeur_1 et valeur_2 de


A par la commande strread : [nom_fich, v1, v2] = strread(A,'%s%f%d')
Exemple :
a = 'fichier1.txt 2.34 4'; (quivalent a = sprintf('%s %f %d', 'fichier1.txt',

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

7-Gestion des fichiers textes


c) Ouverture/ Fermeture d'un fichier texte
n

Ouverture en lecture d'un fichier nomm nom_fich.txt :


fid1 = fopen('nom_fich.txt','rt')
Le fichier nom_fich.txt est ouvert en lecture.
NB : fid1 est l'identifiant du fichier texte ouvert. On peut ouvrir simultanment
plusieurs fichiers (en lecture et/ou criture condition de dfinir pour chacun
un nom d'identifiant diffrent.

Ouverture en criture d'un fichier nom_fich.txt :


fid2 = fopen('nom_fich.txt','wt')
Le fichier nom_fich.txt est ouvert en criture

Fermeture du fichier : fclose(fid).

Penser toujours fermer un fichier en fin de manipulation!!!

49

7-Gestion des fichiers texte


d) Lecture d'un fichier texte
n

La lecture d'un fichier se fait de faon cursive : les caractres ou les


lignes de caractres sont lus la suite les uns des autres.

Lecture d'un caractre :


n
n

fread(fid,1,'char') : donne le code ascii du caractre courant


fscanf(fid,'%c',1) : donne le caractre courant

Lecture d'un ensemble de n caractres


n
n
n

fread(fid,n,'char)
fscanf(fid,'%c',n)
fgetl(fid) : Lecture de la ligne courante du fichier

50

7-Gestion des fichiers texte


d) Lecture d'un fichier texte
Test pour savoir si le curseur est la fin du fichier : feof(fid)
feof(fid) = 1 si l'on a atteint la fin du fichier
feof(fid) = 0 sinon
Exemple :
Lecture de chaque ligne d'un fichier jusqu' la fin du fichier
while not(feof(fid))
l = fgetl(fid);
end

51

7-Gestion des fichiers texte


d) Lecture d'un fichier texte
n

Lecture d'une suite de caractres et/ou de nombres disposs en colonnes


q

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

7-Gestion des fichiers texte


d) Lecture d'un fichier texte
EX 9

Crer avec le bloc-note un texte simulant une suite de


donnes de diffrents types spares par des tabulations :
q
q
q

nom de famille (chane de caractres)


Age (entier)
note (nombre flottant)

Rcuprer ces informations sous Matlab l'aide des commandes


d'ouverture et de lecture de fichiers textes

53

7-Gestion des fichiers texte


e) Ecriture d'un fichier texte
n

L'criture d'un fichier se fait de faon cursive : les


caractres ou les lignes de caractres sont crits la
suite les uns des autres.

Ecriture d'une chane de caractres formate :


n
n

fprintf(fid,' toto est un sot \n')


fprintf(fid,'%s %f %f',nom_de_fichier,val1, val2)

54

7-Gestion des fichiers texte


e) Ecriture d'un fichier texte
EX 10 : Ecriture de fichier texte
Reprendre le fichier texte gnr pour lexercice 9. Lire
lensemble des notes de chaque lve pour les
augmenter dun point et crire le nouveau fichier
contenant le nom, lge et la note modifie.
EX 11 : Lecture de fichiers Texgrids
Cf annexes

55

Vous aimerez peut-être aussi