Description
Travaux pratiques 1 : Introduction `a Matlab
1 Introduction
Matlab pour MATtrix LABoratory , est un logiciel con¸cu pour fournir un environnement de calcul num´erique de haut niveau. Il est particuli`erement performant pour le calcul matriciel car sa structure de donn´ees interne est bas´ee sur les matrices. Il dispose ´egalement de grandes capacit´es graphiques pour, par exemple, la visualisation d’objets math´ematiques complexes. Son fonctionnement repose sur un langage de programmation interpr´et´e qui permet un d´eveloppement tr`es rapide. Pour des applications n´ecessitant un temps de calcul plus ´elev´e, un langage compil´e comme le C++, le fortran ou autre, est mieux adapt´e.
Dans la premi`ere partie de cet ´enonc´e, on va pr´esenter les commandes Matlab les plus courantes. Les exercices se trouvent dans la derni`ere section.
1.1 Guide pour vos premiers pas dans Matlab
Ces travaux pratiques ne sont malheureusement pas accompagn´es d’un cours, ce qui implique de votre part un certain degr´e d’auto-apprentissage. Pour d´ebuter, il est fortement conseill´e de proc´eder de la mani`ere suivante :
1. Lisez la Sections 2 en testant les commandes pr´esent´ees pour vous familiariser avec lesbases du programme et du language.
2. Jetez un coup d’oeil `a la Section 3, qui explique comment cr´eer et manipuler les vecteurset les matrices.
3. Lisez la Section 5, pr´esentant les m-files. La solutions de chaque exercice doit ˆetrer´edig´ee sous la forme d’un m-file.
4. Etudiez attentivement l’exemple d’exercice r´esolu de la Section 7. Il est exig´e que vouscommentiez le code de vos solutions en suivant cet exemple.
5. Apr`es cette pr´eparation, vous pouvez commencer `a r´esoudre les exercices, en vousr´ef´erant au guide ci-dessous et `a l’aide de Matlab quand n´ecessaire. Les exercices sont class´es approximativement par degr´e de difficult´e, il est donc conseill´e de tenter de les r´esoudre dans l’ordre dans lequel ils sont pr´esent´es.
2 Bases
2.1 Lancement de Matlab
L’interface Matlab se compose d’une fenˆetre principale divis´ee en plusieurs sous-fenˆetres, dont les plus importantes sont :
1. La fenˆetre Workspace permet de g´erer les variables utilis´ees. Nous y reviendrons au paragraphe 2.4.
Figure 1 – L’espace de travail de Matlab.
2. Le Current Folder g`ere l’emplacement des fichiers. Celui-ci sera utile pour le travail avec les m-files . Nous y reviendrons au paragraphe 5.1.
3. La fenˆetre Command History n’est plus visible par d´efaut dans la version 2018b; elle indique les derni`eres commandes effectu´ees. Pour l’afficher, cliquez sur l’icˆone repr´esentant des fenˆetres en haut `a cˆot´e de la barre de recherche.
4. La plus grande fenˆetre, Command Window, est la fenˆetre d’interaction avec Matlab.
2.2 Commandes et calculs de base
Matlab est un interpr´eteur. Cela veut dire que l’utilisateur rentre des commandes et
Matlab les ex´ecute ligne par ligne.
>> 2+2 ans =
4
Le symbole [>>] indique `a l’utilisateur ou` il faut rentrer la commande. On ne peut pas revenir en arri`ere , c’est-`a-dire, il ne faut pas essayer de placer le curseur sur une ligne au-dessus du dernier [>>]. Matlab fournit le r´esultat de la commande sous la ligne contenant ans =.
Toute suite de caract`eres suivant le symbole [%] est ignor´ee par Matlab, ce qui est pratique pour commenter le code :
>> 2+2 % Un exemple d’addition ans =
4
Il est extrˆemement important de commenter votre code. Voir les sections 5 et 7 pour plus d’informations.
Les touches [↑] et [↓] permettent de naviguer parmi les derni`eres commandes effectu´ees, ce qui peut ˆetre utile si l’on commet une erreur et qu’on veut ´eviter de taper `a nouveau toute la commande. Pour taper une autre commande, on le fait `a la suite.
>> 2+2 ans =
4 % Une premi`ere commande
>> 3*5 ans =
15 % Une deuxi`eme commande
Si on rentre des commandes erron´ees, Matlab nous l’indique par un message d’erreur.
>> 3* % Une commande erron´ee
3*
|
Error: Expression or statement is incomplete or incorrect.
Notez la fl`eche (ici une barre verticale) indiquant l’endroit ou` le probl`eme est apparu. Un autre exemple est :
>> aa % Une autre commande erron´ee Undefined function or variable ’aa’.
Matlab ne comprend pas ce que l’on entend par aa et retourne une erreur.
Matlab poss`ede de nombreuses constantes math´ematiques et fonctions pr´ed´efinies utiles en math´ematiques que nous allons ´etudier au cours de ces travaux pratiques.
>> pi % Le rapport de la circonf´erence d’un cercle `a son diam`etre.
ans =
3.1416
>> sin(pi/6) % Un exemple d’´evaluation d’une fonction ans =
0.5000
>> log(1.5) % Un second exemple ans =
0.4055
>> i^2 % i est l’unit´e imaginaire ans =
-1
2.3 Variables
Il peut parfois ˆetre utile de stocker une valeur dans une variable pour l’utiliser plus tard. L’affectation d’une variable en Matlab se fait au moyen du signe [=].
>> A=23 % On assigne la valeur 23 `a la variable A.
A =
23
Le nom d’une variable doit commencer par une lettre (majuscule ou minuscule, sans accent) puis peut contenir des lettres (mˆeme remarque), des chiffres et des caract`eres soulign´es [ ]. Le nom peut contenir au maximum 31 caract`eres. En entrant le nom d’une variable, Matlab retourne sa valeur.
>> A % On demande la valeur enregistr´ee dans la variable A.
A =
23
La valeur d’une variable peut ˆetre un nombre, comme dans l’exemple ci-dessus, une chaˆıne de caract`eres (inclue entre des guillement simples [’])
>> A=’salut !’ % On enregistre une cha^ıne de caract`eres dans la variable A.
A =
’salut !’
ou une matrice (voir la section 3).
Contrairement au C++ ou au fortran, Matlab n’est pas typ´e . Autrement dit, une variable contenant un entier peut contenir plus tard une chaˆıne de caract`eres ou une matrice, comme dans les exemples ci-dessus.
Pr´ecisons que Matlab est case-sensitive , c’est-`a-dire qu’il fait la distinction entre majuscules et minuscules.
>> A=42 % On assigne la valeur 42 `a la variable A.
A =
42
>> a=2.432 % On assigne la valeur 2.432 `a la variable a.
a =
2.4320
>> A % Le second assignement n’a pas chang´e la valeur de A.
A =
42
Les variables a et A sont donc bien distinctes.
On peut ´evidement faire des calculs avec des variables. Le r´esultat d’un calcul est, par d´efaut, stock´e dans une variable nomm´ee ans, ce qui explique pourquoi Matlab retourne ans = 4 lorsque l’on entre 2+2. On peut toutefois stocker le r´esultat dans n’importe quelle autre variable :
>> A = 2 + 2 % On enregistre le r´esultat d’une addition dans la variable A.
A =
4
Par d´efaut, Matlab affiche le r´esultat de la derni`ere op´eration. Cet affichage peut ˆetre supprim´e en terminant votre commande par le symbole [;]. Plusieurs commandes peuvent ˆetre rentr´ees sur une mˆeme ligne en les s´eparant soit par [,] soit par [;].
>> x=2;y=5; % On effectue plusieurs commandes sur la m^eme ligne. % Matlab n’affiche pas le r´esultat `a cause des % caract`eres ; `a la fin de chaque commande.
>> z=x^2+y^2 % On effectue un calcul avec les variables enregistr´ees % `a la premi`ere ligne.
z =
29
Pour une liste plus d´etaill´ee des op´erations math´ematiques que l’on peut faire dans Matlab voir le Paragraphe 3.3.
2.4 Gestion des variables
La fenˆetre Workspace, sur la droite ou la gauche de l’espace de travail de Matlab, fournit une liste de toutes les variables d´ej`a utilis´ees avec leur type et leur valeur. Pour les vecteurs et le matrices, on peut voir la valeur de leurs ´el´ements de matrice en double-cliquant sur la variable. On peut ´egalement modifier la/les valeurs d’une variable de cette fa¸con. Un clic droit sur une variable ouvre un menu permettant de dupliquer ou de supprimer une variable.
Dans la Command Window, on peut ´egalement visionner les variables utilis´ees et obtenir des informations d´etaill´ees au moyen des commandes who et whos respectivement. On peut effacer une variable en utilisant la commande clear suivie du nom de la variable. Pour tout effacer, clear all.
2.5 Historique des commandes
Matlab garde en m´emoire les derni`eres commandes effectu´ees. On peut y acc´eder directement dans la Command Window au moyen des touches [↑] et [↓]. Ceci est particuli`erement utile pour r´ep´eter la derni`ere commande.
2.6 Aide
Matlab poss`ede un grand nombre de fonctions et commandes. On ne pourra pas toutes les traiter en d´etail. Afin d’obtenir de l’information (nombre de param`etres d’une fonction, valeur de retour, etc), il suffit de rentrer help nom de la commande dans la Command Window. En plus d’explications, vous obtenez un lien vers la page de l’aide de Matlab correspondant `a cette fonction, ou` vous trouverez des informations plus d´etaill´ees et des exemples.
L’aide de Matlab peut ˆetre atteinte directement en cliquant sur le point d’interrogation en haut `a droite de la fenˆetre de Matlab.
La commande lookfor est tr`es utile. Elle permet de chercher les fonctions par motsclefs. Plus pr´ecis´ement, lookfor XYZ renvoie toutes les fonctions qui contiennent XYZ dans la premi`ere ligne de leur descriptif. Nous y reviendrons au paragraphe sur m-files.
Si vous ne trouvez pas la fonction dont vous avez besoin, ou si vous aimeriez des exemples suppl´ementaires concernant l’utilisation d’une fonction, une recherche sur Google ou un autre moteur de recherche s’av`ere souvent fructueuse.
2.7 Sauvegarde
Matlab ne permet pas de sauvegarder l’historique des commandes ex´ecut´ees. Il existe cependant deux solutions pour sauvegarder son travail.
1. Le Workspace. On peut sauver l’´etat de la session en cours dans un fichier .mat. Pour cela, dans la fenˆetre principale, allez sur l’onglet HOME et cliquez sur Save Workspace As, et vous choisissez l’emplacement et le nom de votre fichier. Matlab sauvegarde ainsi le nom et la valeur de chacune des variables. La prochaine fois que vous utilisez Matlab, au moyen du menu Open vous retrouvez le Workspace dans l’´etat dans lequel vous l’avez laiss´e. Vous ne verrez cependant pas l’historique des commandes.
2. Les m-files. Un peu plus loin, `a la Section 5, on introduira la notion de m-files. Il s’agit d’un fichier dans lequel on regroupe des commandes. C’est tr`es utile pour aborder des probl`emes plus complexes et ´eviter de retaper les mˆemes commandes plusieurs fois.
Attention!!!
Sauvegardez vos fichiers sur votre espace m´emoire ´etudiant ou sur un support personnel (clef USB par exemple).
Ne sauvegardez pas votre travail sur le disque local de l’ordinateur : il sera perdu au prochain red´emarrage.
3 Vecteurs et matrices
La structure de donn´ees de base de Matlab est la matrice ; mˆeme un nombre est consid´er´e comme une matrice 1 × 1. Toutes les fonctions et op´erations relatives aux matrices sont tr`es optimis´ees et sont `a utiliser aussi souvent que possible.
3.1 Cr´eation
Une matrice est d´elimit´e par des crochets. On s´epare les colonnes par des espaces et les lignes par des points-virgules.
>> A=[1 1 1 ; 2 2 2] % Une matrice de taille 2 x 3.
A =
1 1 1
2 2 2
>> B=[1 ; 2 ; 3] % Un vecteur colonne de taille 3.
B =
1
2
3
>> C=[1.1 2.2 3.3] % Un vecteur ligne de taille 3.
C =
1.1000 2.2000 3.3000
Les matrices qui n’ont qu’une seule ligne sont appel´ees des vecteurs lignes ou des listes ; celles qui n’ont qu’une seule colonne sont appel´ees des vecteurs colonnes ou simplement des vecteurs. Si le nombre d’´el´ements dans chaque ligne (ou colonne) n’est pas le mˆeme, Matlab signale une erreur.
>> A=[1 1 1; 1 2] % Cette matrice a 3 ´el´ements dans la premi`ere ligne % et deux dans la seconde -> erreur.
Dimensions of matrices being concatenated are not consistent.
Matlab propose des commandes pour cr´eer certaines matrices particuli`eres simplement. Pour plus d’informations, lire l’aide de chaque fonction (help …).
Commande Description
ones(n,m) Matrice de taille n × m ne contenant que des 1.
zeros(n,m) Matrice de taille n × m ne contenant que des 0.
eye(n,m) Matrice de taille n × m contenant des 1 sur la premi`ere diagonale et des 0 ailleurs.
diag(v) Matrice diagonale ou` les ´el´ements de la diagonale sont les composantes du vecteur v, et dont les ´el´ements hors diagonale sont nuls.
rand(n,m) Matrice de taille n × m contenant des nombres al´eatoires uniform´ement r´epartis entre 0 et 1.
Table 1 – Commandes pour cr´eer des matrices.
Matlab dispose ´egalement de moyens tr`es simples pour cr´eer des listes. La commande
[a:h:b] cr´ee une liste dont les ´el´ements sont
a, a + h, a + 2h, …, a + nh,
ou` n ∈ N, |nh| ≤ |b−a| et |(n+1)h| > |b−a|. Le cas particulier [a:b] est un raccourci pour [a:1:b]. Si les conditions initiales sont erron´ees, Matlab retourne un vecteur vide.
>> x=[1:2:10] % Un vecteur dont les ´el´ements vont de 1 `a 9, par % incr´ements de 2.
x =
1 3 5 7 9
>> y=[-5:0] % Un vecteur dont les ´el´ements vont de -5 `a 0, par % incr´ements de 1.
y =
-5 -4 -3 -2 -1 0
>> z=[10:2:-10] % Un vecteur dont les ´el´ements vont de 10 `a -10, par % incr´ements de 2. -> vecteur vide
z =
Empty matrix: 1-by-0
Une autre formulation de [a:h:b] est la fonction linspace(a,b,n). Celle-ci cr´ee une liste de n ´el´ements uniform´ement r´epartis entre a et b. Autrement dit, linspace(a,b,n) est ´equivalente `a [a:c:b] ou` .
Il est parfois utile de travailler avec des ´echelles logarithmiques; pour cela, la commande logspace(x1,x2,n) cr´ee une liste de n points r´epartis logarithmiquement uniform´ement entre 10×1 et 10×2.
Une matrice peut aussi ˆetre cr´e´ee par concat´enation. Si A et B sont deux matrices, alors [A B] ou [A,B] est la matrice obtenue en collant B `a la droite de A. [A;B] est la matrice obtenue en collant B au-dessous de A. Les tailles de A et de B doivent ˆetre compatibles.
>> A=[1,3,5], B=[2,4,1], C=[1,1;1,2] % Trois matrices
A =
1 3 5
B =
2 4 1
C =
1 1
1 2
>> [A,B],[A;B] % Concat´enations horizontale et verticale de A et B ans =
1 3 5 2 4 1
ans =
1 3 5
2 4 1
>> [A,C] % Impossible de concat´ener horizontalement des matrices % n’ayant le m^eme nombre de lignes.
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
3.2 Acc`es et modifications
On pr´esente dans cette section diverses m´ethodes pour acc´eder et modifier les ´el´ements d’une matrice. Dans la table qui suit, A d´esigne une matrice de taille n×m, 1 ≤ k ≤ n et 1 ≤ l ≤ m sont des nombres entiers et M une matrice d’entiers positifs inf´erieurs ou ´egaux `a nm.
Commande Description
A(k,l) Renvoie l’´el´ement se trouvant `a la k`eme ligne et la l`eme colonne.
A(k) Renvoie le k`eme ´el´ement d’une matrice. En Matlab, les ´el´ements d’une matrice de taille n × m sont index´es de 1 `a nm de haut en bas et de gauche `a droite.
A(M) Renvoie une matrice de mˆeme taille que M dont chaque ´el´ement a pour valeur A(M(k)). (Le k`eme ´el´ement de M est donc un indice, d´eterminant un ´el´ement de la matrice A `a placer en position k
A(M).)
A(k,:) Renvoie la k`eme ligne de la matrice.
A(:,l) Renvoie la l`eme colonne de la matrice.
A(k:l,p:q) Renvoie sous-matrice de A compos´ee de l’intersection des lignes k (inclue) et des colonnes p `a q (inclue).
A(k) dans
`a l
Table 2 – Commandes pour acc´eder aux ´el´ements d’une matrice.
>> A=[1 2 3 4; 12 13 14 15] % Une matrice 2 x 4. A =
1 2 3 4
12 13 14 15
>> A(2,3) % L’´el´ement de matrice de A en position (2,3) ans =
14
>> A(2,:) % La seconde ligne de A ans =
12 13 14 15
>> A([1 3 5 7]) % Un vecteur ligne contenant les ´el´ements no.1, 3, 5, 7.
ans =
1 2 3 4
>> A(:,4) % La quatri`eme colonne de A.
ans =
4
15
>> A([1 1 1]) % Un vecteur ligne contenant l’´el´ement no.1 trois fois.
ans =
1 1 1
>> A([1 3; 4 8]) % Une matrice contenant les ´el´ements no.1,3,4,8.
ans =
1 2
13 15
>> A(1:2, 1:3) % Une sous-matrice donn´ee par l’intersection des lignes
% 1 et 2 et des colonnes 1, 2 et 3. Equivalent `a A(:,1:3).
ans =
1 2 3
12 13 14
Pour modifier les ´el´ements d’une matrice, on utilise les mˆemes commandes que ci-dessus. On ajoute `a la commande le signe [=] et la nouvelle valeur.
>> A % Notre matrice A =
1 2 3 4
12 13 14 15
>> A(2,2)=999 % On assigne la valeur 999 `a l’´el´ement de matrice en % position (2,2).
A =
1 2 3 4
12 999 14 15
>> A([2 3 5]) = [-1 -1 -1] % On assigne la valeur -1 aux ´el´ements % no.2,3,5.
A =
1 -1 -1 4
-1 999 14 15
>> A(:,4)=[101 103] % Change la valeur des ´el´ements de matrice de la % colonne 4. A =
1 -1 -1 101
-1 999 14 103
Remarquons cependant que dans ce cas, on est autoris´es `a d´epasser la taille de la matrice initiale. Matlab cr´ee automatiquement une nouvelle matrice en ajoutant aux anciennes valeurs les nouvelles. Si rien n’est sp´ecifi´e, il remplit avec des 0.
>> A=[1 2; 3 4] % Une matrice 2 x 2
A =
1 2
3 4
>> A(2,5) = 34 % On assigne la valeur 34 `a l’´el´ement de matrice en
% position (2,5). A est convertie en une matrice de % taille 2 x 5.
A =
1 2 0 0 0
3 4 0 0 34
3.3 Op´erations avec les matrices
Op´erations de bases. Dans ce qui suit, A et B sont des matrices et c est un nombre. On note les ´el´ements de matrices de A et de B par (aij) et (bij).
Commande Description
A+B Matrice dont l’´el´ement (i,j) est aij + bij. A et B doivent avoir les mˆemes dimensions.
A+c = c+A Matrice dont l’´el´ement (i,j) est aij + c.
A-B Matrice dont l’´el´ement (i,j) est aij − bij. A et B doivent avoir les mˆemes dimensions.
A-c Matrice dont l’´el´ement (i,j) est aij − c.
c-A Matrice dont l’´el´ement (i,j) est c − aij.
A*B Matrice dont l’´el´ement (i,j) est Pj aikbkj. C’est le produit matriciel standard. Le nombre de colonnes de A doit ˆetre le mˆeme que le nombre de lignes de B.
c*A (ou A*c) Matrice dont l’´el´ement (i,j) est caij. C’est la multiplication d’une matrice par un scalaire.
A.*B Matrice dont l’´el´ement (i,j) est aijbij. C’est la multiplication ´el´ement par ´el´ement, peu utilis´ee en alg`ebre lin´eaire, mais souvent pratique. A et B doivent avoir les mˆemes dimensions.
A^n (n ∈ Z+) A * A * … * A (n fois); A doit ˆetre carr´ee.
A^(-1) Matrice inverse, telle que A * A^(-1) = A^(-1) * A est la matrice identit´e. A doit ˆetre inversible.
A^(-n) (n ∈ Z+) A^(-1) * A^(-1) * … * A^(-1) (n fois); A doit ˆetre inversible.
A.^B Matrice dont l’´el´ement (i,j) est . A et B doivent avoir les mˆemes dimensions.
A’ Transposition et conjugaison complexe.
A.’ Transposition. A.’ = A’ dans le cas ou` A est r´eelle.
B/A Matrice X telle que XA = B. Si A est inversible, alors X = Le nombre de colonnes de A doit ˆetre le mˆeme que le nombre de colonnes de B.
AB Matrice X telle que AX = B. Si A est inversible, alors X = A Le nombre de lignes de A doit ˆetre le mˆeme que le nombre de lignes de B.
A./B Matrice dont l’´el´ement (i,j) est aij/bij. A et B doivent avoir les mˆemes dimensions.
A.B Matrice dont l’´el´ement (i,j) est bij/aij. A et B doivent avoir les mˆemes dimensions.
A/c Matrice dont l’´el´ement (i,j) est aij/c.
BA−1. −1B.
Table 3 – Op´erations avec des matrices.
Pr´ecisons que Matlab ne renvoie pas un message d’erreur lors d’une division par 0, mais donne le r´esultat Inf, un symbole d´enotant une quantit´e infinie. Attention n´eanmoins `a ne pas travailler avec Inf comme avec un nombre.
>> A=[1 2 3; 0 0 1; 1 0 0] % Une matrice 3 x 3
A =
1 2 3
0 0 1
1 0 0
>> B=[-1 -2 -3; 0 0 -1; -1 0 0] % Une autre matrice 3 x 3
B =
-1 -2 -3
0 0 -1
-1 0 0
>> A+B % La somme des matrices A et B.
ans =
0 0 0
0 0 0
0 0 0
>> A*B % Le produit matriciel de A et B.
ans =
-4 -2 -5
-1 0 0
-1 -2 -3
>> A^(-2) % Le carr´e de l’inverse de A.
ans =
0 1.0000 0
-0.7500 1.7500 1.2500 0.5000 -1.5000 -0.5000
>> A.*B % Le produit ´el´ement par ´el´ement de A et B.
ans =
-1 -4 -9
0 0 -1
-1 0 0
>> A/B % Une matrice ans satisfaisant ans*B = A.
ans =
-1 0 0
0 -1 0
0 0 -1
Important. Pour la r´esolution de syst`emes d’´equations AX = B ou XA = B, utilisez toujours les commandes AB ou B/A. Il n’est pas n´ecessaire d’inverser la matrice A pour r´esoudre le syst`eme. L’inversion de A est couˆteuse en temps de calcul et moins pr´ecise que la r´esolution directe du syst`eme.
Fonctions sur les matrices. Nous pr´esentons ici quelques fonctions d´efinies dans Matlab prenant comme param`etres des matrices. Pour plus d’information, tapez help suivi du nom de la fonction. Dans le tableau qui suit, A est une matrice et v est un vecteur.
Commande Description
det(A) D´eterminant de A; la matrice A doit ˆetre carr´ee.
trace(A) Trace de A pour une matrice A carr´ee.
rank(A) Rang de A (la dimension de l’image de l’application associ´ee `a A).
null(A) Base du noyau de A. L’argument suppl´ementaire ’r’ donne une meilleure base (voir help null).
diag(A) Diagonale principale de A.
norm(v) Norme euclidienne de v. Il est aussi possible de calculer d’autres normes, voir help norm.
mean(A) Liste (vecteur ligne) contenant la moyenne des ´el´ements de chaque colonne.
sum(A) Liste contenant la somme des ´el´ements de chaque colonne.
prod(A) Liste contenant le produit des ´el´ements de chaque colonne.
max(A) Liste contenant la valeur maximale de chaque colonne.
min(A) Liste contenant la valeur minimale de chaque colonne.
length(v) Nombre d’´el´ements du vecteur v. Appliqu´e `a une matrice A, length(A) retourne le maximum entre le nombre de lignes et de colonnes.
eig(A) Liste des valeurs propres de A.
[M,D]=eig(A) Enregistre sous la forme de variables une matrice diagonale D contenant les valeurs propres de A et une matrice M contenant comme colonnes les vecteurs propres de A.
Table 4 – Fonctions sur des matrices.
Toutes les fonctions math´ematiques classiques (cos, sin, log, exp, etc…) peuvent ´egalement
ˆetre appliqu´ees `a une matrice A. Le r´esultat est la matrice obtenue de A en appliquant la fonction s´epar´ement `a chaqun des ´el´ements de matrice de A. Ceci est pratique pour calculer rapidement une fonction sur un ensemble de valeurs.
>> I=[0:0.2:1] % Un vecteur dont les ´el´ements vont de 0 `a 1 par pas de % 0.2.
I =
0 0.2000 0.4000 0.6000 0.8000 1.0000
>> exp(I) % Un vecteur dont les ´el´ements sont les exponetielles des % ´el´ements de I.
ans =
1.0000 1.2214 1.4918 1.8221 2.2255 2.7183
4 Graphisme
4.1 Courbes dans le plan
Courbe Etant donn´es deux vecteurs de mˆeme taille,´ x et y, la fonction plot(x,y) dessine les points de coordonn´ee (x(k),y(k)) pour 1 ≤ k ≤ length(x).. Par d´efaut, Matlab relie les points par des segments de droite.
>> x = [-1 -.5 -1 0 1 .5 1 0 -1]; % Un vecteur de coordonn´ees horizontales.
>> y = [-1 0 1 .5 1 0 -1 -.5 -1]; % Un vecteur de coordonn´ees verticales.
>> plot(x,y) % On dessine les neuf points du plan de
% coordonn´ees (x,y), reli´es par des % segments de droite.
La figure dessin´ee apparaˆıt dans une nouvelle fenˆetre.
Graphe d’une fonction En prenant un grand nombre de points r´eguli`erements espac´es dans le vecteur x et en d´efinissant ensuite y = f(x) pour une fonction f, la fonction plot(x,y) dessine le graphe de la fonction f.
>> x=[0:0.01:4*pi]; % Un vecteur dont les ´el´ements vont de 0 `a 4*pi, % par pas de 0.01.
>> y=cos(x); % Un vecteur dont les ´el´ements sont les cosinus des
% ´el´ements de x.
>> plot(x,y) % On dessine les points de coordonn´ees (x,y), reli´es % par des segments de droite.
Plusieurs courbes La suite de commandes
>> z=sin(x); % Un vecteur dont les ´el´ements sont les sinus des
% ´el´ements de x.
>> plot(x,y) % Dessine les points de coordonn´ees (x,y).
>> plot(x,z) % Dessine les points de coordonn´ees (x,z).
ne trace pas deux graphes, mais un seul. En fait, le deuxi`eme plot(x,z) vient effacer et remplacer le premier plot(x,y). Pour rem´edier `a cela, Matlab propose plusieurs m´ethodes suivant si l’on d´esire que les courbes apparaissent dans une ou plusieurs fenˆetres.
Pour voir les graphiques sur deux fenˆetres, il suffit de dire `a Matlab de construire une nouvelle fenˆetre avec la commande figure.
>> plot(x,y) % Comme ci-dessus
>> figure % Demande `a Matlab de dessiner sur une nouvelle fen^etre.
>> plot(x,z) % Dessine les points de coordonn´ees (x,z) dans la nouvelle % fen^etre.
Pour avoir les deux courbes dans la mˆeme fenˆetre, il existe deux m´ethodes ´equivalentes :
soit avec les commandes hold on et hold off,
>> hold on,plot(x,y),plot(x,z),hold off % Apr`es hold on, Matlab dessine
% dans la m^eme fen^etre, sans
% effacer les dessins pr´ec´edents.
% La commande hold off annule la
% commande hold on pour les % prochains dessins.
soit en donnant plus de param`etres `a la commande plot.
>> plot(x,y,x,z) % Dessine les points de coordonn´ees (x,y), puis les
% points de coordonn´ees (x,z), dans la m^eme fen^etre.
Options d’affichage On pr´esente rapidement quelques options de la commande plot. Ce n’est pas une liste exhaustive, voir help plot pour plus de d´etails.
axis equal met les deux axes `a la mˆeme ´echelle. axis off supprime les axes. Ces deux
commandes peuvent ˆetre combin´ees comme ci-dessous.
>> plot(x,y), axis equal % Dessine les points de coordonn´ees (x,y) % sur une figure avec des axes `a la m^eme % ´echelle.
>> plot(x,y), axis equal off % La m^eme chose, en ne dessinant pas les % axes.
Les couleurs et le style du trac´e peuvent ´egalement ˆetre modifi´es en passant `a plot comme argument une chaˆıne de caract`eres.
>> x=[0.5:0.1:5];y=log(x); % Un vecteur de coordonn´ees et % leur logarithme.
>> plot(x,y,’co’), axis equal % Dessine les points de coordon´ee % (x,y) en cyan (’c’), sous la % forme de cercles (’o’).
>> x=[0:0.05:1];y=exp(x);z=log(y); % Comme ci-dessus.
>> plot(x,y,’mo’,y,z,’g>’),axis equal % Dessins les points (x,y) sous la % forme de cercles en magenta (’m’) % et les points (x,z) en vert (’g’).
Voir help plot pour toutes les possibilit´es.
4.2 Affichage de surfaces
Pour la visualisation de surfaces en 3 dimension donn´ees par des ´equations du type z = f(x,y), Matlab met `a disposition deux fonctions : mesh et surf. La seule diff´erence entre les deux vient du rendu graphique : mesh affiche la surface en fil-de-fer et surf en surface remplie. Essayez l’exemple ci-dessous :
>> [x,y]=meshgrid(-3:0.1:3,0:0.2:5); % Cr´ee une grille (voir ci-dessous)
>> z = x.^2 – y.^2; % Calcule une fonction z = x^2 – y^2 >> surf(x,y,z) % Dessine la surface correspondante.
La fonction meshgrid(-3:0.1:3,0:0.2:5) cr´ee deux matrices x et y de taille 26 x 61, que l’on peut voir comme les coordonn´ees (x,y) de points d’une grille de 26 x 61 points. Les coordonn´ees x vont de -3 `a 3 par pas de 0.1 et les coordonn´ees y vont de 0 `a 5 par pas de 0.2.
Pour plus d’explications, voir help meshgrid.
On calcule alors la fonction z sur chaque point de la grille `a partir de ses coordonn´ees, puis on dessine la surface au moyen de surf.
4.3 Affichage de matrices
Etant donn´ee une matrice´ A de taille n×m, Matlab propose une m´ethode, imagesc, pour visualiser le contenu de A. Matlab dessine un rectangle partag´e en n × m petits rectangles ou` la couleur du rectangle (i,j) d´epend de la valeur de l’´el´ement aij de la matrice.
>> a=ones(11,11) % Cr´ee une matrice 11 x 11 remplie de 1.
>> a([1:2:121])=0 % Change les ´el´ements de num´ero pair `a 0.
>> imagesc(a), axis equal % Visualise a.
>> x=rand(10,10); % Matrice al´eatoire de taille 10 x 10
>> y=rand(100,100); % Matrice al´eatoire de taille 100 x 100
>> z=rand(1000,1000); % Matrice al´eatoire de taille 1000 x 1000
>> imagesc(x),axis off % Visualise x
>> figure % Nouvelle fen^etre
>> imagesc(y),axis off % Visualise y
>> figure % Nouvelle fen^etre
>> imagesc(z),axis off % Visualise z
5 Travail avec les m-files
5.1 Scripts
La premi`ere ´etape est de cr´eer un r´epertoire (ou en choisir un existant) ou` les fichiers seront stock´es. En utilisant l’onglet Current Folder, placez-vous dans votre r´epertoire personnel (probablement sur le disque H:). Cr´eez ensuite un r´epertoire pour vos travaux Matlab, par exemple tps matlab (dans l’onglet Current Folder, bouton droit de la souris et New → Folder). Dans ce r´epertoire, vous pouvez, par exemple, cr´eer un sous-r´epertoire pour le travail pratique en question : tp1.
Cr´eez ensuite un script (onglet Editor, New → Script). Apparaˆıt alors une nouvelle fenˆetre ressemblant `a un ´editeur de texte, c’est l’Editor. Le script est ´edit´e dans cette fenˆetre.
Un script est un ensemble de commande que Matlab ex´ecutera s´equentiellement, lorsque le script sera lanc´e. Comme d’habitude, le symbole [%] permet d’ajouter des commentaires.
% Mon premier m-file
A=ones(4) % Une matrice 4 x 4 remplie de 1.
v=[1 2 3 4]’ % Un vecteur colonne w=A*v % Transformation du vecteur par la matrice.
Remarquez que, contrairement `a la Command Window, les commandes ne s’ex´ecutent pas directement. Quand vous avez fini de rentrer les commandes souhait´ees, enregistrez le fichier dans le r´epertoire tp1 avec comme nom, par exemple, test1.m. Pour ex´ecuter les commandes entr´ees dans le m-file, on rentre le nom du fichier (sans le .m) dans la Command Window.
>> test1
A =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
v =
1
2
3
4
w =
10
10
10
10
Pour la suite des travaux pratiques, la console peut-ˆetre utilis´ee pour tester des commandes, mais les solutions des exercices devront ˆetre r´edig´ee dans des m-files. Lors des tests, vous devrez rendre un m-files par exercice.
Remarquons que pour ex´ecuter un m-file, il faut ˆetre dans le bon r´epertoire . Autrement dit, vous devez voir vos fichiers dans l’onglet Current Folder. La prochaine fois que vous relancez Matlab, n’oubliez pas de choisir de r´epertoire ou` sont rang´es vos m-files avant d’essayer de les ex´ecuter.
5.2 Fonctions
Une fonction re¸coit des arguments et retourne une valeur. Dans un script, on peut d´efinir des fonctions apr`es la derni`ere commande du script, en utilisant le mot-clef function. Il faut ´egalement pr´eciser les valeurs de retour et les arguments comme dans l’exemple ci-dessous.
La d´efinition de la fonction doit se terminer par le mot-clef end. Le script peut utiliser toutes les fonctions d´efinie dans le mˆeme m-file, mais celles-ci ne sont pas accessibles hors du m-file.
Le script ci-dessous utilise une fonction, moyenne, qui prend un entier comme argument et retourne ensuite la valeur moyenne des ´el´ements de matrice al´eatoire de taille n x n.
n = 4; % On choisit une valeur pour n. moyenne(n) % On utilise la fonction moyenne() d´efinie ci-dessous.
function m = moyenne(n)
% Calcule la moyenne des ´el´ements d’une matrice al´eatoire.
% Cette fonction prend comme param`etre un entier n et affiche les % valeurs d’une matrice al´eatoire A de taille n x n. Elle retourne % la moyenne des ´el´ements de matrice de A.
A = rand(n); % Une matrice al´eatoire de taille n x n
imagesc(A); % Affiche les ´el´ements de matrice sous forme de
% couleurs
axis equal off; % Met les axes `a la m^eme ´echelle et les supprime % de la figure.
m = mean(mean(A)); % Calcule les moyennes des colonnes, puis la
% moyenne du vecteur ainsi obtenu. Ceci est % ´equivalent `a calculer la moyenne de tous les % ´el´ements de matrice.
end % Termine la d´efinition de la fonction
La forme g´en´erale de la d´eclaration d’une fonction est
function nom variable retour = nom fonction ( noms param`etres )
Quelques remarques :
1. Il peut y avoir plusieurs param`etres, auquel cas il suffit de les s´eparer par des virgules,ou aucun.
2. Il peut y avoir plusieurs variables de retour, auquel cas il faut les mettre entre crochetset les s´eparer par des virgules, ou aucune.
3. Pour les fonctions d´efinies dans un script, comme ci-dessus, la d´efinition des fonctionsdoit apparaˆıtre `a la fin du script. (Pas de code du script apr`es la d´efinition d’une fonction.)
4. Afin de vous souvenir de ce que vous avez programm´e, et de permettre `a d’autre personnes d’utiliser vos fonction, il est indispensable de mettre un commentaire expliquant ce que la fonction effectue. Traditionellement, ce commentaire est plac´e juste sous la d´efinition des variables de retour et des param`etres, c’est-`a-dire sous la premi`ere ligne (voir l’exemple ci-dessus).
5. Dans le cas ou` les fonctions sont d´efinies dans leur propre m-file (ce qu’on ´evitera saufindication contraire dans ces TPs), la premi`ere ligne de commentaires est importante car les mots de cette ligne sont utilis´es par la commande de recherche de fonction de Matlab, lookfor.
6. Pour des fonctions plus compliqu´ees, il est recommand´e d’´enum´erer les param`etresd’entr´ee et les variables retourn´ees en expliquant leur nature.
5.3 Debuggage
En programmant, il arrive (toujours…) que des erreurs s’insinuent dans le code. Ces erreurs peuvent ˆetre de plusieurs types. Les erreurs de syntaxe sont signal´ees par le programme et sont donc faciles `a localiser. D’autres erreurs sont plus difficiles `a corriger. Il s’agit des vraies erreurs de programmation. Le programme fait quelque chose, mais pas ce que vous voulez. Pour se rendre compte de la pr´esence de telles erreurs, il faut tester son programme sur des exemples faciles dont la r´eponse est connue.
Dans le cas ou` vous ˆetes confront´es `a une telle erreur, les outils de debuggage de MatLab peuvent vous aider.
Par exemple, vous pouvez placer dans votre m-file des break point. Ceux-ci interrompent l’ex´ecution `a l’endroit choisi et vous pouvez acc´eder aux valeurs des variables internes `a cet instant via la fenˆetre Workspace. Vous pouvez ex´ecuter la suite du programme jusqu’au break point suivant ou ligne par ligne. Les break points peuvent ˆetre ajout´es au moyen du menu au dessus de la Command windows ou de l’Editor.
6 Programmation
En plus des commandes vues jusqu’`a maintenant, Matlab permet d’inclure dans des m-files des instructions de programmation classiques.
6.1 Expressions bool´eennes
Une variable bool´eenne est une variable prenant deux valeurs : vrai ou faux. Les variables bool´eennes de Matlab prennent les valeurs 1 (vrai) ou 0 (faux).
En Matlab le test d’´egalit´e se fait `a l’aide de [==] et celui d’in´egalit´e `a l’aide de [∼=]. Ces tests retournent une valeur bool´eenne suivant la v´eracit´e de l’expression. On peut combiner des variables et valeurs bool´eennes au moyen des op´erateurs logiques ”et” [&] et ”ou” [|].
Voici un exemple :
>> a=1;b=2; % On d´efinit deux variables a = 1, b = 2
>> a==b ans =
0 % “a ´egal b” est faux.
>> a~=b ans =
1 % “a in´egal `a b” est vrai.
>> a == 1 & b == 1
ans =
0 % “a ´egal 1 et b ´egal 1” est faux.
>> a == 1 | b == 1
ans =
1 % “a ´egal 1 ou b ´egal 1” est vrai.
6.2 Conditions – if … else … end
La commande if permet d’executer un bloc de commandes seulement si une condition est vraie. La condition est une variable bool´eenne (cf. ci-dessus). La syntaxe est la suivante :
if (test) % Si la condition test est vraie,…
[commandes] % …on ex´ecute les commandes dans ce bloc. end
Notez le mot-cl´e end qui termine le bloc de commandes. Par souci de lisibilit´e du code, il est recommand´e d’indenter le texte du bloc contenu dans la commande if.
Pour ex´ecuter un autre bloc de commande au cas ou` la condition est fausse, on utilise else :
if (test) % Si la condition test est vraie,…
[commandes] % …on ex´ecute les commandes dans ce bloc.
else % Si test est fausse,…
[commandes] end % …on ex´ecute les commandes dans ce bloc.
On peut ´egalement imbriquer des if … else les uns dans les autres `a l’aide de l’instruc-
tion elseif.
if (test1) % Si la condition test1 est vraie,…
[commandes] % …on ex´ecute les commandes dans ce bloc.
elseif (test2) % Si test1 est fausse et test2 est vraie,…
[commandes] % …on ex´ecute les commandes dans ce bloc.
elseif (test3) % Si test1 et test2 sont fausses et test3 est vraie,…
[commandes] % …on ex´ecute les commandes dans ce bloc.
… % On peut ajouter autant de elseif que n´ecessaire.
else % Si toutes les conditions sont fausses,…
[commandes] end % …on ex´ecute les commandes dans ce bloc.
Voici maintenant un exemple de bloc if, une fonction qui teste si une variable enti`ere n est paire ou impaire.
function estpaire(n)
% Cette fonction affiche un message disant si l’argument n est pair ou impair.
% n est un entier
if mod(n,2) == 0 % Teste si le reste de la division
% Euclidienne par 2 est ´egal `a zero.
% Si c’est le cas,…
disp(’L’’argument est pair’) % …l’argument est pair.
elseif mod(n,2) == 1 % Si ¸ca n’est pas le cas, on teste si le % reste vaut 1. Si c’est le cas,…
disp(’L’’argument est impair’) % …l’argument est impair.
else % Si ¸ca n’est pas le cas,…
disp(’L’’argument n’est pas un entier’) % Le nombre fourni n’´etait pas un % entier.
end
6.3 Boucles – for … end
Une boucle for permet de r´ep´eter un groupe de commandes pour chaque ´el´ement d’une liste. La syntaxe est la suivante :
for k = liste % Une boucle for
[commandes] end
La variable k est appel´ee l’it´erateur. Matlab assigne successivement `a k toutes les valeurs dans le vecteur liste et ex´ecute `a chaque fois les commandes du bloc [commandes]. Le bloc de commandes `a r´ep´eter se termine obligatoirement par le mot cl´e end. Pour des raisons de lisibilit´e du programme, il est bon d’indenter le bloc de commandes dans la boucle for.
Voici un exemple, un script calculant le 12`eme nombre de Fibonacci. On rappelle que les nombre de Fibonacci fn sont d´efinis par la r´ecurrence fk+2 = fk+1 + fk, avec f1 = f2 = 1 :
% Calcul le 12`eme nombre de Fibonacci
fibk=1; % Le ki`eme nombre de Fibonacci fibkp1=1; % Le (k+1)i`eme nombre de Fibonacci fibkp2=1; % Le (k+2)i`eme nombre de Fibonacci for k = [1:10] % Une boucle pour r´esoudre la relation de
% r´ecurrence. k va de 1 `a 10 par pas de 1.
fibk = fibkp1; % Le ki`eme n.F. est le (k+1)i`eme n.F. du pas % pr´ec´edent, o`u k valait 1 de moins.
fibkp1 = fibkp2; % Le (k+1)i`eme n.F. est le (k+2)i`eme n.F. du
% pas pr´ec´edent.
fibkp2 = fibkp1+fibk; % La relation de r´ecurrence. Le dernier pas % de la boucle est effectu´e avec k = 10, donc % fibkp2 est le 12i`eme nombre de Fibonacci.
end % La commande end finit le bloc de commande
% que Matlab r´ep`ete dans la boucle.
fibkp2 % Affiche le r´esultat
On peut naturellement imbriquer des boucles for … end les unes dans les autres. Attention `a ne pas utiliser les variables [√ i] et [j] comme it´erateurs car ces variables repr´esentent
le nombre complexe −1.
6.4 Boucles – while … end
La commande while est similaire `a for, dans le sens qu’elle permet de r´ep´eter un bloc de commande. La diff´erence est qu’elle prend comme argument une variable bool´eenne. Tant que la variable bool´eenne est vraie, le bloc de commandes est r´ep´et´e. Lorsque la variable bool´eenne devient fausse, le programme ex´ecute les commandes suivant le mot-cl´e end. La syntaxe est la suivante :
while test % test est une variable bool´eenne. Tant que test est % vrai…
[commandes] % …ce bloc de commandes s’ex´ecute
end % Le mot cl´e end termine le bloc de commandes.
L’exemple ci-dessous affiche des matrices al´eatoires en boucle.
k=0; % k est une variable qui va augmenter de 1 lors de % chaque r´ep´etition du bloc while.
figure; % Ouvre une nouvelle figure
while k < 50 % Tant que k est plus petit que 50, le bloc % suivant s’ex´ecute.
k = k+1; % k est augment´e de 1. N´ecessaire pour que le % programme ne soit pas pris dans une boucle qui % se r´ep`ete infiniment.
A=rand(10,10); % Une matrice al´eatoire 10 x 10
imagesc(A); % Dessine la matrice sous la forme de carr´es color´es.
axis off equal; % Pour des axes `a la m^eme ´echelle et invisibles
drawnow; % Force Matlab `a dessiner `a chaque boucle et non % une seule fois `a la fin.
end % Termine le bloc de commandes while.
7 Exemple d’exercice r´esolu
Consid´erons l’exercice suivant :
Exemple d’exercice
1. Ecrire une commande qui donne une matrice 4×4 al´eatoire `a coefficients entiers (tir´es uniform´ement) compris entre -5 et 5.
2. Utiliser la commande pr´ec´edente 10 fois et calculer le d´eterminant de chacune de cesmatrices. Combien y-a-t-il de d´eterminants ´egaux `a 0?
3. Pouvez-vous expliquer cela?
Le m-file ExempleExerciceResolu.m est un exemple de solution, r´edig´e sous la forme exig´ee pour vos solutions. T´el´echargez-le sur moodle et ouvrez-le. Allez sous l’onglet Publish et cliquez sur le bouton Publish. Un document html apparaˆıt sur lequel vous pouvez lire la solution.
Les r`egles de bases pour commenter son code sont :
1. Tout script d´ebute par un bloc de commentaire expliquant la strat´egie g´en´erale utilis´ee pour r´esoudre le probl`eme. Utilisez le bouton Preformatted text sous l’onglet Publish pour cr´eer un bloc de commentaires.
2. Les noms des variables doivent d´ecrire explicitement leur fonction. Par exemple unevariable encodant une somme sera nomm´ee somme au lieu de x.
3. Les parties non-triviales du code doivent ˆetre comment´ees pour expliquer leur fonction.
Ajoutez une section pour chaque point num´erot´e de l’exercice (onglet Publish, Section with Title).
Gardez `a l’esprit que les assistants qui corrigeront vos travaux n’ont pas le temps de deviner ce que votre code fait ou est sens´e faire, c’est pourquoi il est indispensable de tout expliquer. Une solution sans commentaire vaut z´ero point, mˆeme si le code fonctionne. C’est une bonne id´ee de r´ediger vos exercices durant le laboratoire suivant le mod`ele ci-dessus est de les pr´esenter `a un assistant pour vous assurez qu’ils sont lisibles et corrigeables.
8 S´erie d’exercices
8.1 Exercices
Exercice 1 Op´erations sur les vecteurs. On d´efinit
;
Calculez, quand c’est possible, les expressions suivantes en utilisant les commandes pr´esent´ees dans la Section 3. Lorsqu’une expression n’a pas de sens, expliquez pourquoi dans votre m-file sous la forme d’un commentaire.
1. q − r, q + 3v, s + 3t − u.
2. hq|ri, hs|si − 2hs|ti − hs|ui, hs|vi, hv|wi, hv|vi, ou` hq|ri repr´esente le produit scalaire entre q et r.
3. kvk, ksk2.
Exercice 2 Diff´erence entre A*B et A.*B. Trouver deux matrices inversibles de taille 3 × 3 A et B telles que A.*B = 0. Est-ce possible (du point de vue math´ematique) pour le produit matriciel standard?
Exercice 3 Figures g´eom´etriques (Exercice difficile). Au moyen de la fonction plot, dessinez les figures g´eom´etriques suivantes :
1. un carr´e;
2. un polygone r´egulier `a n cˆot´es (posez-vous la question de savoir comment d´ecrire la position des sommet d’un tel polygone);
3. un carr´e, pench´e d’un angle de 30◦ par rapport `a l’horizontale;
4. un pentagone ´etoil´e (pentagramme);
5. un cercle.
Dans le cas du polygone r´egulier, votre script doit admettre le nombre de cˆot´es n comme un param`etre ajustable.
Exercice 4 Graphes de fonctions.
1. Tracez le graphe de toutes les fonctions suivantes sur la mˆeme figure (Voir la Section
4.1) :
x 7→ xx ; x 7→ 3;
;
2. A l’aide de ce graphique, estimez la solution des ´equations suivantes log3 x.
3. (Facultatif) D´emontrez analytiquement (donc sans Matlab) que ces deux solutions co¨ıncident.
Exercice 5 R´esolution matricielle de syst`emes lin´eaires. R´esolvez matriciellement les syst`emes d’´equations lin´eaires suivants (voir Section 3.3). Si Matlab affiche un message
d’erreur ou un avertissement, expliquez pourquoi.
1.
6x + y − 5z = 6
2x + y + 3z = 11
4x
2. − 9y + 7z = 12
6x + y − 7z = 10
2x + 2y + 3z = 2
8x
3. + 3y − 4z = 12
x + 2y + 3z + 4t = 1
2x + 3y + 4z + t = −2
−2x + 4y − 5z + 2t = 0
8x + y − z + 3t = 1
Exercice 6 Spectre d’une application lin´eaire (Exercice difficile. Si vous avez des questions sur les d´efinitions d’alg`ebre lin´eaire, n’h´esitez pas `a demander aux assistants.). On donne une application lin´eaire T par la matrice suivante
1. D´eterminez le noyau de T, ainsi que sa dimension. Indication : Matlab a une fonction null qui peut ˆetre utile, voyez l’aide.
2. D´ecrivez l’orthogonal H du noyau de T.
3. Ce sous-espace H est-il invariant par l’application lin´eaire T ? V´erifiez votre r´eponse avec Matlab.
4. D´eterminez le spectre de cette application, ainsi que les vecteurs propres associ´es.
5. Construisez une base orthonorm´ee form´ee de vecteurs propres, si c’est possible. Sinon,expliquez pourquoi.
6. Soit P(x) = x2 + 2x + 1, on d´efinit l’application P(T) = T2 + 2T + Id, ou` Id est la matrice identit´e de taille 4 × 4. D´eterminez le spectre de P(T). Quelle est la relation entre le spectre de P(T) et le spectre de T ?
Exercice 7 Extraction de la diagonale. Soit A une matrice carr´ee. Construisez une matrice diagonale B ayant la mˆeme diagonale que A. Autrement dit, votre code doit transformer
en .
Indication : En utilisant judicieusement une fonction de Matlab, ceci est possible en une seule ligne de code.
Exercice 8 Matrice de Vandermonde. Ecrire une fonction qui prend en param`etre un´ entier n et qui construit la matrice ci-dessous.
1 1 1 ··· 1 1 1
1 2 3 ··· (n − 2) (n − 1) n
1 22 32 ··· (n − 2)2 (n − 1)2 n2
… … … … … … …
1 2n−3 3n−3 ··· (n − 2)n−3 (n − 1)n−3 nn−3
1 2n−2 3n−2 ··· (n − 2)n−2 (n − 1)n−2 nn−2
1 2n−1 3n−1 ··· (n − 2)n−1 (n − 1)n−1 nn−1
Mettez votre fonction dans un script qui l’utilise pour afficher la matrice de Vandermonde de taille 5 × 5.
Exercice 9 Changement de bases (Exercice difficile mais important). On suppose donn´e
1. une matrice m × k repr´esentant une application lin´eaire de Rk dans Rm relativement aux bases canoniques;
2. deux bases de Rk et de Rm, donn´ees en composantes relativement aux bases canoniques,
i.e. sous la forme de matrices de taille k × k et m × m.
Ecrivez une fonction qui accepte ces trois matrices comme variables d’entr´ee, et qui retourne la matrice de l’application lin´eaire relativement aux nouvelles bases.
Exercice 10 Applications lin´eaires entre espaces de polynˆomes (plus difficile et facultatif).
D´esignons par Pn l’espace vectoriel des fonctions polynomiales de R dans R de degr´e ≤ n.
1. Pour p,q ∈ Pn deux fonctions polynomiales, nous d´esignons par r(p,q) le reste de la division euclidienne de p par q. Consid´erons l’application lin´eaire
.
Ecrivez une fonction qui prend comme param`etre un entier´ n et qui renvoie la matrice MR de l’application R dans la base B = {1,x,x2,…,xn}.
Indication : Ecrivez tout d’abord la matrice de l’application R dans la base
B˜ = {1;x;x2 + 1;x(x2 + 1);x2(x2 + 1);···;xn−2(x2 + 1)}
et utilisez les matrices de changements de bases ), pour exprimer la matrice de R dans la base B.
2. A l’aide de` MR, calculez le reste de la division par x2 + 1 des polynˆomes suivants : (a) 7×8 + 411×7 − 231×5 + 31×4 + 451×3 − 10x − 42;
.
3. Consid´erons l’application lin´eaire d´eriv´ee :
.
Ecrivez la matrice Md de l’application d dans la base B. Quels sont les valeurs propres et les vecteurs propres de l’application d?
4. Calculez les matrices des applications d ◦ R et R ◦ d dans la base B. Que remarquezvous?




Reviews
There are no reviews yet.