Support Initiation À La Programmation MATLAB Partie 01-P

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 18

‫وزارة التــعـليــم العــــالــي والبــــحث الـعلمــــي‬

Ministère de l’enseignement supérieur et la recherche


scientifique
École Supérieure de ‫المدرسة العليا‬
Technologies ‫للتكنولوجيات‬
Industrielles d'Annaba ‫الصناعية عنابة‬

Polycopie du Cours

Enseigné et rédigé par


BOUZITOUNA Abdallah
RESUME
Ce document est un guide simplifié contenant les
outils essentiels pour manipuler le logiciel MATLAB
pour permettre aux lecteurs de démarrer
rapidement avec la programmation des algorithmes
et la résolution des problèmes concrets. Les
exemples de TPs entamés seront illustrés utilisant la
version MATLAB R2011a (V:7.12.0). L'objectif de ce
cours est essentiellement l’apprentissage de ce
logiciel parce qu'il est de plus en plus utilisé dans la
recherche scientifique, la simulation des

SUPPORT DE TP expérimentations des réseaux, en électronique,


mécanique, énergétique, et autres. D’autre part, la

MATLAB majorité des étudiants de fin de cycle utilisent


Matlab dans le cadre de leur projet de fin d’études.

Commandes, Algorithmes et TPs résolus

Ecole Supérieure des Technologies Industrielles


(ESTI) – Annaba

Abdallah BOUZITOUNA

P a g e 1 | 57
Partie 01
Introduction
Le logiciel commercial MATLAB développé par la société « MathWorks »,
MathWorks est un éditeur de logiciels américain, spécialisé dans les logiciels de calcul
mathématiques en particulier, scientifique et technique en général pour les ingénieurs et les
scientifiques.
Matlab représente un langage de programmation de quatrième génération et un
environnement de développement.
La nomination MAT-LAB (Matrix Laboratory : Laboratoire des Matrices), est dûe au
fait que ce logiciel permet de manipuler des matrices, d'afficher des courbes et des données,
de mettre en œuvre des algorithmes, de créer des interfaces utilisateurs, et peut s’interfacer
avec d’autres langages tel que le C, C++, Java, et Fortran.

Variable Vecteur Matrice Image

Matlab permet de réaliser des simulations numériques basées sur des algorithmes
d'analyse numérique, et donc la résolution approchée d’équations différentielles, des
équations aux dérivées partielles ou de systèmes linéaires, et autres.
Ce langage n'inclut pas seulement des fonctions prédéfinies pour le calcul matriciel. Les
domaines d'application sont extrêmement variés, et on peut citer par exemple : le calcul
numérique dans le corps des réels et des complexes, le calcul de probabilités et des
statistiques, le calcul intégral et la dérivation, le traitement du signal, l'optimisation, le
traitement d'images, l'automatisme, …
Ce support de TPs rassemble les outils importants de MATLAB. Il couvre un champ
défini de fonctionnalités estimées utiles à la mise-en-œuvre pour résoudre certains
problèmes scientifiques : théoriques ou numériques (Mathématiques, Electronique,
Mécanique…) ou pratiques en temps réel dans les domaines : industriels, Médicaux,
Aéronautique et autres.
En utilisant MATLAB on peut résoudre ces problèmes en appliquant des méthodes
numériques qui sont performantes (convergence) et rapides (temps de calcul) et précisent.
Par ce document, nous souhaitons faciliter la prise en main de MATLAB, et présenter
les outils essentiels pour résoudre des problèmes numériques qu'un technicien, un ingénieur
ou un scientifique, peut rencontrer dans le cadre de son activité professionnelle.
Nous présenterons aussi les facilités qu'offre ce type d'outils pour le traitement,
l'exploitation et la présentation de données numériques, issues de calculs ou de mesures
expérimentales. Dans ce contexte, les courbes 2D ou 3D seront abordées, mais aussi tous les
problèmes liés à l'écriture et à la lecture des fichiers de données.

