Le langage de programmation Matlab :

Utilisation des scripts

 

Un script se présente sous la forme d'un fichier texte avec l'extension .m

Quand on lance un script, Matlab exécute une à une les commandes.

Un script est un programme : Matlab est également un langage de programmation.

 

Convention de couleurs :

 

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

 

Au lieu de taper la série 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 exécuter le script, il suffit de taper son nom dans la fenêtre de commande :

>> script1

 

La commande ECHO ON permet d'afficher à l'écran, les commandes exécutées 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 numériques ou bien du texte (chaîne de caractères) à l'écran.

 

>> a=15;

>> disp(a)

15

>> b=[1 8 9];

>> disp(b)

1 8 9

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

 

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

 

La fonction NUM2STR convertit un nombre en une chaîne de caractères.

>> 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 numériques ou bien de textes.

 

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

 

 

% scrip2_1.m

nom=input('Taper votre nom : ','s');

prenom=input('Taper votre prénom : ','s');

age=input('Taper votre âge : ');

disp([nom blanks(1) prenom]);

disp(['Age : ' num2str(age)]);

 

>> scrip2_1

Taper votre nom : Dupont

Taper votre prénom : Jérôme

Taper votre âge : 21

Dupont Jérôme

Age : 21

 

4- Boucle FOR

Cette instruction permet de répéter un bloc d'instructions, un nombre déterminé de fois.

Synthaxe :

for expression ,

bloc d'instructions ;

end

 

Exemples :

% script3.m

for i=1:5,

disp([i i*i]);

end

 

>> script3

1 1

2 4

3 9

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 exécuté, puis le programme teste à nouveau la condition ...

 

Attention aux bugs de programmation !

si la condition est toujours vraie, la boucle s'exécute indéfiniment : le programme est "planté".

 

==
égal
>
supérieur
<
inférieur
>=
supérieur ou égal
<=
inférieur ou égal
~=
différent

 

Exemples :

% script6.m

n=0 ;

while (n<10),

n=n+1;

disp(n);

end

 

La boucle est exécutée tant que n est inférieur à 10 :

>> script6

1

2

3

4

5

6

7

8

9

10

 

&
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 exécutée tant que la note est inférieure à 0 ou bien supérieure à 20.

Cela permet de saisir une note forcément 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 condition ,

bloc d'instructions ;

end

 

Le bloc d'instructions est exécuté si la condition est vraie.

Autrement, il est ignoré.

 

if condition ,

bloc d'instructions 1 ;

else

bloc d'instructions 2 ;

end

 

Le bloc d'instructions 1 est exécuté si la condition est vraie.

Sinon, c'est le bloc d'instructions 2 qui est exécuté.

 

if condition1 ,

bloc d'instructions 1 ;

else if condition2 ,

bloc d'instructions 2 ;

end

 

Le bloc d'instructions 1 est exécuté si la condition 1 est vraie.

Sinon, si la condition2 est vraie, le bloc d'instructions 2 est exécuté.

 

 

% 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- Résolution d'une équation du 2ème degré (dans R)

8-2- Résolution d'une équation du 2ème 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 numérique H(z)

 

8-1- Résolution d'une équation du 2ème degré (dans R, espace des nombres réels)

 

% 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 réelle.');

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- Résolution d'une équation du 2ème 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 Sincère

 

>> 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 deuxième ordre dont voici la fonction de transfert :

 

>> bode

Ce script Matlab permet de tracer les diagrammes de Bode.

Il nécessite le fichier trans.m (fichier de définition de la fonction de transfert).

Gamme de fréquences : f min (en Hz)=? 100

f max (en Hz)=? 100000

Nombre de points =? 1000

Figure 1 -> gain en fonction de la fréquence

Figure 2 -> déphasage en fonction de la fréquence

 

 

Télécharger le script

Compléments

 

8-5- Diagrammes de Bode d'un filtre numérique H(z)

 

Exemple :

Soit un filtre numérique récursif passe-bande dont voici la fonction de transfert en z :

 

 

>> bodenum

Ce script Matlab permet de tracer les diagrammes de Bode d'un filtre numérique.

Il nécessite le fichier transnum.m (fichier de définition de la fonction de transfert en z).

Gamme de fréquences :

Fe : fréquence 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 déphasage

Figure 3 -> Amplification en fonction de la fréquence

Figure 4 -> Déphasage en fonction de la fréquence

 

 

Télécharger le script

 

(C) Fabrice Sincère ; Version 1.1.10