Institut Supérieur des Etudes Technologiques Atelier : Mathématiques Appliquées
de Mahdia Classes : TI2
Département Technologies de l’Informatique A.U: 2020-2021
Travaux Pratiques n°3
Programmation sous MATLAB
Objectifs
- Savoir programmer sous Matlab
- Apprendre à écrire des fonctions
- Apprendre à utiliser les boucles et les directives
I. Les fonctions
Un programme peut être constitué d'un simple script MATLAB, mais pour résoudre des
problèmes complexes, ou nécessitant beaucoup de traitements, il est très souvent utile, voire
nécessaire, de structurer le programme en :
• un script principal, qui joue le rôle de point d'entrée du programme ;
• un ensemble de fonctions, qui sont appelées soit par le script principal, soit par les
fonctions elles-mêmes.
Les fonctions sont des scripts MATLAB particuliers.
La structure d'une fonction comporte nécessairement :
• le mot réservé function ;
• le nom de la fonction, par exemple mafonction ;
• un ensemble de paramètres d'entrée e1, e2, ..., en ;
• un ensemble de paramètres de sortie s1, s2, ..., sn ;
• le mot réservé end.
function [s1, s2, ..., sn ] = mafonction ( e1, e2, ..., en )
Page 1 sur 12
Remarques :
- Il peut y avoir plusieurs fonctions dans un fichier M-file, toutefois seule la première
fonction est accessible depuis la fenêtre de commande. Les autres fonctions du fichier M-
File ne sont accessibles qu'aux autres fonctions du fichier.
- La présence des ";" dans l'écriture de la fonction comme est dans l'écriture des scripts. Ces
";" servent à éviter que des résultats partiels de calcul ne s'affichent pas à l'écran.
Exemple 1 :
- Créer un fichier M-File et écrire une fonction qui calcule le cube d'un nombre.
function z = cube(x)
z=x*x*x;
- Sauvegarder-la sous le nom "cube.m".
Attention
➡ Le nom du fichier doit être le même que celui de la fonction.
➡ L'extension du fichier doit obligatoirement être “.m”
- A l'aide de la fonction cube, calculer le cube de 3.
Calcul du cube de 3 :
>> cube (3)
- Calculer le cube de la variable A qui prendra les valeurs : A = 3 + i ; A = [ 1 2 ; 3 4 ].
Exemple 2 :
function [a,b] = mafonction(x,y)
a = x + y;
b = x * y;
Soient les deux variables A = 5 et B = 9, calculer leur somme et leur produit par la fonction
mafonction.
Exemple 3 :
Créer une fonction permettant de trouver les racines d’un polynôme du 2nd degré. On commence
par ouvrir un fichier M-File que l’on enregistre sous solvepoly2.m. On choisit ensuite les
entrées/sorties de la fonction : en entrée, on considère les coefficients a, b et c du polynôme
P(x)=ax²+bx+c, en sortie, les racines sont enregistrées dans un tableau nommé X.
function X = solvepoly2(a,b,c)
% solvepoly2 calcule les racines d’un polynôme du 2nd degré P(x)= ax²+bx+c.
% X = solvepoly2(a,b,c), X est un tableau contenant les deux racines.
delta = b^2-4*a*c;
X(1) = (-b+sqrt(delta)) / (2*a);
X(2) = (-b-sqrt(delta)) / (2*a);
Page 2 sur 12
Supposons que l’utilisateur ne connaisse que le nom de la fonction, pour obtenir des
renseignements sur celle-ci, il doit taper :
>> help solvepoly2
calcule les racines d’un polynôme du 2nd degré P(x)= ax²+bx+c.
X = solvepoly2(a,b,c), X est un tableau contenant les deux racines.
Une fois renseigné, il peut maintenant utiliser la fonction :
>> solvepoly2(3.7,1,-1.5)
ans =
0.5158 -0.7860
II. Opérateurs relationnels et logiques
Les opérateurs relationnels et logiques sont utilisés dans les directives de contrôle notamment
dans les boucles while et dans les directives if.
1. Opérateurs relationnels
Les opérateurs relationnels permettent de réaliser des comparaisons entre des valeurs
numériques. Comme par exemple, si on veut savoir quels éléments d’une matrice sont plus grands
que ceux d’une autre matrice, on peut utiliser l’expression suivante :
La réponse nous est retournée sous forme d'une matrice. Les éléments qui valent 1 veulent dire
que la comparaison est vraie pour cet index et ils valent 0 si la comparaison est fausse.
Page 3 sur 12
La liste des opérateurs relationnels est présentée ci-dessous.
Opérateurs relationnels Fonctions
< Plus petit
> Plus grand
<= Plus petit ou égal
>= Plus grand ou égal
== Égalité (ne pas confondre avec = qui assigne)
~= Non égal
2. Opérateurs logiques
Les opérateurs logiques sont des opérateurs qui s'appliquent exclusivement sur des valeurs de type
logique. Ils permettent la combinaison de conditions logiques.
La liste des opérateurs logiques est présentée ci-dessous.
Opérateurs logiques Fonctions
& ET
| OU
~ Négation
III. Affichage des données sous MATLAB
Pour afficher la valeur d'une variable ou un message, on peut utiliser les fonctions disp et
fprintf.
Exemple 1 :
A = [15 150];
S = 'Hello World.';
disp(A)
disp(S)
Pour la fonction fprintf(), on peut combiner l’affichage des textes et des variables.
fprintf('Message + formats variables',variable1,...)
Exemple 2 :
fprintf('Vous avez perdu %9.2f $ à la bourse de New York', Per)
Page 4 sur 12
Les différents formats qui peuvent être utilisés avec fprintf() sont :
Format Description
%c Caractère
%d Nombre décimal (signé)
%e Notation exponentielle (utilisant un petit e dans 3.15e+00)
%E Notation exponentielle (utilisant un grand E dans 3.15E+00)
%f Nombre réel avec précision fixe
%g Plus compact que %f et %e, n'affiche pas les zéros non significatifs
%G Même que %g mais utilise un E majuscule
%o Notation octale
%s Chaîne de caractères
%x Notation hexadécimale (avec les lettres a-f en minuscule)
%X Notation hexadécimale (avec les lettres A-F en majuscule)
On peut utiliser certains caractères spéciaux dans un message tels que :
Caractère Description
\b Efface le dernier caractère
\f From feed
\n Nouvelle ligne
\r Retour chariot
\t Tabulation horizontale
\\ Barre oblique
\'' ou '' Apostrophe
%% Pourcentage
IV. Boucles et directives de contrôle
Maintenant qu'on vu les principaux opérateurs arithmétiques relationnels et logiques, on peut
apprendre comment fonctionnent les boucles et les directives de contrôle. On s'intéresse dans cette
section aux boucles for, while et switch ainsi que la directive if puisqu’elles sont largement
utilisées en programmation.
Page 5 sur 12
1. La boucle For
La boucle for sert à effectuer les mêmes opérations pour plusieurs itérations. On peut s'en servir
pour construire des matrices, des vecteurs, des graphiques et plusieurs autres choses. Voici la
syntaxe à utiliser lorsque on veut travailler avec une boucle for :
for index=début:incrément:fin
expressions
end
Exemple :
function x=test_for()
n=10;
for i=1:1:n
x(i)=i^2+2;
end
À chaque itération, les opérations sont effectuées jusqu’à la commande end. Rendu à ce point-là,
les opérations recommencent au début de la boucle avec une itération de plus. Ce processus
recommence jusqu’à ce que l’index (i dans l’exemple) soit rendu à sa valeur finale. Dans
l’exemple ci-dessus, la boucle for a servi à créer un vecteur x de dimension n.
2. La boucle While
La boucle while a comme objectif d’effectuer des opérations tant qu’une expression logique est
vraie. Lorsque l’expression devient fausse, la boucle se ferme. La syntaxe à utiliser est la
suivante :
while expression logique
expressions
end
Exemple :
function x=test_while()
n=0;
while n<10
x(n+1)=2^n-10;
n=n+1;
end
Page 6 sur 12
3. If – elseif – else - end
La directive de contrôle if sert à déterminer les opérations à effectuer dépendamment du résultat
d’une condition spécifiée par l’utilisateur. Voici la syntaxe à utiliser dans le cas d’une directive if :
if expression logique
expression
elseif
expressions
else
expressions
end
Exemple :
function x=test_if()
i=3.14;
if i<pi
x=sin(rand(1,10));
else
x=cos(rand(1,10));
end
L’expression logique mentionnée dans la syntaxe de la directive if est la condition qui doit être
validée pour effectuer la série d’opérations spécifiée sans quoi ce sera une autre série qui sera
effectuée.
4. La boucle Switch
La boucle switch permettent parfois de remplacer les if-elseif-else, particulièrement dans le cas de
menus.
En MATLAB, on utilise la syntaxe suivante :
switch ( expression )
case { liste de valeurs }, instructions…
case { liste de valeurs }, instructions…
otherwise, instructions…
end
Page 7 sur 12
Par exemple, si on veut faire une calculatrice simple interactive permettant de calculer, selon la
demande de l'utilisateur, l'exponentielle ou le logarithme d'un nombre entré par celui-ci.
Une manière simple de rendre le programme interactif serait d'utiliser le SCRIPT suivant :
nombre = input('Valeur : ');
operation = input('Veuillez choisir l’opération: taper 1 pour exp ou 2
pour log ');
switch (operation)
case 1, b = exp(nombre) ; disp ('exponentielle de ce nombre est égal à
'),disp(b)
case 2, b = log(nombre); disp ('le logarithme de ce nombre est égal à
'),disp(b)
otherwise, disp('mauvais choix d’opération')
end
V. Travail demandé
Exercice 1
Ecrire une fonction Max_3_nb permettant de calculer le plus grand de 3 nombres par deux
méthodes différentes.
1ère méthode : en utilisant la fonction max prédéfinie par Matlab qui permet de calculer la valeur
maximale d’un vecteur.
2ème méthode : en appliquant la méthode suivante :
début
lire les trois nombres A, B et C ;
si A est plus grand que B alors G est égal à A
sinon G est égal à B ;
si C est plus grand que G alors G est égal à C ;
écrire G
fin
Exercice 2
Ecrire une fonction Som_vect permettant de calculer la somme des éléments d’un vecteur par
deux méthodes différentes.
1ère méthode : en utilisant la fonction sum prédéfinie par Matlab qui permet de calculer la
somme des valeurs d’un vecteur.
Page 8 sur 12
2ème méthode : en appliquant la méthode suivante :
début
lire le vecteur de nombres X ;
calculer la taille du vecteur ;
initialiser la somme des nombres ;
pour i=1 à TAILLE faire
ajouter le ième nombre à SOM ;
écrire la somme ;
fin
NB : la fonction length(x) permet de calculer la longueur d’un vecteur.
Exercice 3
Ecrire une fonction Som_col qui permet de calculer la somme des éléments des colonnes d’une
matrice par deux méthodes différentes.
1ère méthode : en utilisant la fonction sum
2ème méthode : en utilisant la boucle for
3ème méthode : en utilisant la boucle while
NB : la fonction size permet de calculer le nombre de lignes et de colonnes.
Exercice 4
Écrire le programme conversion qui permet de faire les conversions d'unités suivantes :
1. Mégaoctets->octets
2. Mégaoctets->bits
3. Octets->bits
4. Mégaoctets->Kilooctets
L'utilisateur sélectionne par numéro la conversion qu'il souhaite effectuer, et donne la valeur à
convertir.
Voici deux exemples d’exécution :
>> conversion
Donner le nombre à convertir : 12
Soit le menu suivant : 1.Mégaoctets->octets 2.Mégaoctets->bits
[Link]->bits 4.Mégaoctets->Kilooctets
Donner le numéro de votre choix : 1
le résultat de conversion est
12582912
Page 9 sur 12
>> conversion
Donner le nombre à convertir : 82
Soit le menu suivant : 1.Mégaoctets->octets 2.Mégaoctets->bits
[Link]->bits 4.Mégaoctets->Kilooctets
Donner le numéro de votre choix : 0
Choix incorrect veuillez réessayer
Exercice 5
Au cours des séries éliminatoires 2009-2010, l’ex-gardien Chokri El Waer a joué 18 matchs et a
réalisé des performances extraordinaires pendant certaines parties. Les nombres d’arrêts par match
sont : 22, 22, 25, 20, 10, 37, 34, 23, 33, 23, 38, 15, 41, 53, 37, 10, 31, 45.
Écrire un programme utilisant uniquement les opérateurs logiques et relationnels pour déterminer
et afficher :
- Le nombre de matchs avec un nombre d’arrêts supérieur strictement à 25.
- Le nombre de matchs avec un nombre d’arrêts entre 30 et 40 inclusivement.
NB : Il est interdit d’utiliser les instructions if, switch, for et while.
Exercice 6
Ecrire un programme sous la forme d'un fichier script, qui double les éléments positifs qui sont
divisibles par 3 et/ou par 5, et élève au cube les éléments négatifs supérieurs à -5.
NB : Utiliser la fonction rem (x,y) permettant de renvoyer le reste de la division de x par y.
Appliquer ce programme sur le vecteur v donné par :
v = [5, 17, −3, 8, 0,−1, 12, 15, 20,−6, 6, 4,−7, 16].
Exercice 7
Ecrire un programme dans un fichier script qui détermine les racines réelles de l'équation du
second degré ax2 + bx + c = 0. Nommer ce programme quadroots.
Quand le programme s'exécute, il demande à l'utilisateur d'entrer les valeurs des constantes a, b et
c. Pour calculer les racines de l'équation, le programme calcule le discriminant D donné
par : D = b2 − 4ac
• Si D > 0, le programme affiche un message : « L'équation a deux racines », et les deux
racines sont affichées sur la ligne suivante.
• Si D = 0, le programme affiche un message : « L'équation possède une racine double », et
la racine est affichée sur la ligne suivante.
• Si D < 0, le programme affiche un message : L'équation n'a pas de racines réelles.
Page 10 sur 12
Exécuter ce programme dans la fenêtre de commande, pour obtenir la solution des trois équations
suivantes :
2x2 + 4x = 0
15x2 + 10x + 5 = 0
x2 + 2x + 1 = 0
Exercice 8
1. Utiliser des boucles pour créer une matrice 4×7 dans laquelle la valeur de chaque élément
est la somme de ses indices (Le numéro de ligne et le numéro de colonne de chaque
élément). Par exemple la valeur de l'élément A (2, 5) est 7.
2. Écrivez un script qui lit au clavier un nombre entier n et fournit une matrice n x n dont les
éléments sont donnés par: A(i,j) = i + j. On utilisera au plus une boucle.
Exercice 9
Ecrire un programme permettant de vérifier si une matrice est magique.
Une matrice est dite magique si la somme de chaque ligne, de chaque colonne, ainsi que la
diagonale donnent toutes la même valeur.
Tester ce programme sur la matrice A définie comme suit :
16 3 2 13
5 10 11 8
=
9 6 7 12
4 15 14 1
Exercice 10
Soit s = 1.2. Partir de x = 100 et remplacer x par sa racine carrée jusqu’à obtenir un nombre
strictement plus petit que s.
Calculer le nombre d’itérations pour atteindre le résultat. Le script ne devra afficher que les
différentes valeurs prises par x ainsi que le nombre final d’itérations.
Exercice 11
Écrire un programme qui demande à l’utilisateur d’entrer une fréquence et qui affiche le domaine
correspondant. Le tableau ci-dessous montre les intervalles de fréquence des ondes radio et les
domaines correspondants. Si la fréquence n’est pas incluse dans le tableau, le programme affiche
un message avertissant que la fréquence ne correspond pas au spectre radiofréquence.
Page 11 sur 12
Exemple d’exécution 1:
Entrez une fréquence en Hz: 3.5*10^9
Le domaine correspondant à la fréquence 3.50e+009 est: SHF
Exemple d’exécution 2:
Entrez une fréquence en Hz: 0.2
La fréquence que vous avez entrée ne correspond pas au spectre RF
Page 12 sur 12