L3algeff 2018-19 public
Algorithme de réduction des matrices
Algorithmes de Gauss et de Smith
1-Matrices en Sage
En Sage, on définit des matrices comme suit:
ou comme suit:
Ou encore:
On obtient la taille d'une matrice comme suit:
Le test d'égalité marche...
Définir quelques matrices spéciales:
Par blocs...
Pour extraire des sous-matrices:
2-Pivot de Gauss
Pour échelonner une matrice (en lignes), Sage a une fonction déjà codée:
Attention: le résultat que l'on obtient est une matrice immuable: on ne peut pas changer ses valeurs.
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-1627321a9699> in <module>()
----> 1 C[Integer(1),Integer(1)]=Integer(3)
/ext/sage/sage-8.4_1804/local/lib/python2.7/site-packages/sage/matrix/matrix0.pyx in sage.matrix.matrix0.Matrix.__setitem__ (build/cythonized/sage/matrix/matrix0.c:8401)()
1372 # If the matrix is immutable, check_mutability will raise an
1373 # exception.
-> 1374 self.check_mutability()
1375
1376 if type(key) is tuple:
/ext/sage/sage-8.4_1804/local/lib/python2.7/site-packages/sage/matrix/matrix0.pyx in sage.matrix.matrix0.Matrix.check_mutability (build/cythonized/sage/matrix/matrix0.c:5331)()
382 """
383 if self._is_immutable:
--> 384 raise ValueError("matrix is immutable; please change a copy instead (i.e., use copy(M) to change a copy of M).")
385 else:
386 self._cache = None
ValueError: matrix is immutable; please change a copy instead (i.e., use copy(M) to change a copy of M).
Si l'on veut l'éditer, il faut en créer une copie:
On a déjà des fonctions codées pour les opérations sur les lignes et les colonnes:
La fonction echelon_form de Sage ne donne pas la matrice de passage...
Soit une matrice. On a vu en cours qu'il est très utile de disposer de matrices inversibles et telles que soit "diagonale". Il y a une fonction prédéfinie dans Sage qui réduit selon les lignes et selon les colonnes et renvoie les matrices de passage: c'est la fonction smith_form().
Dans un premier temps, vous pouvez utiliser cette fonction. Vous pourrez la coder vous-même à la fin de la séance.
Exercice 1: Soient les vecteurs de ci-dessous.
a)Donner un système d'équations pour le sous-e.v. de engendré par ces vecteurs
Pour trouver un système d'équations vérifiées par ces 4 vecteurs, on utilise la méthode présentée en td: on les met dans une matrice, on calcule le forme de Gauss et on lit le résultat dans la matrice de passage...
Pour une matrice à coefficients rationnels, la fonction Smith_form() calcule la forme de Gauss avec les matrices de passage.
On lit que est de rang 4: il faut donc trouver 10-4=6 équations. Les coefficients de ces équations sont dans les 6 dernières lignes de .
On vérifie notre résultat:
b) Donner une base de l'intersection de l'ev précédent avec l'hyperplan .
On rajoute cette équation aux précédentes (celles de E) dans une matrice
est de rang 7, donc l'équation rajoutée n'est pas combinaison linéaire des précédentes (ce n'est pas très surprenant: les vecteurs de départ ne vérifiaient pas cette équation!). On cherche une base du noyau de qui est donc de dim 3. D'après le td, on lit cette base dans les colonnes de .
Ces 3 colonnes forment une base du noyau de . Vérifions le:
3-Réduction des matrices entières
Exercice 2: Soit la matrice entière suivante.
a) Appliquez lui pas à pas, en utilisant les fonctions prédéfinies, les suites d'opérations élémentaires comme dans l'algorithme présenté en cours.
C'est bon: A est sous la forme d'une matrice diagonale. On vérifie que Sage est d'accord avec nous...
N.B. En sage, l'algorithme présenté en cours est aussi codé dans la fonction smith_form lorsqu'on l'utilise sur une matrice à coefficients entiers.
b) A quelle conditions sur les entiers existe-t-il des entiers tels que l'on ait ?
On cherche les "équations" de l'image. On les trouve toujours grâce à la matrice de passage "P" dans la forme de Smith. Plutôt que d'utiliser celle que me fournit Smith_form(), je récupère la "mienne" en faisant sur la matrice identité les mêmes opérations sur les lignes.
On trouve l'équation
N.B.: En utilisant la matrice de Sage, on touverait plutôt l'équation Qui a tort, qui a raison? Les deux, bien entendu: en multipliant cette de Sage par -5 (qui est inversible dans ) on trouve la mienne ().
Exercice 3 a)Exhiber une matrice inversible dans vérifiant pour un entier convenable.
Donc , et est la matrice ci-dessus.
b)En déduire une -base du noyau de l'application , .
Elles se lit dans les colonnes de . Ce sont les 3 dernières colonnes de cette matrice.
c)Puis un repère affine des solutions entières de l'équation .
Les solutions s'obtiennent en ajoutant une solution particulière à la solution générale de l'équation homogène trouvée à la question précédente. On trouve une solution particulière à partir d'une solution particulière de , à savoir (3,0,0,0).
La solution générale est donc de la forme:
Exercice 4 (examen 2017) Donner une base du groupe abélien formé des éléments de qui sont combinaisons linéaires à coefficients rationnels des deux vecteurs et .
Comme d'habitude, on résout cette question en se ramenant au cas d'une matrice diagonale en utilisant Smith.
Pour la matrice d, une base de l'image entière est et ) (où est le ième vecteur de la base canonique). Les cominaisons rationnelles qui restent entières sont les combinaisons linéaires entières de et . Comme , on en déduit qu'une base entière est formée des 2 premières colonnes de .
Programmation
Exercice Programmez une fonction analogue à smith_form:
a)pour les matrices rationnelles
b)pour les matrices entières
Vérification que cela marche bien