Cours de Matlab Manipulation de matrices
École Centrale de Lyon Année scolaire 2008/09
Initiation MATLAB – Séance 1
–
Manipulation de matrices, structures de contrôle et affichage 2D
Guillaume Revy / Chu-Duc Nguyen
03/12/2008
1 Introduction à MATLAB
MATLAB est un système interactif pour le calcul numérique (langage de programmation, environnement de travail et de résolution de problèmes), qui propose des outils performants pour la manipulation de matrices, l’édition de graphiques, le debuggage, le profiling,
1.1 Interface graphique générale
L’interface graphique générale de MATLAB se compose de quatre blocs.
Commandline (console d’exécution) : permet à l’utilisateur d’exécuter des fonctions MATLAB, d’attribuer des valeurs à des variables, d’effectuer des opérations sur ces variables
Current directory (répertoire courant) : permet de naviguer et de visualiser le contenu du répertoire courant de l’utilisateur.
Workspace (espace de travail) : permet de visualiser, notamment, les variables, leur type et leur état
Commandhistory : historique des commandes que l’utilisateur a exécutées.
1.2 Caractéristiques de MATLAB
? MATLAB est case sensitive : différence entre les majuscules et les minuscules.
? Les variables n’ont pas à être déclarées, et la mémoire nécessaire est automatiquement allouée à la définition d’une variable.
? Par défaut, les valeurs numériques sont des flottants double précision. Elles peuvent cependant être converties en simple précision.
? En MATLAB, le symbole d’affectation est le signe =
? Si l’utilisateur n’affecte pas explicitement le résultat d’une opération (par exemple) à une variable, MATLAB l’affecte automatiquement à la variable ans.
? Le symbole ; (point virgule) en fin de ligne annule l’affichage du résultat (mais pas des messages d’erreur).
? Pour obtenir de l’aide sur une commande, il suffit de taper help command dans la console d’exécution, ou de lancer l’aide de MATLAB (Help > MATLAB Help ou F1).
? Pour rechercher une fonction relative à un mot clé, il suffit de taper lookfor keyword.
>> lookfor identity
EYE Identity matrix .
SPEYE Sparse identity matrix .
SETDATID Sets tha estimation data identity for a model ? En MATLAB, le symbole % est le symbole de commentaire.
2 Prise en main de MATLAB
2.1 Initialisation et opérations sur les matrices
L’initialisation d’une matrice peut se faire de plusieurs manières : affectation d’une liste d’éléments, résultats d’opérations ou de fonctions, à partir d’autres matrices, à partir de données externes,
La matrice A est définie ligne par ligne (en commençant par la première). Chaque ligne est séparée par un point virgule, et chaque élément d’une ligne par un espace ou une virgule.
Les opérations arithmétiques +, ?, ×, /, et ^ peuvent être effectuées sur les matrices (si leurs dimensions le permettent).
Si un symbole d’opération arithmétique est précédé d’un point (.), l’opération est effectuée élément par élément sur les matrices.
L’opération B/A est équivalente à B × inv(A) (avec inv(A) : inverse de la matrice carrée A). Autrement, l’opération \ peut également être utilisée : A\B est équivalent à inv(A) × B.
2.2 Accès aux éléments d’une matrice
L’accès aux éléments d’une matrice A se fait de la manière suivante :
? A(i) : accès au premier élément de la ie ligne de la matrice A
? A(i,j) : accès au je élément de la ie ligne de la matrice A (i ? 1 et j ? 1)
Lors de l’affectation d’une nouvelle valeur à un élément d’une matrice, MATLAB pourra (si nécessaire) étendre la matrice pour que l’affectation ait du sens (les éléments ajoutés seront initialisés à 0). L’accès à un ensemble d’éléments de la matrice A se fait de la manière suivante :
? A(i1 :i2) : accès aux éléments i1 à i2 de la première colonne de A (résultat sous la forme d’un vecteur ligne)
? A(i1 :i2,j) : accès aux éléments i1 à i2 de la je colonne de A ? A( :,j) : accès à l’ensemble des éléments de la je colonne de A ? A(i,j1 :j2) : accès aux éléments j1 à j2 de la ie ligne de A
? A(i, :) : accès à l’ensemble des éléments de la ie ligne de A
? A(i1 :i2,j1 :j2) : accès aux éléments i1 à i2 des colonnes j1 à j2 de A
2.3 Variables définies dans l’espace de travail
La commande who permet d’afficher le nom de l’ensemble des variables définies dans l’espace de travail, et la commande whos permet, en plus, d’afficher la place mémoire qu’elles occupent.
Il est à noter que, par défaut, les éléments créés par MATLAB sont de type double précision, double (pour plus de détails sur la norme IEEE-754, lire [2]). La matrice A peut cependant être convertie en simple précision par la commande single.
Le résultat d’un calcul faisant intervenir un élément simple précision est automatiquement converti en simple précision.
La commande clear efface l’ensemble des variables de l’espace de travail.
2.4 Vecteurs et polynômes
Un vecteur est défini de la même manière qu’une matrice. L’exemple suivant illustre la définition d’un vecteur ligne v et d’un vecteur colonne u.
Les polynômes, quant à eux, sont définis comme des vecteurs ligne. Soit a un polynôme de degré
. Ce polynôme est représenté par le vecteur ligne [anan?1an?2 ··· a1a0].
L’exemple suivant illustre la définition, en MATLAB, du polynôme a(x) = 4x3 ? 3x2 + 2x ? 1.
3 Structures de contrôle
3.1 Constructionif-{elseif-else}-end
3.2 Boucles for et while
for i =1:20 for i =1:0.5:20 for i =20: ?0.5:1 while condition command command command command end end end end
Les boucles for et while peuvent être interrompues par l’instruction break.
3.3 Construction swicth-case
4 Affichage graphique 2D de base
L’affichage graphique 2D de base se fait par la commande plot(x,y,options). Cette commande permet alors de tracer la courbe passant par les points (x(1),y(1)), (x(2),y(2)) Le premier exemple montre l’affichage de la fonction sin(x) sur l’intervalle [??,?].
>> x = [?pi : 0 . 1 : pi ] ;
Le résultat obtenu est illustré par la figure (a). La figure (b) est le résultat du deuxième exemple,
(a) (b)
qui calcule x2 pour 1001 valeurs de x ? [0,10] par pas de 0.01.
Pour plus de détails sur la commande plot : help plot.
5 Scripts et fonctions
Les scripts ou les fonctions sont stockés dans des fichiers à l’extension .m (test.m, par exemple), et contiennent un ensemble de commandes MATLAB.
Script Un fichier script n’a ni paramètre d’entrée ni paramètre de sortie, et travaille sur les variables de l’espace de travail.
Fonction Un fichier fonction contient la définition de la fonction, et peut accepter des paramètres d’entrée et de sortie. Les variables internes à la fonction sont locales (à moins qu’elles ne soient déclarées global).
L’éditeur de scripts/fonctions de MATLAB peut être lancé avec la commande edit. L’exemple suivant présente une fonction qui prend en paramètre d’entrée deux nombres a et b et retourne la somme s = a + b et le produit p = a × b.
Cette fonction doit être stockée dans le fichier somme_produit.m. L’exécution de cette fonction donne le résultat suivant :
>> [ s ,p]=somme_produit (4 ,5)
Pour exéctuer un script ou une fonction, le fichier doit se trouver dans le répertoire courant ou dans un répertoire de la variable path (voir path, addpath et rmpath). Pour exécuter un script, il suffit alors de taper dans la console d’exécution le nom du fichier script (sans l’extension .m), et pour une fonction, le nom de la fonction suivi des paramètres d’entrée entre parenthèses (si l’utilisateur veut récupérer la sortie, il doit indiquer les noms des variables de stockage, sinon, le dernier paramètre de sortie sera stocké dans la variable ans).
6 Exercices d’application
6.1 Polynôme caractéristique et matrice compagnon
Soit A une matrice carrée de taille n×n. On note ?i les valeurs propres de A et a(x) son polynôme caractéristique :.
1. Créer manuellement ou générer aléatoirement une matrice de taille m × n (m,n donnés).
2. Écrire la fonction qui détermine le polynôme caractéristique d’une matrice A donnée en paramètre (afficher un message d’erreur dans le cas où la matrice A n’est pas carrée). La fonction devra également retourner le déterminant et la trace de la matrice A.
3. Comparer les résultats de la question 2. avec ceux des fonctions poly, det et trace.
Le polynôme caractéristique de la matrice est de la forme :. La matrice compagnon de a peut alors être définie de la manière suivante :
4. Construire bloc par bloc la matrice compagnon C de a précédemment obtenu.
5. Calculer les valeurs propres de C, et vérifier qu’elles correspondent aux racines de a(x) (et donc aux valeurs propres de A).
6. Vérifier le théorème d’Hamilton-Caley : a(A) = An + an?1An?1 + ··· + a1A + a0In = 0n.
6.2 Matrices de translation et de rotation
Soit a un point du plan : a = (x,y). On note (xt,yt) les coordonnées de a après translation d’un vecteur ~u = (u1,u2), et (xr,yr) les coordonnées de a après rotation de centre O (de coordonnées (0,0)) et d’angle ?. Les coordonnées (xt,yt) et (xr,yr) peuvent être calculées de la manière suivante :
et
1. Écrire une fonction Translate qui prend en paramètre les coordonnées d’un point du plan et un vecteur de translation, et qui retourne les coordonnées du point résultat.
2. Écrire la même fonction pour la rotation (Rotate).
3. Construire et afficher graphiquement un carré (ou autre forme géométrique 2D).
4. Illustrer graphiquement l’utilisation des fonctions Translate et Rotate.
6.3 Méthode de Newton
La méthode de Newton est une méthode itérative, qui permet de résoudre numériquement l’équation f(x) = 0, par la récurrence suivante :
, avec x0 une valeur initiale.
1. Écrire la fonction NewtonSqrt(x, initial_range), qui permet de calculer, par la méthode de Newton, la racine carrée d’un nombre x donné avec une valeur initiale dans l’intervalle initial_range.
2. Illustrer graphiquement la convergence de cette méthode.
3. Comparer avec le résultat de la fonction sqrt(x).
6.4 Évaluation d’un polynôme de degré n
Soit a un polynôme de degré n donné par ses coefficients. La méthode de
Horner permet d’évaluer ce polynôme de la manière suivante :
.
1. Créer manuellement ou générer un polynôme de degré n donné.
2. Écrire la fonction Horner qui évalue un polynôme de degré n donné en un point x donné.
La simple précision (associée à la double) peut être utilisée pour estimer la précision d’un algorithme numérique. Cette technique standard consiste alors à exécuter cet algorithme à la fois en simple et double précision. En considérant le résultat double comme exact, une estimation de l’erreur d’évaluation en simple précision peut être déterminée en calculant la différence entre le résultat en simple précision et celui en double précision.
3. Afficher l’estimation de l’erreur d’évaluation par la méthode de Horner du polynôme a (différence des valeurs calculées en simple et double précision), sur l’intervalle [?0.5,0.5].
Références
[1] DJ. Higham, NJ. Higham, MATLAB GUIDE - Second edition, Society for Industrial and Applied Mathematics (SIAM), 2005
[2] ML. Overton, Numerical computing with IEEE floating point arithmetic, Society for Industrial and Applied Mathematics (SIAM), 2001