Vous êtes sur la page 1sur 26

Le langage de programmation Matlab :

Utilisation des scripts


Un script se prsente sous la forme d'un fichier texte avec l'extension .m
Quand on lance un script, Matlab excute une une les commandes.
Un script est un programme : Matlab est galement un langage de programmation.

1- Premier script

2- Affichage l'cran : Fonction DISP

3- Saisie au clavier : Fonction INPUT

4- Boucle FOR

5- Boucle WHILE

6- IF ELSE ELSEIF

7- BREAK

8- Exemples de scripts
o Rsolution d'une quation du 2me degr (dans R, espace des

nombres rels)
o Rsolution d'une quation du 2me degr (dans C, espace des

nombres complexes)
o Calcul de la factorielle n!
o Diagrammes de Bode d'un filtre analogique H(p)
o Diagrammes de Bode d'un filtre numrique H(z)

Convention de couleurs :

en bleu : commandes, donnes ... saisies par l'utilisateur (dans la fentre de


commande)

en noir : rsultat fourni par Matlab (dans la fentre de commande)

en rouge : script (programme)


Tlcharger tous les scripts

1- Premier script : Graphe d'une fonction une variable


Au lieu de taper la srie de commandes qui permet de tracer le graphe de la
fonction y(x) =100x/((50+x)2) :
>> fplot('100*x/((50+x)^2)',[0 200])
>> grid on
>> xlabel('R (en ohms)')
>> ylabel('P (en watts)')
>> title('Courbe P(R)')
vous pouvez une fois pour toute, crire un script.
Pour cela, il vous faut un diteur de texte (le bloc-notes par exemple) :

Le signe % signifie que le reste de la ligne est un commentaire.


Pour excuter le script, il suffit de taper son nom dans la fentre de commande :
>> script1

La commande ECHO ON permet d'afficher l'cran, les commandes excutes par


le script :
>> echo on
>> script1
% script1.m
fplot('100*x/((50+x)^2)',[0 200]);
grid on;
xlabel('R (en ohms)');
ylabel('P (en watt)');
title('Courbe P(R)');
>> echo off

2- Affichage l'cran : fonction DISP


Cette fonction permet d'afficher proprement des valeurs numriques ou bien du
texte (chane de caractres) l'cran.

Affichage de nombres :

>> a=15;
>> disp(a)
15
>> b=[1 8 9];
>> disp(b)
189
>> disp([17 -25.36 sqrt(6)])
17.0000 -25.3600 2.4495
>> disp([17 ; -25.36 ; sqrt(6)])
17.0000
-25.3600
2.4495
>> a=12;
>> disp([17 a sqrt(a+13)])
17 12 5

Affichage de textes :

>> c='Bonjour';

>> disp(c)
Bonjour
>> disp('Bonjour')
Bonjour
>> disp(['Pierre' 'Paul' 'Jacques'])
PierrePaulJacques
La commande BLANKS(n) affiche n espaces :
>> disp(['Pierre' blanks(1) 'Paul' blanks(1) 'Jacques'])
Pierre Paul Jacques

Affichage combin de textes et de nombres :

La fonction NUM2STR convertit un nombre en une chane de caractres.


>> disp(['Il est ' num2str(12) ' heures'])
Il est 12 heures
>> a=18;
>> disp(['Il est ' num2str(a) ' heures ' num2str(58)])
Il est 18 heures 58

3- Saisie au clavier : fonction INPUT


Cette fonction effectue la saisie de valeurs numriques ou bien de textes.

Saisie de nombres :

% script2.m
disp('Bonjour!');

x0=input('Taper la valeur de R min : ');


x1=input('Taper la valeur de R max : ');
disp(['R min =' num2str(x0)]);
disp(['R max =' num2str(x1)]);
fplot('100*x/((50+x)^2)',[x0 x1]) ;
grid on ;
xlabel('R (en ohms)') ;
ylabel('P (en watt)') ;
title('Courbe P(R)')
disp('Au revoir.');

>> script2
Bonjour!
Taper la valeur de R min : 20
Taper la valeur de R max : 100
R min =20
R max =100
Au revoir.

