Création de matrices

publicité
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
Questions :
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"...
Questions :
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)
Questions :
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 −5 3
1) Écrire le vecteur u = [e, i, π, 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]
-->det(A)
-->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}
-->inv(A)
-->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]
-->det(A)
-->inv(A)
-->A=[1,1;2,2]
-->det(A)
-->inv(A)
Exercice : Écrivez en la nommant la matrice
1 −5
−2 7
, vérifiez si elle est inversible, et si c’est le cas, calculez son
inverse.
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 6=.
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]
-->det(A)
-->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
existe) et le(s) vecteur(s) directeur(s).


 x+y+z = 1
 x−y+z =
2y + 3z = 2
2x + z
=


x−y
= 0
3x + y + z =
Que constate-t-on pour le dernier système ?
Scilab : si le déterminant est nul, faîtes afficher une solution (si elle
1
2
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
1 2
.
Mêmes questions avec A2 =  1 0 1  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
-->end;
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;
-->end;
-->end;
-->A
-->det(A)
Questions :
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 à i2 + 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;
-->end;
-->end;
-->A
-->det(A)
-->inv(A)
Questions :
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
Téléchargement