M0SE 1003 TP d algèbre sur Scilab : Matrices, test "if-then-else" TP 2 Essayez les commandes, observez les réponses de Scilab, répondez aux questions, puis effectuer les exercices. Création de matrices -->x=[1,5,3,-5,%pi/6] -->x -->A=[-2,%i,5;3,-1,-1] -->y=[ones(1,5)] -->ones(4,5) -->z=[zeros(1,5)] -->zeros(5,4) -->y -->y=3*y -->y -->B=3*A+2*ones(2,3) -->C=B-A 1) Quelle différence y a-t-il entre x et x? 2) A quoi sert le " ;" dans A? 3) Que fait la commande ones? Comment fonctionne-t-elle? Créez une matrice de 6 lignes et 4 colonnes dont tous les coefficients sont égaux à 1. 4) Mêmes questions pour la commande zeros. Créez une matrice de 4 lignes et 6 colonnes dont tous les coefficients sont égaux à 0. -->X=[x y z] -->M=[x;y;z] -->M(1,2) -->clear x -->x=[1,%i,-5,%pi,3] -->M -->M=[x;y;z] Remarque : pensez à utiliser la flèche du curseur pour gagner un peu de temps lorsque vous utilisez la même commande avec peu de changements. Attention à ne pas cliquer trop vite sur "Entrée"... 4) Quelle différence y a-t-il entre X et M? 5) que fait la commande M(1,2)? Que ferait la commande M(2,4)? Vérifiez. 6) Quelle différence y a-t-il entre l avant-dernière et la dernière ligne? -->size(x) -->size(m) -->x -->size(x ) -->M -->size(m ) --> eye(1) --> eye(2) --> eye(2,2) --> eye(2,3) 7) Qu indique la commande size? 8) En comparant M et M, dîtes ce que fait le. 9) Que fait la commande eye? Écrivez une matrice de 2 lignes et 4 colonnes avec des 1 sur la diagonale principale. 1
-->A=[-2,3;1,2] -->A*A -->A.*A -->A^2 -->A.^2 -->x=[1,-2,3] -->1/x -->1./x -->x^(-1) -->x.^(-1) Question : 10) Quelle ligne de commande affiche le produit matriciel A A? Qu effectue l autre ligne de commande? NB : Notez bien la commande pour demander à Scilab de calculer l inverse de chaque coefficient du vecteur : c est celle avec un exposant et non la barre de fraction! Exercices : 1) Écrire le vecteur u = [e, i, π, ( ) 1 5 3 2, π/6]. Écrire la matrice. 2 7 9 2) Créer une matrice de 3 lignes et 5 colonnes dont la première ligne est composée de 2, la deuxième de 0 et la troisième des nombres e, i, π, 2 et π/6. 3) Créer une matrice carrée de taille 5 avec des -1 sur la diagonale et des 2 partout ailleurs. Inversion de matrices, test "if-then" Déterminant et inverse d une matrice Dans le cours, nous avions vu le déterminant d une matrice 2x2. Cela nous permettait de savoir si la matrice est inversible ou non. De façon générale, on peut calculer le déterminant d une matrice carrée de taille n n. Si celui-ci est non-nul alors la matrice est inversible, sinon elle ne l est pas. Comme le calcul devient vite très long, voire compliqué, les logiciels de calcul sont très utiles pour effectuer le calcul : -->A=[5,-4,3;-8,2,1;-6,7,-3] -->B=[1,-6,4,8,-1;5,7,-9,2,-2;1,5,1,3,4;.. -->1,-4,5,2,1;-5,-8,3,-7,9] -->det(b) -->A^{-1} -->A^{-1}*A -->B^{-1} -->det(b)*inv(b) NB :Les 2 points en fin de ligne permettent d indiquer à la console que la ligne n est pas fini. C est utile lorsqu il faut rentrer une longue sequence. Vous pouvez utiliser indifféremment les commandes "A^{-1}", "A^(-1)" ou "inv(a)" pour calculer l inverse de A. Vous pouvez admirer la rapidité avec laquelle Scilab calcule l inverse d une matrice... Question : Que remarque-t-on pour le calcul de A 1 A? Les erreurs : Que dit Scilab lorsqu une matrice n est pas inversible et qu on lui demande de l inverser : -->A=[1,2,3;4,5,6] -->A=[1,1;2,2] Exercice : Écrivez en la nommant la matrice inverse. ( 1 5 2 7 ), vérifiez si elle est inversible, et si c est le cas, calculez son 2
Test "if-then" Le test "if-then" est une programmation qui demande à Scilab d effectuer une tâche si une condition est réalisée. -->A=[-1,2;3,2] -->if det(a)<>0 then, B=inv(A), end; Remarque : le symbole <> signifie "différent de" ; cela correspond à notre symbole. Question : Que fait ce programme? Entrez et regardez ce que fait la procédure suivante : -->A=[3,-2;5,4] -->if det(a)<>0 then, B=inv(A), else printf( A est non inversible ); end; -->A=[1,1;2,2] -->if det(a)<>0 then, B=inv(A), else printf( A est non inversible ); end; Résolution de systèmes linéaires On a vu au chapitre 2 que l on peut écrire un système linéaire sous forme matricielle Ax = b où A est une matrice, x le vecteur colonne des inconnues, et b le vecteur colonne du second membre. On va voir comment on peut utiliser Scilab pour résoudre des systèmes dans le cas où A est une matrice carrée. On a évoqué dans le cours que si A est inversible, alors le système admet une unique solution donnée par x = A 1 b. On vient de voir comment faire pour vérifier si une matrice est inversible et comment demander son inverse (s il existe) à Scilab. Essayez les commandes suivantes : -->A=[1,2;1,1] -->b=[3;5] -->A\b -->linsolve(a,b) Attention : la commande "A\b" résout : Ax = b tandis que la commande "linsolve(a,b)" résout Ax + b = 0! -->B=[1,1;2,2] -->det(b) -->linsolve(b,b) -->b=[2;4] -->[x0,u]=linsolve(b,b) -->linsolve(b,b) -->kernel(b) NB : La matrice B n étant pas inversible, le système Bx + b = 0 admet aucune ou une infinité de solutions ; cela dépend de b. Avec b = [2; 4], le système a une infinité de solutions. La commande -->[x0,u]=linsolve(b,b) affiche une solution que l on note ici x0 et un vecteur directeur noté ici u. Question : Résolvez les systèmes linéaires suivants à l aide de Scilab : si le déterminant est nul, faîtes afficher une solution (si elle existe) et le(s) vecteur(s) directeur(s). x + y + z = 1 2y + 3z = 2 x y = 0 Que constate-t-on pour le dernier système? x y + z = 1 2x + z = 2 3x + y + z = 0 x + y + z = 1 2x + 2y + 2z = 2 3x + 3y + 3z = 3 3
Diagonalisation de matrices On a vu au chapitre 6 ce qu on appelle la diagonalisation de matrices, pour des matrices de taille 2 2. Cela peut se faire pour une matrice carrée de taille quelconque, si celle-ci vérifie certaines conditions. Là encore, les logiciels de calcul sont pratiques pour diagonaliser des matrices de grandes tailles. Nous nous limitons ici à des matrices de taille 3 3. Un des aspects très importants de la diagonalisation, est de connaître les valeurs de la matrice diagonalisée. Celles-ci s appellent "valeurs propres" et l ensemble des valeurs propres s appelle "le spectre" de la matrice. Pour rappel, les valeurs propres correspondent aux racines d un certain polynôme. Dans Scilab, pour connaître le spectre de la matrice, on utilise la commande "spec(.)". -->A=[2,0;-3,1] -->spec(a) -->B=[-2,0;0,3] -->spec(b) -->A=[11,-5,5;-5,3,-3;5,-3,3] -->spec(c) La commande dans Scilab pour obtenir la matrice diagonalisée D est "bdiag(.)". Avec cette commande, on peut aussi obtenir une matrice de passage P. Pour rappel, c est une matrice de vecteurs propres associés aux valeurs propres correspondantes. Essayez les lignes de commandes suivantes : -->bdiag(a) -->[D,P]=bdiag(A) -->inv(p)*a*p -->P*D*inv(P) -->[D,P]=bdiag(C) -->inv(p)*c*p Exercice Demandez le spectre de la matrice A1, puis calculez à l aide de Scilab la matrice de passage que l on nommera P1 2 0 1 et la matrice diagonalisée D1 : A1 = 1 1 1. 2 0 1 0 1 0 ( ) Mêmes questions avec A2 = 1 0 1 1 2 et A3 =. 3 2 0 1 0 Bonus : Boucle "for" Une boucle est une commande qui demande à Scilab d exécuter plusieurs fois la même instruction. -->for x=1:6 -->x^2 On peut imbriquer des boucles. Elles sont exécutées de l intérieur vers l extérieur (penser aux parenthèses lorsque nous calculons). -->for i=1:5 -->for j=1:5 -->A(i,j)=i+j; -->A 1) Que fait cette procédure? 2) Que se passe-t-il si on enlève le " ;" à la fin de la ligne "A(i,j)=i+j"? Exercice : Créez une matrice de 4 lignes et 3 colonnes dont le coefficient en case (i,j) est égal à i 2 + j. FIN du TP2 4
On peut aussi rajouter un test : -->for i=1:5 -->for j=1:5 -->if i>=j then, A(i,j)=i+j; else A(i,j)=0;end; -->A 3) Que se passe-t-il si on écrit "for i=1 :3" au lieu de "for i=1 :5" dans cette procédure? 4) A quoi correspond alors i? Et j? 5