Tutoriels MATLAB
Veuillez ouvrir le fichier ".m" en MATLAB, puis cliquer "Run" (et si MATLAB vous le demande, choisir oui: "add to path"). Chaque tutoriel est interactif, et vous introduira aux diverses fonctions et opérations utiles en MATLAB.
- IntroMatlab1.m : les commandes de base, et quelques embûches à éviter !
- MATLABloops.m : les boucles (aussi dit : comment qu'on insiste que MATLAB répète son travail sans qu'on le lui demande à nouveau chaque fois).
- MATLABifthen.m : les conditions (aussi dit : comment qu'on introduit une bifurcation dans un programme en MATLAB).
- MoinCarr.m : la méthode de moindres carrées pour choisir une solution approximative en MATLAB. Ce tutoriel comprend également une introduction aux graphiques en MATLAB.
- vecprop.m : les vecteurs propres en MATLAB, et plusieurs embûches à éviter avec les fonctions de base.
- Jordanalamain.m : comment recréer les calculs nécessaire pour évaluer la forme de Jordan d'une matrice, sans faire appel au "Symbolic Math Toolbox".
- svdinteractive.m : une application de la décomposition en valeurs singulières. Ce tutoriel vous aidera à rendre votre image .jpg en matrice, puis obtenir son approximation (une compression d'image) avec la décomposition en valeurs singulières.
- gershdisc.m : un petit programme (pas le mien!) qui détermine les cercles de Gershgorin d'une matrice quelconque, et puis trace ces disques et les valeurs propres actuelles dans le plan complexe. Vous pouvez ajuster le programme à vos besoins.
Vos commentaires sur ces tutoriels, ainsi que des suggestions d'ajouts ou d'amélioriations, seront appréciés.
Devoir 5
Voici le devoir 5, à remettre mardi le 4 avril. Veuillez retourner à ce site pour voir les commentaires et tutoriels que je produis en fonction de vos questions sur le devoir.
Voici une fonction MATLAB qui trace l'ellipse qui est l'image du cercle transformé par la matrice A.
Voici une fonction MATLAB qui prend un image quelconque comme argument et vous donne ses approximations par la méthode de valeurs singulières (tiré du tutoriel "svdinteractive").
Devoir 4
Voici le devoir 4, à remettre mardi le 21 mars. Veuillez retourner à ce site pour voir les commentaires et tutoriels que je produis en fonction de vos questions sur le devoir.
Par rapport à la question 5: l'objectif est d'observer l'instabilité de la forme de Jordan. Si vous n'avez pas le Symbolic Math Toolbox, il suffit de générer un exemple pour lequel MATLAB croit que ses valeurs propres sont distinctes (tandis que vous saviez bien qu'ils ne le sont pas). Pour ça, la fonction standard eig(A), et un peu de discussion et comparaison, suffit. Conseil: utiliser format long e quand vous voulez voir plus que 5 décimales!
Aussi, j'aurais dû dire norme au lieu de taille : on veut comparer les calculs différentes des puissances de A donc c'est bon de tout simplement prendre la norme des différences pour faire un jugement.
Devoir 3
Voici les solutions au devoir.
Voici la version le plus à jour (24 fév) : à remettre le 7 mars. Voici dev3q4.csv, les données pour la dernière question. J'ai ajouté des explications et une partie à la dernière question et aussi modifié 4(d). Veuillez noter que votre réponse à cette question sera beaucoup plus courte que la question!
Voici quelques indices, commentaires ou clarifications qui proviennent de vos questions cette semaine. Vous pouvez utiliser ces faits dans votre devoir!
- Rappel: P est la matrice de la projection orthogonale sur un espace \(U \subseteq \mathbb{C}^n\) ssi pour tout \(v\in \mathbb{C}^n\) on a (i) \(Pv\in U\) et (ii) \(v-Pv\) est orthogonale à \(U\).
- Ou bien, ce qui est équivalent: P est la matrice de la projection orthogonale sur un espace \(U \subseteq \mathbb{C}^n\) ssi (i) pour tout \(v \in U\), \(Pv = v\) et (ii) pour tout \(v \in U^\perp\), \(Pv=0\).
- Si A est une matrice complexe, alors \(\overline{A}\) est la matrice dont on a remplacé chaque élément avec son conjugué complexe. Puisque pour tout \(z,z' \in \mathbb{C}\), \(\overline{z+z'}=\overline{z}+\overline{z'}\) et \(\overline{zz'}=\overline{z}\overline{z'}\), il en suit que \[\det(A)=\det(\overline{A})=\det(\overline{A}^T).\] Pour cette dernière égalité, on se rappelle que \(\det(A)=\det(A^T)\).
- Si A et B sont deux matrices avec le même nombre de lignes, alors leurs espaces Col(A) et Col(B) sont orthogonales ssi le produit scalaire de chaque colonne de A avec chaque colonne de B donne 0, qui revient à dire que \(\overline{A}^TB = 0\).
- Rappel: Le complément orthogonale de l'espace colonne de A est le noyau de \(\overline{A}^T\). C'est une version du théorème de rang et nullité. Démonstration: soit x dans le noyau de \(\overline{A}^T\). Alors \(\overline{A}^Tx=0\), donc toute ligne de \(\overline{A}^T\) fois la colonne x donne 0. Mais c'est la même chose que dire que les colonnes de A sont orthogonales à x par le produit scalaire. Donc \(Noy(\overline{A}^T) \subseteq Col(A)^\perp\). Posons \(U=Col(A)\). Si \(U \subseteq \mathbb{C}^n\) alors \(dim(U^\perp)=n-\dim(U)\). De plus, \(rang(A)=rang(\overline{A}^T)\), alors \(dim(Noy(\overline{A}^T)) = n-rang(A)\). Donc par dimension, \(Noy(\overline{A}^T) = Col(A)^\perp\).
- Si A n'est pas une matrice carrée, alors on n'utilise pas la notation \(A^{-1}\) pour son inverse à gauche ou à droite (si une de ces inverses existe). La notation \(A^{-1}\) est reservée pour une matrice carrée inversible car on a bien vu que les matrices strictement rectangulaires ont une infinité d'inverses partielles si elles en ont une, et donc c'est impossible de choisir une seule et la distinguer par le nom \(A^{-1}\).
- Donc: si A et B sont matrices rectangulaires dont leur produit AB est une matrice carrée inversible, alors \((AB)^{-1}\) existe mais n'est pas égale à \(B^{-1}A^{-1}\) car ce dernier n'est pas bien défini. Dans ce devoir, on n'a aucunement besoin de dévélopper une expression de la forme \((AB)^{-1}\) ; tout ce qu'on a besoin de reconnaître, c'est que \(AB(AB)^{-1}=I\) et \((AB)^{-1}AB=I\), qui n'est que la définition de l'inverse de la matrice AB.
Devoir 2
Voici le deuxième devoir (avec quelques indices additionnelles) qui consiste d'une composante écrite et une composante électronique. Veuillez soumettre la partie électronique via Blackboard Learn. Il y a plusieurs petites modifications, la dernière datant du 7 février vers midi. Si vous avez déjà complété une question, vous n'avez pas à la refaire (eg la dernière, qui est la plus changée).
Voici quelques fichiers MATLAB qui vous seront utiles: dev2q2.m, dev2q2a.m, dev2q3.m, lu_nopivot.m.
Et voici quelques indices comment produire un programme de la sorte que vous en avez besoin:
- Commencez avec dev2q2.m. Vous voyez que chaque ligne vient avec un petit commentaire, indiquant sa role dans le programme. Ce programme n'est qu'un ébauche: il produit, l'une après l'autre, les matrices de permutation de la taille de la matrice que vous avez au départ.
- Maintenant, qu'est-ce que vous voulez faire? Selon le critère d'avoir une décomposition L-U, vous voulez savoir si toutes les mineures sont nonnulles.
- Le fichier dev2q2a.m donne une approche, mais voici une approche directe. Vous pouvez penser ainsi: soient Bn la n-ième mineure. Pour être une bonne matrice, il va falloir que \(B_1\), \(det( B_2)\) et
\(det(B_3)\) soient toutes nonnulles. Donc c'est une condition qu'on peut coder en MATLAB:
if condition
bon = bon + 1;
end;
- Comment coder la condition? On obtient l'élément (1,1) de la matrice avec B(1,1). On obtient la sous-matrice B2 avec B(1:2,1:2) (comme au dev2q3.m). On obtient de déterminant avec det(C).
- La condition: est-ce que D=0 s'écrit : if D==0
- La condition: est-ce que D est nonnul s'écrit : if D~=0
- Pour avoir plusieurs conditions, on peut soit les joindre avec && (pour "et") et || (pour "ou"):
if D~=0 && E~=0
bon = bon+1;
end;
- Ou bien, on peut faire en étapes:
if D==0 %donc, avancer si D=0, sinon, passer à la ligne après le end associé à cet if
if E==0 %avancer encore ssi E=0
(faites quelque chose), par exemple,
mal=mal+1; %cette ligne ne serait faite que si D=0 et E=0
end; %la fin de la section pour le critère E=0
end; %la fin de la section pour le critère D=0
- Le programme fait chaque boucle pour chaque matrice de permutation, mais votre variable (bon ou mal, selon votre choix) augmentera uniquement quand le programme arrive à cette ligne.
- Vous pouvez éliminer la première ligne du dev2q2.m; il faut juste taper votre matrice dans la fenêtre.
- Et voici un fichier additionnel pour la question 1: dev2q1.m! (Le nom du fichier devrait être égale au nom de la fonction pour bien marcher dans Matlab, pardon: donc le fichier s'appelle lu_nopivot.)
Devoir 1
Voici le premier devoir, qui consiste d'une composante écrite et une composante électronique. Veuillez soumettre la partie électronique via Blackboard Learn.
Voici un fichier Homework1Matlabfuncts.txt avec quelques commandes utiles pour le premier devoir (en MATLAB).
Voici en format .txt Devoir1B3.txt et en format .m devoir1qB3.m le programme pour la troisième question de la partie B du devoir.