Saisie de textes :

% scrip2_1.m
nom=input('Taper votre nom : ','s');
prenom=input('Taper votre prnom : ','s');
age=input('Taper votre ge : ');
disp([nom blanks(1) prenom]);
disp(['Age : ' num2str(age)]);

>> scrip2_1
Taper votre nom : Dupont

Taper votre prnom : Jrme


Taper votre ge : 21
Dupont Jrme
Age : 21

4- Boucle FOR
Cette instruction permet de rpter un bloc d'instructions, un nombre dtermin de
fois.
Synthaxe :
for expression ,
bloc d'instructions ;
end

Exemples :
% script3.m
for i=1:5,
disp([i i*i]);
end

>> script3
11
24
39
4 16

5 25

% scrip3_1.m
n=input('Nombre de boucles = ? ');
for i=1:n,
disp(i);
end

>> scrip3_1
Nombre de boucles = ? 4
1
2
3
4

% script4.m
for i=1:2:10,
disp(i);
end

>> script4
1
3
5

7
9

% script5.m
for i=1:3,
for j=1:6,
a(i,j)=i+10*j ;
end
end
disp(a);

>> script5
11 21 31 41 51 61
12 22 32 42 52 62
13 23 33 43 53 63

5- Boucle WHILE
Synthaxe :
while condition ,
bloc d'instructions ;
end

Le programme teste la condition :


Si la condition est fausse, le programme saute l'instruction qui suit END.

Si la condition est vraie, le bloc d'instructions est excut, puis le programme teste
nouveau la condition ...

Attention aux bugs de programmation !


si la condition est toujours vraie, la boucle s'excute indfiniment : le programme
est "plant".

Oprateurs de comparaison :

==
>
<
>=
<=
~=

gal
suprieur
infrieur
suprieur
ou gal
infrieur
ou gal
diffrent

Exemples :
% script6.m
n=0 ;
while (n<10),
n=n+1;
disp(n);
end

La boucle est excute tant que n est infrieur 10 :


>> script6

1
2
3
4
5
6
7
8
9
10

&
|
~

Oprateurs logiques :
ET logique
(AND)
OU logique
(OR)
NON logique

% script7.m
note=-1;
while ((note<0) | (note>20)),
note=input('taper la note (0 20) : ');
end
disp(['note = ' num2str(note)]);

La boucle est excute tant que la note est infrieure 0 ou bien suprieure 20.
Cela permet de saisir une note forcment comprise entre 0 et 20 :
>> script7
taper la note (0 20) : 30
taper la note (0 20) : 17
note =17

6- Instructions IF ELSE ELSEIF


Synthaxe :

IF

if condition ,
bloc d'instructions ;
end

Le bloc d'instructions est excut si la condition est vraie.


Autrement, il est ignor.

IF ELSE

if condition ,
bloc d'instructions 1 ;
else
bloc d'instructions 2 ;
end

Le bloc d'instructions 1 est excut si la condition est vraie.


Sinon, c'est le bloc d'instructions 2 qui est excut.

IF ELSE IF

if condition1 ,
bloc d'instructions 1 ;
else if condition2 ,
bloc d'instructions 2 ;
end

Le bloc d'instructions 1 est excut si la condition 1 est vraie.


Sinon, si la condition2 est vraie, le bloc d'instructions 2 est excut.

% script8.m
note=-1;
while ((note<0) | (note>20)),
note=input('Taper la note (0 20) : ');
if (note<0),
disp ('Valeur invalide (note < 0)');
end
if (note>20),
disp ('Valeur invalide (note > 20)');
end

end
disp('note = ');
disp(note);

>> script8
Taper la note (0 20) : -5
Valeur invalide (note < 0)
Taper la note (0 20) : 25
Valeur invalide (note > 20)
Taper la note (0 20) : 12
note =
12

7- Instruction BREAK
L'instruction BREAK permet de sortir d'une boucle FOR ou d'une boucle WHILE.

% script11.m
for i=1:10,
if i==5,
break;
end
disp(i);
end

>> script11
1
2
3
4