P a g e 3 | 57
Interface MATLAB
Le visuel de MATLAB est passé par plusieurs étapes de développement. On cite les deux
plus importantes :

Workspace

Current Folder Command Window

Command
History

Interface classique (MATLAB 2011)

Nouvelle interface (2013 →)


L’interface graphique, IDE (Integrated Development Environment , littéralement :
environnement de développement intégré), contient par défaut:
o Command Window : Fenêtre de commandes, utilisée pour formuler et exécuter nos
expressions et interagir avec MATLAB.
o Workspace : Espace de travail, qui affiche les variables utilisées ou enregistrées.
o Command History : Historique des commandes, qui garde la trace de toutes les
commandes entrées par l’utilisateur.
o Current Folder : répertoire de travail.
o Editor : éditeur spécifique pour rédiger des scripts et des fonctions (programme
MATLAB).

P a g e 4 | 57
GUI : Graphical user interface
(interface d’utilisation graphique)

Simulink

P a g e 5 | 57
Mode de fonctionnement
1. Mode interactif : Matlab exécute les instructions au fur et à mesure qu'elles sont
données par l’utilisateur ; on peut le considérer comme un mode calculette.
2. Mode exécutif : Matlab exécute ligne par ligne un programme Matlab «M-file» qui est
une suite d'instructions Matlab écrites dans un éditeur de texte et sauvegardées dans un
fichier avec une extension « .m »

Qu’est-ce que MATLAB ?


Si on dit Logiciel MATLAB : on fait référence à l'outil que l'on utilise, i.e. l'interface
utilisateur ;
Et si on dit Langage MATLAB : on désigne la syntaxe spécifique que l'on met en œuvre
dans cet outil.
En effet, Matlab est les deux à la fois, et est aussi un langage interprété :
✓ pas de chaînes de production : édition - définition des liens de bibliothèques -
compilation – exécution, donc pas d’attente pour compiler : on a la possibilité
d’exécuter le code en dehors du programme
✓ pas de nécessité de déclarer et typer les fonctions ; avec une codification facile à
comprendre et très lisible.

Remarque : MATLAB, comme tout langage interprété, offre des performances


globalement inférieures à d'autres langages compilés.

Si les fonctions standard proposées en MATLAB ne suffisent pas dans nos


développements et nécessitent de mettre en œuvre des programmes très poussés, il existe
des fonctions plus spécifiques regroupées dans des boîtes à outils qu’on appel : TOOLBOX.
Ces Toolbox sont des extensions utiles, comportant des fonctions dédiées à ces domaines,
pour des développements de niveau professionnel :
• OPTIMIZATION : pour l'optimisation ;
• IMAGE PROCESSING : pour le traitement d'image.
• PDETool : pour les équations aux dérivées partielles ….

P a g e 6 | 57
Prise en main
La fenêtre principale de l’IDE « Command Window » permet d’exécuter les
commandes et les instructions MATLAB

