In [4]: ####################################################################
# TP numéro 3 : Facteurs invariants et invariants de similitude #
####################################################################
In [5]: #---
# Exercice 1
#---
# Question 1.
# ---
M=matrix(ZZ,[[-2,-4,26],[4,14,14],[-4,-8,22],[2,4,4]]) ; show("M=",M,"est une matrice de l'anneau ",M.parent())
show("La methode 'elementary_divisors()' donne les diviseurs")
show("elementaires du conoyaux de l'application definie par une matric e")
show("Ce ne sont donc pas exactement les facteurs invariants de la matr ice :")
show("Il peut y avoir des termes nuls supplementaire correspondants a l a ")
show("partie nulle du conoyau (car Z/0Z=Z)")
M= est une matrice de l'anneau (Z)
⎛
⎝
⎜ ⎜
⎜
−2 4
−4 2
−4 14
−8 4
26 14 22 4
⎞
⎠
⎟ ⎟
⎟ Mat
4×3La methode 'elementary_divisors()' donne les diviseurs
elementaires du conoyaux de l'application definie par une matrice
Ce ne sont donc pas exactement les facteurs invariants de la matrice
Il peut y avoir des termes nuls supplementaire correspondants a la
partie nulle du conoyau (car Z/0Z=Z)
show("On a : M.elementary_divisors()=",M.elementary_divisors())
show("Cela signfie que, si f:Z^3 --> Z^4 est l'application definie par M")
show("alors (Z^4)/Im(f)=Z/2Z x Z/6Z x Z/30Z x Z/0Z (avec Z/0Z=Z)\n\n") show("Soit maintenant tM la matrice transposee de M, on a :")
show("tM.elementary_divisors()=",(M.transpose()).elementary_divisors()) show("Cela signfie que, si tf:Z^3 --> Z^4 est l'application transposee de f (ou on a identifie Z^n et son dual)")
show("alors (Z^3)/Im(tf)=Z/2Z x Z/6Z x Z/30Z")
In [7]: # Question 3.
# ---
D, L, R = M.smith_form()
show("La forme normale de Smith est : D=",D)
show("On a 'P*M*Q=",L*M*R,"=D, ou P=",L," et Q=",R)
On a : M.elementary_divisors()= [2, 6, 30, 0]
Cela signfie que, si f:Z^3 --> Z^4 est l'application definie par M alors (Z^4)/Im(f)=Z/2Z x Z/6Z x Z/30Z x Z/0Z (avec Z/0Z=Z)
Soit maintenant tM la matrice transposee de M, on a : tM.elementary_divisors()= [2, 6, 30]
Cela signfie que, si tf:Z^3 --> Z^4 est l'application transposee de alors (Z^3)/Im(tf)=Z/2Z x Z/6Z x Z/30Z
La forme normale de Smith est : D=
⎛
⎝
⎜ ⎜
⎜ 2 0 0 0
0 6 0 0
0 0 30 0
⎞
⎠
⎟ ⎟
⎟
On a 'P*M*Q= =D, ou P= et Q=
⎛
⎝
⎜ ⎜
⎜ 2 0 0 0
0 6 0 0
0 0 30 0
⎞
⎠
⎟ ⎟
⎟
⎛
⎝
⎜ ⎜
⎜ 1
−2
−13
−1 0 1 0 0
−1 2 14 1
0 0 0 1
⎞
⎠
⎟ ⎟
⎟
⎛
⎝ ⎜ 1
−1 1
−2 1 0
2 sur 7 13/04/2021 à 20:59
# Exercice 2
#---
# Question 1.
# ---
M=matrix(ZZ,[[40,28,10,17,8],[88,62,24,35,16],[36,25,6,16,8],[4,3,4,1, 0]])
show("M=",M,"est une matrice de l'anneau ",M.parent()) show("\n (cf. cours).")
In [27]: # Question 2.
# ---
show("La methode M.smith_form() nous donne :") D,P,Q=M.smith_form()
show("On a 'P*M*Q=D=",P*M*Q," ou P=",P," et Q=",Q)
M= est une matrice de l'anneau (Z)
⎛
⎝
⎜ ⎜
⎜ 40 88 36 4
28 62 25 3
10 24 6 4
17 35 16 1
8 16 8 0
⎞
⎠
⎟ ⎟
⎟ Mat
4×5(cf. cours).
La methode M.smith_form() nous donne :
On a 'P*M*Q=D= ou P= et Q=
⎛
⎝
⎜ ⎜
⎜ 1 0 0 0
0 1 0 0
0 0 2 0
0 0 0 0
0 0 0 0
⎞
⎠
⎟ ⎟
⎟
⎛
⎝
⎜ ⎜
⎜ 1 0
−1
−1 0 0 1 0
−1 1 0 1
0 0 0 1
⎞
⎠
⎟ ⎟
⎟
⎛
⎝
⎜ ⎜
⎜ ⎜
⎜ ⎜
−77 102
−3
15
0
B=P.inverse()
show("D'apres le cours, une base adaptee est donnee par les colonnes d e")
show("l'inverse de P : B=", B)
show("La base est donc : e1=",B[:,0],"e2=",B[:,1],"e3=",B[:,2],"e4=",B [:,3])
show("Pour les coefficients diagonaux non nuls de D :", D[0,0],",",D[1, 1],",",D[2,2])
D'apres le cours, une base adaptee est donnee par les colonnes de
l'inverse de P : B=
⎛
⎝
⎜ ⎜
⎜ 1 1 0 1
1 1 1 0
0 1 0 0
0 0 0 1
⎞
⎠
⎟ ⎟
⎟
La base est donc : e1= e2= e3= e4=
⎛
⎝
⎜ ⎜
⎜ 1 1 0 1
⎞
⎠
⎟ ⎟
⎟
⎛
⎝
⎜ ⎜
⎜ 1 1 1 0
⎞
⎠
⎟ ⎟
⎟
⎛
⎝
⎜ ⎜
⎜ 0 1 0 0
⎞
⎠
⎟ ⎟
⎟
⎛
⎝
⎜ ⎜
⎜ 0 0 0 1
⎞
⎠
⎟ ⎟
⎟
Pour les coefficients diagonaux non nuls de D :1,1,2
4 sur 7 13/04/2021 à 20:59
# Exercice 3
#---
show("Soit f une application Z-lineaire de Z^m --> Z^n. Le conoyau de f est Z^n/Im(f)")
show("Dans des bases bien choisies, la matrice de f est sous ") show("forme normale de Smith. Le conoyau s'en deduit aisement.")
show("\n Puisque M1 est deja sous forme normale de Smith, le conoyau es t :")
show("\t \t Z/2Z x Z/3Z x Z/4Z x Z")
M2=matrix(ZZ,[[5,0,5,0],[11,6,11,0],[12,0,19,0]]) D, L, R = M2.smith_form()
show("\n La forme normale de Smith de M2 est :",D) show("\t Le conoyau est Z/210.Z, puisque Z/1.Z={0}.")
In [35]: #---
# Exercice 4
#---
# Question 1.
# --- A.<X>=QQ['X']
show("L'anneau A = ",A)
Soit f une application Z-lineaire de Z^m --> Z^n. Le conoyau de f est Dans des bases bien choisies, la matrice de f est sous
forme normale de Smith. Le conoyau s'en deduit aisement.
Puisque M1 est deja sous forme normale de Smith, le conoyau est : Z/2Z x Z/3Z x Z/4Z x Z
La forme normale de Smith de M2 est :
⎛
⎝ ⎜ 1 0 0
0 1 0
0 0 210
0 0 0
⎞
⎠ ⎟ Le conoyau est Z/210.Z, puisque Z/1.Z={0}.
L'anneau A =Q[X]
N=matrix(QQ,[[2,4,-1],[2,9,-2],[3,12,-2]]) show("La matrice N vaut N=",N)
show("Elle appartient a\t ", N.parent()) S=X*identity_matrix(QQ,3)-N
show("La matrice S vaut S=",S)
show("Elle appartient a\t ", S.parent())
In [53]: # Question 3.
# ---
D,L,R=S.smith_form()
show("Les invariants de similitude de N sont les coefficients diagonaux non constants")
show("de la forme normale de Smith de S.") show("Le forme normale de Smith de S = ",D) P1=D[1,1]
P2=D[2,2]
show("Les facteurs invariants valent donc (", P1,",",P2,")") show("Il y a deux invarants, N n'est pas cyclique.")
La matrice N vaut N= ⎛
⎝ ⎜ 2 2 3
4 9 12
−1
−2
−2
⎞
⎠ ⎟ Elle appartient a Mat
3×3(Q)
La matrice S vaut S= ⎛
⎝ ⎜
X − 2
−2
−3
−4 X − 9
−12
1 2 X + 2
⎞
⎠ ⎟ Elle appartient a Mat
3×3(Q[X])
Les invariants de similitude de N sont les coefficients diagonaux non de la forme normale de Smith de S.
Le forme normale de Smith de S = ⎛
⎝ ⎜ 1 0 0
0 X − 1 0
0 0
− 8X + 7 X
2⎞
⎠ ⎟ Les facteurs invariants valent donc (X − 1, X
2− 8X + 7)
6 sur 7 13/04/2021 à 20:59
# --- Min=minpoly(N) Cha=charpoly(N)
show("Le polynome minimal vaut ",Min," qui est egal a P2=",P2)
show("Le polynome caracteristique vaut ",Cha," qui est egal a P1*P2=",P 1*P2)
In [64]: # Question 5.
# ---
N1=companion_matrix(P1) N2=companion_matrix(P2)
show("On obtient F=",block_diagonal_matrix(N1,N2))
In [71]: # Question 5.
# ---
show("La methode N.frobenius() ne marche pas car N est definie sur Q.") show("Elle fonctionne si on defini N sur Z")
N=matrix(ZZ,[[2,4,-1],[2,9,-2],[3,12,-2]]) N.frobenius()
Le polynome minimal vaut x
2− 8x + 7 qui est egal a P2= X
2− 8X + 7
Le polynome caracteristique vaut x
3− 9 x
2+ 15x − 7 qui est egal a P1*P2=
On obtient F=
⎛
⎝ ⎜
⎜ 1 0 0
0 0 1
0
−7 8
⎞
⎠ ⎟
⎟
Out[71]: [ 0 -7 0]
[ 1 8 0]
[ 0 0 1]