0% ont trouvé ce document utile (0 vote)
63 vues12 pages

Introduction à Matlab pour étudiants

Transféré par

douaarezagui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
63 vues12 pages

Introduction à Matlab pour étudiants

Transféré par

douaarezagui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Outils de programmation

Introduction à Matlab
2ème année licence maths

Ce support de cours est une introduction à M ATLAB, un logiciel de calcul scientique. Il a pour
objectif de préparer l'étudiant aux travaux pratiques d'Analyse Numérique dans lesquels cet outil est
intensivement utilisé pour la mise en application et la simulation des principes théoriques présentés en
cours. Ce cours contient aussi des exercices d'application (identiés par le symbole .).

1 Présentation de Matlab
Matlab (matrix laboratory ) est un logiciel de calcul numérique développé par la société MathWorks
depuis 1984 et spécialisé dans le calcul matriciel. De nombreuses bibliothèques (toolboxes ) complètent le
noyau de base. Les domaines d'applications sont nombreux : mathématiques appliquées, statistiques,
analyse numérique, automatique, traitement du signal et des images, etc. Il existe également des
logiciels libres qui sont des clones de MATLAB, comme SCILAB et OCTAVE.
Matlab est un interpréteur, c'est-à-dire qu'il exécute les instructions directement, sans les compiler
en langage machine (comme c'est le cas pour le C). Les instructions sont écrites dans la fenêtre de
commande (command window ) ou regroupées dans un chier (qui portera l'extension .m, par exem-
ple : monprogramme.m, et qu'on exécute en tapant simplement :monprogramme dans la fenêtre de
commande).
L'interface de Matlab est composée de plusieurs parties (que l'on peut acher ou non à l'aide du menu
Desktop ) :
• la fenêtre de commande (command window ) où l'on tape les instructions ;
• le répertoire courant (current folder ) qui ache le contenu du dossier courant ;
• l'espace de travail (workspace ) qui contient la liste des variables existantes ;

• l'éditeur (editor ) qui permet de créer des scripts ou des fonctions Matlab.

Matlab contient également une interface graphique puissante, ainsi qu'une grande variété d'algorithmes
scientiques.
Matlab possède une aide très complète. Pour obtenir des détails sur les instructions et les fonctions,
tapez :help nom_de_la_fonction pour une aide rapide ou :doc nom_de_la_fonction pour avoir une
aide détaillée. Pour chercher une fonction particulière, utilisez la commande :lookfor. La commande
:demo donne accès à un grand nombre de démonstrations du logiciel.
Note
Avant de commencer le TP, créez un répertoire de travail (sur le disque dur ou une clé USB) dans
lequel vous stockerez vos chiers.

2 Variables et matrices
Avec Matlab, une variable est créée dès qu'elle est utilisée : il n'est donc pas nécessaire de la déclarer
comme c'est le cas dans d'autres langages de programmation. Si une variable du même nom existe
déjà, son contenu est remplacé par la nouvelle valeur, c'est pourquoi il convient de ne pas créer une
variable qui porte le même nom qu'une fonction !

1
Le nom d'une variable est limité à 63 caractères, ceux-ci étant des lettres, chires ou tirets bas, mais
le premier caractère doit toujours être une lettre. De plus, Matlab est sensible à la casse, c'est-à-dire
qu'il diérencie les majuscules et minuscules (:A et :a ne sont pas la même variable).
Sachez également que l'exécution d'un calcul peut être arrêtée à tout moment avec la combinaison de
touche Ctrl+C.

2.1 Calculs sans variable

Matlab, à l'instar de n'importe quelle calculatrice, peut eectuer une opération en la tapant directement
dans la fenêtre de commande. Le signe :>> indique que Matlab est prêt à recevoir une instruction, qui
sera exécutée en tapant sur Entrée. Par exemple :

>> 1+1

renvoie 2. Dans la suite de ce document, le signe :>> ne sera plus indiqué.

2.1.1 Nombres en Matlab

