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.
>> 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
>> 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
>> 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.
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.
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 ,
Exemples :
% script3.m
for i=1:5,
>> script3
1 1
2 4
3 9
4 16
5 25
% scrip3_1.m
n=input('Nombre de boucles = ? ');
for i=1:n,
>> scrip3_1
Nombre de boucles = ? 4
1
2
3
4
% script4.m
for i=1:2:10,
>> script4
1
3
5
7
9
% script5.m
for i=1:3,
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 ,
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é".
Exemples :
% script6.m
n=0 ;
while (n<10),
La boucle est exécutée tant que n est inférieur à 10 :
>> script6
1
2
3
4
5
6
7
8
9
10
% script7.m
note=-1;
while ((note<0) | (note>20)),
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 :
Le bloc d'instructions est exécuté si la condition est vraie.
Autrement, il est ignoré.
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é.
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)),
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,
>> script11
1
2
3
4
% script12.m
i=0;
while 1,
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'),
>> 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,
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
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
(C) Fabrice Sincère ; Version 1.1.10
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
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
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.
- Affichage de nombres :
>> 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 :
>> 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 :
>> 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 :
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 :
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,end
a(i,j)=i+10*j ;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é".
- Opérateurs de comparaison :
==
|
é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;end
disp(n);
La boucle est exécutée tant que n est inférieur à 10 :
>> script6
1
2
3
4
5
6
7
8
9
10
- Opérateurs 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 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
bloc d'instructions ;end
Le bloc d'instructions est exécuté si la condition est vraie.
Autrement, il est ignoré.
- IF ELSE
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
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) : ');end
if (note<0),
disp ('Valeur invalide (note < 0)');end
if (note>20),
disp ('Valeur invalide (note > 20)');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,end
break;end
disp(i);
>> script11
1
2
3
4
% script12.m
i=0;
while 1,
i=i+1;end
if i>5,
break;end
disp(i);
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;end
while (a==0),
a=input('a=? ');end
if (a==0),
disp ('Valeur non valide !');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 :');end
racine=-b/(2*a);
disp(racine);
if (delta>0),
disp('Deux racines :');end
racine1=(-b+sqrt(delta))/(2*a);
racine2=(-b-sqrt(delta))/(2*a);
disp(racine1);
disp(racine2);
choix=input('Un autre calcul (O/N)? ','s');
>> 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
0 commentaires:
Enregistrer un commentaire