• Aucun résultat trouvé

20utilisationdesscripts

N/A
N/A
Protected

Academic year: 2021

Partager "20utilisationdesscripts"

Copied!
24
0
0

Texte intégral

(1)

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.



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



Résolution d'une équation du 2ème degré (dans R, espace des nombres

réels)



Résolution d'une équation du 2ème degré (dans C, espace des nombres

complexes)



Calcul de la factorielle n!



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



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

Convention de couleurs :



en bleu : commandes, données ... saisies par l'utilisateur (dans la fenêtre de

commande)



en noir : résultat fourni par Matlab (dans la fenêtre de commande)



en rouge : script (programme)

Télécharger tous les scripts

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

(2)

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

(3)

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

(4)

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.



Affichage de nombres :

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



Affichage de textes :

>> c='Bonjour';

>> disp(c)

Bonjour

(5)

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



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)]);

(6)

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.

(7)



Saisie de textes :

% 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

(8)

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 = ? ');

(9)

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,

(10)

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é".

(11)



Opérateurs de comparaison :

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

==

égal

>

supérieur

<

inférieur

>=

supérieur

ou égal

<=

inférieur ou

égal

~=

différent

(12)

9

10



Opérateurs logiques :

% 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

&

ET logique

(AND)

|

OU logique

(OR)

~

NON logique

(13)

if condition ,

bloc d'instructions ;

end

Le bloc d'instructions est exécuté 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 exécuté si la condition est vraie.

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



IF ELSE IF

if condition1 ,

bloc d'instructions 1 ;

else if condition2 ,

bloc d'instructions 2 ;

end

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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 :');

(19)

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

(20)

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

(21)

Nombre de points =?

1000

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

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

(22)

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 :

(23)

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

(24)

Télécharger le script

Figure

Figure 1 -&gt; gain en fonction de la fréquence
Figure 1 -&gt; Diagramme de Bode du gain

Références

Documents relatifs

„ Dans un montage de diodes à cathodes communes, c'est la diode dont le potentiel d'anode est le plus haut qui devient l'unique diode passante?. „ Dans un montage de diodes à

Etude des performances du corps de chauffe d’une chaudière à bois déchiqueté -

Le présent document améliore les capacités du protocole de transfert de fichier (FTP, File Transfer Protocol) en supprimant les restrictions à 7 bits sur les noms de chemins

La première question est : quel identifiant de principal un processus de serveur de transfert de fichier va t-il utiliser ? Il y a au moins deux possibilités : 1) le serveur

Il prévoit nolam!llpnt.·.. des

Les évènements javascript sont placés dans le corps de la page comme attributs d'une balise html.. &lt;balise evenement

LOGICO – Colorie la case lorsque tu as réussi la fiche... LOGICO – Colorie la case lorsque tu as réussi

L’intérêt de l’échelle logarithmique est donc énorme pour le tracé et l’analyse du module d’une fonction de transfert... Chp-6 Analyse fréquentielle des signaux et systèmes