» {Commande entrée par l'utilisateur}

Résultat produit par MATLAB


» pi
3.1416

» {Commande entrée par l'utilisateur sans afficher le résultat} ;

» pi ;

Aide – Help :
MATLAB dispose d'une aide fonctionnelle fournie par l’éditeur et fonctionnelle. Elle
est accessible de différentes manières :

» help {nom de la commande}


Affiche la description de la commande dans la fenêtre Command Windows
» doc {nom de la commande}
Ouvre la fenêtre « help » avec une description détaillée : syntaxe, paramètres et
exemples illustratifs
» helpwin {nom de la commande}
Ouvre une fenêtre contenant la liste des commandes Matlab ainsi que leurs
documentations.

» lookfor {mot-clé}
Affiche tous les résultats possibles pour le mot clé désiré.
D’autre part la société MathWorks donne une documentation en ligne sur le site :
https://fr.mathworks.com/help/, avec les dernières mises à jour et possibilités permettait
l’exécution en ligne : https://fr.mathworks.com/products/matlab/live-editor.html#

P a g e 7 | 57
Type de données
Les variables sous MATLAB ne nécessite pas une déclaration de type ou de
dimension, car chaque variable prend le type et la taille de son contenu.
Lorsque Matlab rencontre un nouveau nom de variable, il crée la variable
correspondante et y associe l'espace de stockage approprié dans le « workspace », et si la
variable existe déjà, Matlab change son contenu, et lui alloue un nouvel espace de stockage
en cas de redimensionnement (le cas du tableau).

» X=7/2 Valeur numérique


X=
3.5000
» X = '2018' Chaîne de caractère
X=
2018
» X=X+1
X= Code ASCII de chaque lettre + 1
51 49 50 57
» Y= 'MATLAB'
Y=
MATLAB
Erreur d’utilisation de l’opération (+)
» X+Y
??? Error using ==> plus
» X = ‘TP’ Concaténation des chaînes
» [X,' ',Y] Résultat enregistré dans la variable « ans »
ans =
TP MATLAB

Les types de variables connus en Matlab :


• Numérique (Double)
• Nombre complexe (Double complex)
• Chaîne de caractère (Char)
• Booléen ou logique (Logical)
• Type fonction (handle)

P a g e 8 | 57
Workspace
Recommandations :
• Le nom de variable peut contenir des chiffres, des lettres en minuscule ou en
majuscule, sans accent.
• Il doit commencer par une lettre.
• Il ne peut pas contenir de caractères spéciaux (espace ou ponctuation).
Pour une bonne pratique, choisir des noms "parlants", ni trop longs, ni trop courts ; Pour cela
la commande :

» namelengthmax
affiche la taille maximale du nom de variable
Remarque : une lettre majuscule est différente de la même lettre minuscule, donc il se peut
que deux variables prennent le même caractère minuscule/majuscule.
Le nom de toutes les constantes et fonctions prédéfinies en Matlab est en minuscules.

Nom d’identification

Zone
mémoire
Valeur Manipulations

Déclarer de variable Type de donnée

P a g e 9 | 57
Pour connaître le type, la taille ou le contenu d’une variable s’il est numérique, logique ou
de type caractère on utilise les commandes suivantes :

» whos
Affiche les variables avec leurs tailles, le nombre de bytes et leurs types de données.

» who
N’affiche que les noms des variables.

» clear
Nettoyer le workspace et efface toutes les variables.

» clear mat*
Détruit toutes les variables dont le nom commence par « mat ».

» isnumeric nom_var
Renvois un résultat booléen : 1 = vrai et 0 = faux, si la variable est de type
numérique ou non (de même : ischar : pour les caractères, islogical : pour le type
booléen).

» class nom_var
En quelle classe la variable évolue :
logical : booléen, double : numérique, char : caractères…

» size ( nom_var )
Renvois la taille d’une variable avec le nombre de lignes et de colonnes (à chaque
variable est réservé un espace sous forme d’un tableau).

On peut afficher le nombre de lignes (ou de colonnes) avec la même


commande respectivement :

» size ( nom_var , 1 )
» size ( nom_var , 2 )

Manipulation des variables

▪ Type Cell :

On peut créer des tableaux de chaînes de caractères où chaque cellule peut avoir une taille
spécifique. Ce n’est pas le cas avec la déclaration reconnue par d’autres langages :

» Module = ['Analyse' , 'Informatique' , 'Physique' , 'Chimie']


Module =
AnalyseInformatiquePhysiqueChimie
une concaténation simple

» Module = ['Analyse' ; 'Informatique' ; 'Physique' ; 'Chimie']


CAT arguments dimensions are not consistent.
la déclaration d’un tableau vertical des chaînes de caractères n’est pas prise en charge !!

P a g e 10 | 57
Pour cela on propose la déclaration suivante :
» Module = { 'Analyse' , 'Informatique' , 'Physique' , 'Chimie' }
Module =
'Analyse' 'Informatique' 'Physique' 'Chimie'
» Module = { 'Analyse' ; 'Informatique' ; 'Physique' ; 'Chimie' }
Module =
'Analyse'
'Informatique'
'Physique'
'Chimie'
Qui nous donne
» Module (3) 'Physique' Type caractère
» Module {3} Physique Type cellule
En utilisant les parenthèses ( ) on récupère la cellule alors que les accolades { } récupère la
valeur contenue dans la cellule.

Pas seulement les chaînes de caractères, mais aussi des tableaux avec des contenus
différents ; Un tableau de type cellules (cell array) permet de stocker différents types de
variables dans une seule.

» T {1,1} = 10 ; Numérique
» T {2,1} = rand (2,3) ; Matrice de 2 lignes et 3 colonnes
» T {1,2} = 'MATLAB' ; Chaîne de caractères
» T {2,2} = { 'Début' ; 'Fin' } ; Deux cellules de type caractère
» T
T= T : tableau de 4 cellules (2x2)
[ 10] 'MATLAB'
[ 2x3 double ] { 2x1 cell }
Dans certains cas quand on travaille avec des tableaux de types cellules, il pourrait être utile
d’appliquer des opérations ou des fonctions sur chaque cellule. Pour faire cela, on cite la
fonction cellfun dans laquelle il suffit d’utiliser le handle de la fonction (le nom en général),
le résultat est aussi sous forme de tableau de cellules.
» Noms = { 'Bouzitouna' , 'Dekhane' , 'Talai' } ;
» Prenoms = { 'Abdallah' , 'Azzeddine' , 'Zoubir' } ;
Par exemple on peut vérifier les noms qui commencent par ' Bo ' :
» strncmp ( Noms , 'Bo' , 2 )
ans =
1 0 0
ou concaténer les cellules une par une :
» strcat ( Noms , { ' ' } , Prenoms )
ans =
'Bouzitouna Abdallah' 'Dekhane Azzeddine' 'Talai Zoubir'
P a g e 11 | 57
Un autre exemple avec une cellule C définie par :
» C{1,1} = [1 2; 4 5];
» C{1,2} = 'Matlab';
» C{2,1} = pi;
» C{2,2} = 2 + 4i;
on applique quelques fonctions simples :
» D=cellfun('isreal',C) » len=cellfun('length',C)
D= 1 1 len = 2 6
1 0 1 1
» isdbl=cellfun('isclass',C,'double')
isdbl = 1 0
1 1

▪ Type Structure :
Il existe un autre type qui ressemble au type Cellule c’est les types Structures, qui sont
des types de données complexes, reconnues sous le nom (Enregistrement) dans d’autres
langages.

» Module.nom = 'Analyse' ;
» Module.coefficient = 4 ;
» Module.note = 14
Module =
nom : 'Analyse'
coefficient : 4
note : 14
Une structure est un tableau multidimensionnel dont l'accès aux éléments s'effectue par
l'utilisation des noms des champs de la structure. Sa nature convient parfaitement aux
données référencées (base de données, carnet d'adresses…, Tables).
Comme les tableaux de type cellules, les structures peuvent contenir tous les types de
variables (matrice, chaîne de caractère, tableau de cellules, structures ...).

Avec le code précédent on a créé une structure « Module » dont les trois champs sont
«nom», « coefficient » et « note ».

Une structure est un type de variable multidimensionnelle, à partir de laquelle on peut


créer un tableau de type structure qui contient plusieurs modules :

» Module(1,1).nom = 'Analyse' ;
» Module(1,1).coefficient = 4 ;
» Module(1,1).note = 14 ;
» Module(2,1).nom = 'Physique';
» Module(2,1).coefficient = 5;
» Module(2,1).note = 11;
P a g e 12 | 57
» Module(3,1).nom = 'Chimie';
» Module(3,1).coefficient = 4;
» Module(3,1).note = 13;
» Module(4,1).nom = 'Informatique';
» Module(4,1).coefficient = 3;
» Module(4,1).note = 17;
» Module(5,1).nom = 'Français';
» Module(5,1).coefficient = 2;
» Module(5,1).note = 16;
Module =
5x1 struct array with fields:
nom
coefficient
note
coefficient
Avec le code précédent on a créé un tableau de structures Module de dimension 5×1.
Utilisant l'initialisation d'une structure à l'aide de la fonction « struct » on peut directement
obtenir le même résultat :
» Module = struct ('nom' , {'Analyse' ; 'Physique' ; 'Chimie' ; 'Informatique' ; 'Français' } , ...
'coefficient' , { 4 ; 5 ; 4 ; 3 ; 2 } , ...
'note' , { 14 ; 11 ; 13 ; 17 ; 16 } )
Module =
5x1 struct array with fields:
nom
coefficient
note

Remarque : ces explications représentent un extrait jugées utile. Le lecteur peut


consulter une documentation plus détaillée concernant les déclarations, la
manipulation et l’utilité de ces types [ https://fr.mathworks.com/help/index.html].

« Chaque type de variables avec ses caractéristiques, est un outil, que l’utilisateur
exploite pour structurer et enrichir la résolution de ses problèmes via MATLAB. »

P a g e 13 | 57
Opérations Numérique et Logiques
On peut considérer MATLAB comme super calculatrice scientifique. Pour cela on peut
effectuer des :
o Opérations numériques : + , − , ∗ , / et ^ pour la puissance.
» 2+4*1.6-3/0.7+2^3
ans =
12.1143
Tenant compte des priorités de la puissance, la multiplication et la division, l’addition et la
soustraction.
o Opérations relationnelles et logiques :

< , <= > , >= ==, ~ = & | ~


Inférieure Supérieure Égale , Le Et logique Le Ou logique Négation
(…ou égale) (…ou égale) Différent (and) (or) (not)

Exemple
Indexation logique : soient X et L deux vecteurs tel que :
X : un vecteur quelconque
L : le vecteur logique de même taille que X
X(L) : les éléments de X où la condition L est vraie

» X = [1 5 3 9 4 7];
» L = X<=5
L=
1 1 1 0 1 0
» X(L)
ans =
1 5 3 4
Remarque : Si un calcul effectué n’est pas sauvegardé dans une variable, le résultat sera
automatiquement enregistré dans la variable par défaut ans (answer) et elle peut être utilisée
dans un autre calcul.

Le résultat calculé est affiché par défaut avec 5 chiffres significatifs, qui ne signifie pas
qu’on a une faible précision. La précision utilisée par MATLAB pour manipuler des
nombres réels est bien plus importante (nous le verrons sur des exemples pratiques). Si on
veut afficher les nombres avec plus de précision, on utilise la commande format long.
L'affichage par défaut est le format court : format short.

P a g e 14 | 57
Comme exemple, on calcule la variable 𝐗 = 𝟐/𝟕 et on affiche sa valeur dans chaque cas :

» format short 0.2857 5 chiffres


» format long 0.285714285714286 16 chiffres
» format shorte 2.8571e-001 5 chiffres – 10n
» format longe 2.857142857142857e-001 16 chiffres – 10n

Remarque : Ces commandes ont un effet sur l'affichage des résultats, et non pas sur la
précision des résultats, qui reste toujours la même.

Variables et Fonctions prédéfinies


Dans la pratique, MATLAB nous fournit des variables et des fonctions utiles qui nous
facilitent quelques taches et minimise la déclaration des variables et l’introduction de
plusieurs fonctions. On cite quelques variables usuelles et des fonctions fondamentales :

o Variables prédéfinies :
On peut citer quelques variables qu’on utilise souvent dans la pratique
ans La réponse la plus récente
pi Le nombre  3.141592653589793
i et j Les nombres complexes 𝑖 2 = 𝑗 2 = −1
Inf L’infini  1/0
NaN Not-a-Number Les formes
indéterminées : 0 / 0 …
realmax Le plus grand (petit) réel positif 1.797693134862316e+308
realmin 2.225073858507201e-308
eps L’epsilon machine ou la 2.220446049250313e-016
précision en virgule flottante

Remarque : Les noms des constantes ne sont pas réservés, c'est-à-dire qu'il est possible de
définir des variables de même nom. Dans ce cas, l'identificateur fera référence à la variable
définie par l'utilisateur et non plus à la constante MATLAB. On fera attention par exemple :

» pi = 0 ; cos(pi)
1
Pour que l'identificateur fasse à nouveau référence à la constante MATLAB, il suffit de
supprimer la variable de même nom sauvegardé en mémoire par la commande clear.
» clear pi
» cos(pi)
-1

P a g e 15 | 57
o Fonctions prédéfinies :
▪ Fonctions trigonométriques et leurs inverses :

sin Sinus sin(pi) = 1.2246e-16 (≈ 0)


cos Cosinus cos(pi) = -1
tan Tangente tan(pi) = -1.2246e-16 (≈ 0)
𝜋
asin Arc sinus asin(0.5) = 0.5236 ( )
6
𝜋
acos Arc cosinus acos(sqrt(2)/2) = 0.7854 ( )
4
atan Arc tangente atan(1) = 0.7854
Remarque : l’argument pour les fonctions trigonométriques est considéré comme valeur en
radian. À titre d’exemple :

» Sin(pi) = 1.2246e-16 (≈ 0) » Sin(3.14) = 0.0016

▪ Fonctions hyperboliques et leurs inverses :


sinh 𝑒 𝑥 − 𝑒 −𝑥
Sinus hyperbolique 𝑠ℎ(𝑥) =
2
cosh 𝑒 + 𝑒 −𝑥
𝑥
Cosinus hyperbolique 𝑐ℎ(𝑥) =
2
tanh 𝑠ℎ(𝑥)
Tangente hyperbolique 𝑡ℎ(𝑥) =
𝑐ℎ(𝑥)
asinh Argument sinus hyperbolique 𝐴𝑟𝑔𝑠ℎ(𝑥) = 𝑙𝑛 (𝑥 + √𝑥 2 + 1)
acosh Argument cosinus hyperbolique 𝐴𝑟𝑔𝑐ℎ(𝑥) = 𝑙𝑛 (𝑥 + √𝑥 2 − 1)
atanh Argument tangente 1 1+𝑥
𝐴𝑟𝑔𝑡ℎ(𝑥) = 𝑙𝑛 ( )
hyperbolique 2 1−𝑥

▪ Fonctions arithmétiques (sur l’ensemble des réels) :


sqrt La Racine carrée sqrt(4)=2
log, log10 Logarithmes à base "e" et "10" log(exp(1))=1
exp L’Exponentielles log10(exp(1))*log(10)=1
sign Le Signe : 1 pour positif et -1 pour négatif sign(-2)= -1
abs La Valeur absolue abs(-3)=3
round Arrondit un nombre réel en entier round(2.4)=2
(suivant les règles d’arrondie) round(2.6)=3
floor Arrondie vers le moins floor(2.9)=2
ceil Arrondie vers le plus ceil(2.1)=3
fix la partie entière fix(2.9)=2

P a g e 16 | 57
▪ Opérations sur les nombres complexes :
conj Le conjugué d’un complexe conj( 1 + i ) = 1 - i
abs Le module abs( 1 + i ) = √2
𝜋
angle L’angle associé au complexe sym(angle(1+i)) =
4
real La partie réel real(2+i) = 2
imag La partie imaginaire imag(2+i) = 1
▪ Opérations sur les nombres entiers :
gcd(var1,var2): Le plus grand diviseur commun gcd(2019,1440) = 3
des entiers var1 et var2
lcm(var1,var2) Le plus petit multiple commun lcm(2019,1440) = 969120
des entiers var1 et var2
factorial (var) Le Factoriel d’un entier factorial(3) = 6
On peut calculer le factoriel d’un nombre entier autrement :

» prod(1 : 3) Avec une fonction récurrente


(à voir par la suite)
» fn=n*factN(n-1)

P a g e 17 | 57

Vous aimerez peut-être aussi