• MATLAB utilise une notation décimale conventionnelle, avec un point décimal facultatif `.' et
le signe `+' ou `` pour les nombres signés.

• La notation scientique utilise la lettre `e' pour spécier le facteur d'échelle en puissance de 10.

• Les nombres complexes utilise les caractères `i' et `j' (indiéremment) pour designer la partie
imaginaire.

Il existe cinq grands types de variables sous Matlab : les entiers, les réels, les complexes, les chaînes
de caractères et le type logique.

a = 1.3 ;
b = 3+i ;
c = 'bonjour' ;
d= logical(1) ;
e = int8(2) ;

- a représente un réel,
- b un complexe,
- c une chaine de caractères,
- d est une variable logique (1=VRAI)
- e est un entier codé sur 8 bits.
MATLAB utilise toujours les nombres réels (double précision) pour faire les calculs, ce qui permet
d'obtenir une précision de calcule allant jusqu'aux 16 chires signicatifs.
Mais il faut noter les points suivants :

• Le résultat d'une opération de calcule est par défaut achée avec quatre chires après la virgule.

• Pour acher davantage de chires utiliser la commande format long (14 chires après la virgule).

• Pour retourner à l'achage par défaut, utiliser la commande format short.

• Pour acher uniquement 02 chires après la virgule, utiliser la commande format bank.

• Pour acher les nombres sous forme d'une ration, utiliser la commande format rat.

2
2.2 Créer des vecteurs et des matrices

Les vecteurs et matrice suivants


 
10  
 20 1 2 3
b= 1 2 3 4 , 30 ,
c=  D=
4 5 6
40
sont rentrés ainsi :
b = [1 2 3 4];
c = [10 ; 20 ; 30 ; 40];
D = [1 2 3 ; 4 5 6];
L'espace et le point-virgule entre les crochets sont des séparateurs qui font respectivement passer à la
colonne ou à la ligne suivante.

.1 Créez la matrice  
12 56 32
A=
45 65 78

Pour éviter l'achage de résultats lors de l'exécution d'instructions, il sut de terminer celles-ci par
un point-virgule.

2.3 Accéder aux éléments d'une matrice ou d'un vecteur

Pour récupérer ou aecter un élément d'une matrice, il sut d'écrire la variable suivie des coordonnées
de l'élément entre parenthèses. Ainsi, :D(1,3) vaut 3. Attention : il est important de noter que
les éléments sont indexés à partir de 1, ce qui nécessitera quelques précautions, notamment lors du
développement de programmes faisant intervenir le temps (qui, très souvent, commence à 0).
Pour accéder à une colonne ou une ligne d'une matrice, il sut d'utiliser l'opérateur ::. Par exemple,
:D(:,3) permet d'avoir tous les éléments de la troisième colonne.
.2 Achez le 2e élément de la diagonale de la matrice D précédente, puis la 1re ligne de D.
D(2,2)
D(1,:)
Il existe deux autres manières d'accéder à plusieurs éléments d'un vecteur ou d'une matrice :
• la première possibilité est d'utiliser un vecteur contenant les indices des éléments souhaités. Ainsi,
:c([2 4]) renvoie :[20 40] ;
• la seconde possibilité est d'utiliser un vecteur (ou une matrice) booléen ; on rappelle qu'une
variable booléenne prend seulement deux valeurs : vrai (:true en Matlab) ou faux (:false). Dès
lors, :true permet de sélectionner l'élément correspondant. Le vecteur booléen doit donc être de
même taille que la variable considérée. Ainsi, :c([false true false true]) renvoie :[20 40] ;

.3 Créez le vecteur 
e = 11 22 33 44 55 66 77 88 99 .
En utilisant les deux manières précédentes, créez un vecteur contenant les éléments 1, 3, 4, 5 et 8 de e.
e = [ 11 22 33 44 55 66 77 88 99 ];
e(1 3 4 5 8)
e([1 0 1 1 1 0 0 1 0])

.4 Remplacer le cinquième élément du vecteur e par 101.