% script12.m
i=0;
while 1,
i=i+1;
if i>5,
break;
end
disp(i);
end
La condition while 1 est toujours vraie.
Le seul moyen de sortir de la boucle est d'utiliser l'instruction BREAK.
>> script12
1
2
3
4
5

8- Exemples de scripts
8-1- Rsolution d'une quation du 2me degr (dans R)
8-2- Rsolution d'une quation du 2me degr (dans C)
8-3- Calcul de la factorielle n!
8-4- Diagrammes de Bode d'un filtre analogique H(p)
8-5- Diagrammes de Bode d'un filtre numrique H(z)

8-1- Rsolution d'une quation du 2me degr (dans R,


espace des nombres rels)
% trinome.m
disp('Calcul dans R des racines de ax+bx+c=0');
choix='Y';
while (choix~='N' & choix~='n'),
a=0;
while (a==0),
a=input('a=? ');
if (a==0),
disp ('Valeur non valide !');
end
end
b=input('b=? ');
c=input('c=? ');

delta=b*b-4*a*c;
if (delta<0),
disp('Pas de racine relle.');
end
if (delta==0),
disp('Une racine double :');
racine=-b/(2*a);
disp(racine);
end
if (delta>0),
disp('Deux racines :');
racine1=(-b+sqrt(delta))/(2*a);
racine2=(-b-sqrt(delta))/(2*a);
disp(racine1);
disp(racine2);
end
choix=input('Un autre calcul (O/N)? ','s');
end

>> trinome
Calcul dans R des racines de ax+bx+c=0
a=? 0
Valeur non valide !
a=? 1

b=? 2.36
c=? -4.5
Deux racines :
1.2474
-3.6074
Un autre calcul (O/N)? n

8-2- Rsolution d'une quation du 2me degr (dans C,


espace des nombres complexes)
% trinome1.m
disp('Calcul dans C des racines de ax+bx+c=0');
p(1)=input('a=? ');
p(2)=input('b=? ');
p(3)=input('c=? ');
disp('Racines :');
disp(roots(p));

>> trinome1
Calcul dans C des racines de ax+bx+c=0
a=? 2+i
b=? -5
c=? 1.5-5i
Racines :

0.8329 + 0.6005i
-0.2079 - 0.6005i

8-3- Calcul de la factorielle n!


% facto.m
disp('Calcul de la factorielle') ;
n=input('n = ? ') ;
fact=1;
for i=1:n,
fact=fact*i;
end
disp([num2str(n) '!=']);
format long e;
disp(fact);
% (C) Fabrice Sincre

>> facto
Calcul de la factorielle
n = ? 134
134!=
1.992942746161518e+228

8-4- Diagrammes de Bode d'un filtre analogique H(p)

Exemple :
Soit un filtre passe-bas du deuxime ordre dont voici la fonction de transfert :

>> bode
Ce script Matlab permet de tracer les diagrammes de Bode.
Il ncessite le fichier trans.m (fichier de dfinition de la fonction de transfert).
Gamme de frquences : f min (en Hz)=? 100
f max (en Hz)=? 100000
Nombre de points =? 1000
Figure 1 -> gain en fonction de la frquence
Figure 2 -> dphasage en fonction de la frquence

Tlcharger le script
Complments

8-5- Diagrammes de Bode d'un filtre numrique H(z)


Exemple :
Soit un filtre numrique rcursif passe-bande dont voici la fonction de transfert en z
:

>> bodenum
Ce script Matlab permet de tracer les diagrammes de Bode d'un filtre
numrique.
Il ncessite le fichier transnum.m (fichier de dfinition de la fonction de
transfert en z).
Gamme de frquences :
Fe : frquence d'chantillonnage
f min / Fe =? 0.001
f max / Fe =? 0.5
Nombre de points =? 1000
Figure 1 -> Diagramme de Bode du gain
Figure 2 -> Diagramme de Bode du dphasage
Figure 3 -> Amplification en fonction de la frquence
Figure 4 -> Dphasage en fonction de la frquence

Tlcharger le script

(C) Fabrice Sincre ; Version 1.1.10

Vous aimerez peut-être aussi