Blogger templates

Matlab

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 :
  • 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 :
>> 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
>> 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)]);
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 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é".

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

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

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

0 commentaires:

Enregistrer un commentaire