3
2.4 Opérateur d'énumération

Pour créer un vecteur dont les éléments constituent une suite arithmétique (suite de nombres de a à b
par pas de p), on peut utiliser l'opérateur d'énumération :
valeur initiale :pas :valeur finale
le pas étant positif ou négatif. Ainsi, :f = 2:0.5:4 correspond au vecteur f = 2 2, 5 3 3, 5 4 .


.5 Créez les vecteurs suivants :


1. de −10 à 10 :
2. de 10 à 0 :
3. de 0 à 100 par pas de 5 :
4. de 5 à 1 par pas de −0, 1 :

.6
• Créez un vecteur v1 contenant 20 valeurs équidistantes entre 0 et 2π
• Créez un vecteur v2 contenant 15 valeurs équidistantes entre π/12 et 3π/2
• Fusionner ces deux vecteurs en un vecteur v3 trié
• Calculer la norme de v3

2.5 Opérations

Les opérations classiques résumées ci-dessous peuvent être appliquées sur les variables scalaires, vec-
torielles ou matricielles.
Opérations matricielles Opérations élément par élément

:+ addition :.* multiplication élément par élément


:- soustraction :./ division élément par élément
:* multiplication :.^ puissance élément par élément
:/ division
:^ puissance

.7 On considère les variables suivantes :


     
2 1 2 5 6
x = 5, y = , A= , B= .
3 3 4 7 8
Calculez 2x, A + B , Ay , A2 , 2y , ainsi que les carrés des éléments de y et de A.

.8 Testez les instructions suivantes :


[1 2 3 4]*5
[1 2 ; 3 4]^2
[1 2 ; 3 4].^2
sin(1:10)
exp(j*2*pi*(2:0.5:100))
1./[10:20]

4
2.6 Vecteurs logiques

L'une des forces de Matlab est de générer des vecteurs de booléens (ou vecteurs logiques) à partir des
opérateurs relationnels et logiques résumés ci-dessous.

Opérateurs relationnels et logiques de Matlab

:== égalité
:∼= inégalité
:< strictement plus petit que
:> strictement plus grand que
:<= plus petit ou égal
:>= plus grand ou égal
:| ou logique
:& et logique

Considérons par exemple le vecteur a = 6 7 8 9 . L'instruction :a >= 8 produira alors un vecteur




de même taille que a dont chaque élément i ∈ {1, . . . , 4} est égal à 0 (si ai < 8) ou 1 (si ai ≥ 8). Le
vecteur ainsi produit peut être enregistré dans une variable :b pour obtenir nalement l'instruction
suivante :

b = (a >= 8)

(les parenthèses sont inutiles pour Matlab mais améliorent la lisibilité).


.9 Créez un vecteur x de taille 8 contenant des entiers aléatoires entre 0 et 10 (fonction :randi)
puis achez les vecteurs logiques correspondant :

• aux éléments strictement supérieurs à 5 ; :x > 5

• aux éléments nuls ; :x == 0

• aux éléments diérents de 8 ; :x ∼= 8

• aux éléments égaux à 1 ou 7. :(x==1) | (x==7)

On peut alors accéder aux éléments vériant la condition en utilisant le résultat de la même manière
que dans la section 2.3 : l'instruction :a(a>=8) renvoie donc le vecteur 8 9 .


. 10 Reprendre l'exercice précédent et acher seulement les éléments vériant les conditions.

x( x > 5 )
x( x == 0 )
x( x ~= 8 )
x( (x==1) | (x==7) )

. 11 Générez un vecteur t allant de −10 à 10 avec un pas de 1. À l'aide de t, créez le vecteur x nul
partout sauf lorsque t est égal à 0, et égal à 1 pour t = 0.

. 12 Générez un vecteur t allant de −10 à 10 avec un pas de 1. Faites en sorte que les éléments
négatifs de t soient mis à 11.

5
3 Programmation
Comme dans tout langage de programmation, il est très important d'indenter son code ! Le programme
est ainsi plus lisible, la syntaxe est plus facile à vérier et cela oblige à bien construire le programme
en blocs (conditions, boucles, . . . ).
Par ailleurs, prenez l'habitude de commenter vos programmes (à l'aide du caractère :%) an d'expliquer
en français ce qu'il est censé faire ainsi que les diérentes étapes du code.

3.1 Script

Un script Matlab est un chier portant l'extension .m qui contient une suite d'instructions telles qu'on
aurait pu en taper dans la fenêtre de commande. Pour créer un script avec l'éditeur de Matlab, cliquez
sur le menu File, New puis Script. Pour exécuter un chier, il sut simplement de taper son nom
(sans l'extension) dans l'invite de commande ou de cliquer sur l'icône . Par conséquent, votre chier
ne doit pas avoir le même nom qu'une autre fonction (comme exp.m ou lter.m) !

3.2 Condition if
La condition :if teste une expression logique et exécute une suite d'instructions si cette expression
est vraie. Le mot-clé optionnel :else permet quant à lui d'exécuter une autre suite d'instructions si
l'expression est fausse. La syntaxe est la suivante :
if expression à tester
...suite d'instructions à exécuter si l'expression est vraie...
else
...suite d'instructions à exécuter si l'expression est fausse...
end
Les opérateurs relationnels et logiques ont été donnés section 2.6. La seule diérence concerne les
opérateurs :| et :& qui dans ce cas peuvent être remplacés par les équivalents scalaires :|| et :&&.
. 13 Dénissez deux nombres quelconques a et b. Écrivez un programme indiquant quel est le plus
grand de ces deux nombres (la fonction :disp permet d'acher un texte). Tenez compte, dans un
deuxième temps, du cas de l'égalité entre les deux nombres (utilisez :elseif).
a = 5;
b = 10;
if a == b,
disp('a et b sont égaux.');
elseif a > b,
disp('a est le plus grand.');
else
disp('b est le plus grand.');
end;

3.3 Boucle for


La boucle :for répète des instructions un nombre déterminé de fois. La syntaxe est la suivante :
for indice = valeur initiale :pas :valeur finale
...suite d'instructions...
end

. 14 Avec une boucle :for, achez les entiers de 0 à 10.


for i = 0:10,
i
end;

6
. 15 Avec une boucle :for, achez les nombres pairs de 100 à 90.

for i = 100:-2:90,
i
end;

. 16 Créez un vecteur x de taille 10 contenant des entiers aléatoires entre 0 et 10 (fonction :randi)
puis calculez la somme de ses éléments deux à deux.

. 17 En Matlab, dans la mesure du possible, n'utilisez par la boucle :for.


Il existe souvent une manière plus rapide en travaillant en vectoriel. Par exemple, pour calculer les
carrés d'un vecteur x, le programme

y = x.^2;
est bien plus rapide que le suivant :

y = zeros(length(x),1);
for i = 1:length(x)
y(i) = x(i).^2;
end;
Testez les deux programmes ci-dessus et vériez que le premier est plus rapide.
Utilisez les fonctions :tic et :toc pour mesurer le temps de calcul de chacun.
Si les temps sont trop faibles pour être mesurés, il est nécessaire d'exécuter plusieurs fois le même
programme.

3.4 Boucle while


La boucle while permet de répéter une opération tant qu'une condition n'est pas remplie. La syntaxe
est la suivante :

while expression
instructions
end

Exemple

i = 1 ; % initialisation de i
while i <= 5
w(i) = 2* i;
i = i + 1; % l'incrémentation est importante sinon la boucle est infinie
end

7
. 18

Transformez la boucle for suivante en une boucle while


for i=10:-2:1
fprintf(`i=%d',i)

3.5 Fonction

Une fonction Matlab est un script qui peut recevoir des arguments d'entrée, et peut retourner des
arguments de sortie. Pour cela, il sut d'ajouter l'instruction suivante au début du script :

function [s1 ,s2 ,...] = mafonction (e1 ,e2 ,...)


% Description de la fonction

Notez que la fonction doit avoir le même nom que le chier ! :s1, :s2, . . . sont les variables de sortie
et :e1, :e2, . . . sont les variables d'entrée ; elles peuvent être des scalaires, vecteurs, matrices, etc.

. 19 En utilisant une fonction pair, trouver les termes de la suite Un dénie par

Un
si Un pair,
(
2
Un+1 =
3 ∗ Un + 1 sinon.

La suite se termine si un terme vaut 1.

Écrivez une fonction qui calcule la norme euclidienne x21 + x22 d'un vecteur x = (x1 , x2 ).
p
. 20
Donnez une description de la fonction en commentaires (tapez :help fonction pour vérier que vous
pouvez lire votre description).

4 Graphiques
Matlab permet de représenter des données sous diverses formes, et en particulier de tracer des courbes
avec la fonction :plot.

8
4.1 Représenter une courbe

:plot(x,y) trace :y en fonction de :x. En fait, cette commande relie les points dont les abscisses sont
contenues dans le vecteur :x et les ordonnées dans le vecteur :y.
D'autres types de points, de ligne et de couleur peuvent être spéciés à l'aide d'un troisième argu-
ment : par exemple :plot(x,y,'r+:') trace une ligne pointillée (::) rouge (:r) où les données sont
représentées par une croix (:+) ; voir l'aide pour plus de détails.
. 21 Dénir les vecteurs x = 1 2 3 4 5 et y = 23 54 12 85 45 . Tracer y en fonction
 

de x puis x en fonction de y : comparez. Vous pouvez éventuellement modier les types de points et
de lignes.

. 22 Tracez la fonction f (x) = x2 sur [−10, 10] (créez avant tout le vecteur des abscisses puis le
vecteur des ordonnées).

4.2 Curseur de données

Un curseur de données (data cursor ) permet d'acher les coordonnées des points des courbes ou les
coordonnées et la couleur des pixels d'une image. Ces informations peuvent être exportées dans l'espace
de travail, sauvegardées ou imprimées en même temps que la gure, etc.
Pour utiliser le curseur de données, cliquez sur l'icône dans la barre d'outils ou sélectionnez Data
Cursor du menu Tools. Cliquez ensuite sur une courbe (ou tout autre objet graphique) pour acher
les coordonnées du point sélectionné. Vous pouvez déplacer le marqueur à l'aide des touches échées
ou de la souris.
. 23 Tester le curseur de données sur la courbe tracée précédemment.

4.3 Représenter plusieurs courbes

Pour pouvoir acher plusieurs courbes superposées (sur le même graphe), on peut utiliser la commande
:hold('on').
Pour pouvoir acher plusieurs courbes dans une même fenêtre mais sur plusieurs graphes, il faut
utiliser la commande :subplot(L,C,i) qui découpe la fenêtre en un tableau de :L lignes et :C colonnes
et sélectionne la :ie case pour acher une courbe.
Enn, l'instruction :figure permet d'ouvrir une nouvelle fenêtre graphique.

. 24 On considère les fonctions f (t) = sin(t) et g(t) = cos(t).

1. Tracez f et g sur le même graphe

x = 0:0.01:2*pi;
figure;
plot(x,sin(x),'b');
hold('on'); plot(x,cos(x),'r');
2. Tracez f et g sur deux graphes distincts d'une même fenêtre

9
figure;
subplot(2,1,1); plot(x,sin(x),'b');
subplot(2,1,2); plot(x,cos(x),'r');
3. Tracez f et g dans deux fenêtres

figure; plot(x,sin(x),'b');
figure; plot(x,cos(x),'r');

4.4 Titre et légendes des axes

Les fonctions :title, :xlabel et :ylabel permettent de donner un titre au graphique et des légendes
aux abscisses et aux ordonnées.
. 25 Testez ces fonctions sur l'un des graphes précédents.
xlabel('x'); ylabel('x^2'); title('Parabole');

4.5 Catalogue de graphiques

Un grand nombre de types de graphiques sont disponibles sous Matlab (courbes, histogrammes, camem-
berts, etc.). On peut également représenter très rapidement une variable selon l'une de ces représenta-
tions. Pour cela, cliquez sur une variable dans l'espace de travail de Matlab (Workspace ) puis choisissez
l'une des représentations disponibles dans la liste Catalog plot (onglet Plots de la barre d'outils).
. 26 Amusez-vous avec cette fonctionnalité sur un exemple.

5 Exercices complémentaires
. 27 Manipulation de vecteur

On considère le vecteur ligne x de longueur 100 dont les 10 premiers éléments sont égaux à un et les 90
suivants à zéro.
1. Créez ce vecteur.

2. Créez ensuite le vecteur y = [x x x] par concaténation.

3. Ce vecteur correspond à un signal créneau ; achez ce signal (avec l'instruction :stem).

. 28 Manipulation de matrice

On considère la matrice suivante :  


3 9 −1
A = 6 0 7  .
5 2 −5
1. Calculez, en utilisant les fonctions de Matlab, son déterminant, sa matrice inverse et sa diagonale.

2. Calculez puis acher B = AAT . Déterminez sa taille.

10
. 29 Vecteurs logiques

Créez le vecteur x déni ci-dessous où t va de −98 à 71 avec un pas de 1/3.


(
0 si ti < 0,
xi =
5 si ti ≥ 0.

. 30 Programmation

Créez la matrice carrée de taille N (à dénir) dont les termes sont dénis par Hi,j = i/j avec i, j ∈
{1, . . . , N }. Utilisez deux boucles :for imbriquées. Il est préférable d'initialiser la matrice H au début :
:H = zeros(N) car cela évite à Matlab de redimensionner la matrice pendant l'exécution du programme
et permet donc de gagner du temps.

. 31 Fonction

Écrivez une fonction Matlab qui calcule la trace d'une matrice donnée en argument (la trace est la
somme des termes diagonaux). Utilisez :size pour connaître la taille de la matrice. La fonction doit
vérier que la matrice est carrée et retourner une erreur sinon (fonction :error).
function t = trace(A)
% Calcule la trace d'une matrice carrée donnée en argument
[N,M] = size(A);
if N~=M,
error('La matrice n''est pas carrée');
end;
t = 0;
for i = 1:N,
t = t + M(i,i);
end;

. 32 Tracé d'une sinusoïde

Tracez le signal sinusoïdal x(t) de période T0 = 500 ms, d'amplitude A = 2 et de moyenne m = 0, 5


sur 2 secondes :
1
x(t) = m + A sin(2πf0 t) où f0 = .
T0
Pour ce faire, on calculera 50 points par période.
T0 = 500e-3; % période du signal
f0 = 1/T0; % fréquence du signal
A = 2; % amplitude
m = 0.5; % moyenne
d = 2; % durée d'observation
t = 0:10e-3:2; % abscisses des points (toutes les 10 ms, de 0 à 2 secondes)
x = m + A*sin(2*pi*f0*t);
plot(t,x);

11
. 33 Polynômes

On considère le polynôme p(x) = 4x2 − 3x + 5.



1. Évaluer ses valeurs (:polyval) aux points x1 = 3, 6 et x2 = 2 + 3j .

2. Évaluer ses racines (:roots).

. 34 En utilisant les commandes Matlab

1. Dénir le polynôme P (x) = −x4 + 2x2 − 1.

2. Calculer P (0), P 0 (0) et P 00 (2).

3. Dénir le vecteur V qui contient 100 valeurs comprises entre 0 et 2.

4. Evaluer le polynôme P (x) sur les points de V.

5. Soit le polynôme S(x) = x2 + 1, calculer le produit, le quotient et la somme de S et P.

6. Tracer les courbes des polynômes P et S sur le même graphe avec le titre
`Intersection de polynômes'

12

Vous aimerez peut-être aussi