• Aucun résultat trouvé

II Matrices à coefficients entiers

N/A
N/A
Protected

Academic year: 2022

Partager "II Matrices à coefficients entiers"

Copied!
4
0
0

Texte intégral

(1)

TP n

9 — Les petits trucs des profs

* * *

I Les coefficients aux DS de Physique-Chimie

A Le problème à résoudre

Monsieur M. est professeur de Physique-Chimie. Aux devoirs surveillés, il évalue chaque question sur 6 puis calcule la note de l’élève en pondérant les questions selon un barème. Il ne communique pas ce barème aux élèves mais donne à chacun sa note totale ainsi que l’évaluation sur 6 pour chacune des questions. Les élèves ont décidé de trouver l’information manquante (le barème) à l’aide des informations disponibles (les évaluations de chaque élève à chaque question et les notes globales des élèves).

B Programmation du pivot de Gauss

Les questions de cette partie sont à résoudre sans consulter vos notes de cours.

Question 1 : Programmer une fonction transvection(A, i, k, t)qui prend en arguments une matrice A, deux numéros de lignes i et k et un réel t puis qui réalise la transformation LiLi+tLk sur place dans la matrice A.

Question 2 : Sur le même modèle que la question précédente, programmer la fonction echange(A, i, k) qui réalise l’échange de lignesLiLk etdilatation(A, i, t)qui réalise la dilatation Li ←tLi.

Question 3 : Écrire une fonction trouve_pivot(A, j)qui cherche le meilleur pivot possible dans la colonne j(à partir du coefficient situé sur la diagonale) puis qui réalise un échange de lignes afin de ramener le pivot en position(j, j). La fonction créera une erreur lorsqu’il n’y a aucun coefficient non nul pour servir de pivot.

Question 4 : Écrire une fonctionpivot(A, j) qui cherche le pivot dans la colonnej, le met en position (j, j)puis s’en sert pour annuler tous les coefficients de la colonne jde Asitués en dehors de la diagonale.

Question 5 : Écrire une fonction pivotComplet(A) qui prend en argument une matrice Aà n lignes et p colonnes (on suppose n>p−1) puis qui effectue toutes les étapes du pivot afin d’échelonner toutes les colonnes sauf la dernière. Après appel de cette fonction, la matrice A doit avoir la forme suivante :

A=

1 0 . . . 0 ∗ 0 1 . .. ... ...

... . .. ... 0 ...

0 . . . 0 1 ∗ 0 . . . . . . 0 ∗ ... ... ... 0 . . . . . . 0 ∗

n

np

(2)

Question 6 : Tester la fonction pivotComplet(A) sur la matrice A. Ci-dessous. Le résultat attendu est donné à droite :

A=

1 2 4 6 2 51 3 0 1 1 1 15 2 3 4 1 2 34 6 6 6 2 6 74 6 0 1 0 3 24 1 2 4 3 1 34 3 2 3 1 1 25

résultat :

1 0 0 0 0 1

0 1 0 0 0 2

0 0 1 0 0 3

0 0 0 1 0 4

0 0 0 0 1 5

0 0 0 0 0 0

0 0 0 0 0 0

NB : on peut utiliser la syntaxe np.round(A, 0) pour arrondir les coefficients de la matrice à l’entier le plus proche et obtenir un affichage plus lisible.

C Écriture du problème à résoudre sous forme de système linéaire

Revenons au problème du barème des devoirs de Monsieur M. Soientnle nombre d’élèves etple nombre de questions du devoir. Notonsyi la note globale de l’élève numéroi, etaij l’évaluation de l’élève numéro ià la question numéro j. Ces nombres sont connus. Notons xj le poids de la questionj dans le barème (information cachée). Alors, pour touti∈[[ 1 ;n]], on a :

yi= 1 6

p

X

j=1

aijxj et

p

X

j=1

xj = 20

On suppose que la somme des poids vaut 20, qui est la note maximale.

Les élèves peuvent donc découvrir le barème du professeur en résolvant un système linéaire.

D Résolution du problème

Les notes sont stockées dans des fichiers CSV (à télécharger dans le répertoire de la classe) selon le format suivant : chaque ligne correspond à un élève ; les nombres sont séparés par des virgules ; le dernier nombre de chaque ligne est la note globale de l’élève (sur 20) et les nombres précédents sont les évaluations de cet élève à chacune des questions.

Question 7 : Créer une fonction litTableau(fichier) qui prend en argument un nom de fichier CSV. Cette fonction va lire le fichier CSV puis créer la matrice A formée de la façon suivante :

les premières lignes correspondent chacune à un élève ;

pour chaque élève, la ligne contient les évaluations de l’élève à chaque question puis, dans la dernière colonne, la note globale de l’élève (rapportée sur 120).

la dernière ligne de la matrice contient l’évaluation d’une copie parfaite imaginaire (6 à chaque évaluation de question et note maximale).

Question 8: Créer une fonction trouveBareme(fichier) qui prend en argument un nom de fichier CSV et qui renvoie le barème du devoir correspondant.

(3)

II Matrices à coefficients entiers

Monsieur C. est enseignant de Mathématiques. Il connaît une propriété de MP qui dit : pour qu’une matrice inversible à coefficients entiers ait une matrice inverse également à coefficients entiers, il suffit que son déterminant vaille 1. On note Mn(Z) l’ensemble des matrices à coefficients entiers et SLn(Z) l’ensemble des matrices à coefficients entiers dont le déterminant vaut 1.

A Calcul du déterminant dans Mn(Z)

Si on prendA∈ Mn(Z), on sait que det(A) est un entier. Prenons par exemple la matrice

A=

18 13 4 15 45 23 12 13 −7

Grâce à l’importation suivante : import numpy.linalg as alg

on dispose des fonctions de l’algèbre linéaire, dont le calcul du déterminant. En saisissant la matriceA donnée en exemple ci-dessus, calculer alg.det(A). Qu’obtient-on ?

C’est un peu décevant puisque le résultat n’est pas entier, contrairement à ce qu’il devrait être.

On voit bien l’effet des erreurs d’arrondis. On va développer un algorithme exact permettant de calculer le déterminant d’une matrice deMn(Z) sans jamais sortir deMn(Z).

Question 9: Saisir le code suivant : def signeEchange(A, i, k):

transvection(A, k, i, 1) transvection(A, i, k, -1) transvection(A, k, i, 1)

Expliquer l’effet de l’appel signeEchange(A, i, k) sur la matrice A.

Question 10 : Si a, b ∈ Z et que b 6= 0, alors q = a//b calcule le quotient a

b

. Le reste r = abq a alors le même signe que b mais une valeur absolue strictement plus petite.

Considérons maintenant une matrice M dont deux coefficients de la même colonne valent a etb (on les a placés sur les deux premières cases de la matrice pour l’exemple) :

M =

a. . .b. . .

∗ ∗ . . . ∗ ... ... ...

∗ ∗ . . .

Que contiennent les deux premières cases de la matrice M après les opérations suivantes : transvection(A, 0, 1, -q)puissigneEchange(A, 0, 1)? Expliquer pourquoi, en répétant les opérations qu’on vient de décrire, on peut obtenir

M =

c. . . ∗ 0 ∗ . . .

∗ ∗ . . . ∗ ... ... ...

∗ ∗ . . .

avec c∈Z

(4)

On suppose A ∈ Mn(Z). Programmer une fonction annuleTrans(A, j, i, k) qui annule le terme en position(j, k)deAen utilisant le terme en position(j, i); la fonctionannuleTrans ne devra utiliser que des transvections à coefficients entiers.

Question 11 : Programmer une fonction detEntier(A) qui prend en argument une matrice A∈ Mn(Z) et qui calcule son de façon exacte son déterminant.

B Pour aller plus loin : la décomposition en produit de transvections

Une matrice de transvection à coefficients entiers est une matrice de la formeTij(λ) =In+tEij aveci6=jett∈Z. Ces matrices étant de déterminant 1, il est clair qu’un produit quelconque de matrices de transvections à coefficients entiers appartiendra à SLn(Z). C’est ainsi que Monsieur C. peut générer facilement des matrices à coefficients entiers dont l’inverse est aussi à coefficients entiers.

Question 12: Créer une fonctionmatTrans(n, i, j, t)qui prend en arguments une taillen de matrice, des indices distinctsi6=jet un entiertpuis qui renvoie la matrice de transvection Tij(t)∈ Mn(Z).

Question 13 : Créer une fonction genereSL(n)qui renvoie une matrice aléatoire de SLn(Z).

Pour cela, on tirera au hasard 20 couples (i, j) aveci6=jet 20 nombres entierstpuis on calculera le produit des matrices Tij(t).

Les élèves ayant percé le secret de construction de Monsieur C., ils veulent maintenant obtenir, à partir d’une matrice M ∈ SLn(Z) une liste de matrices de transvections à coefficients entiers T1, . . . , Tm de sorte que M=T1. . . Tm.

Question 14 : Modifier les fonctions créées ci-dessus afin de garder en mémoire les transvections utilisées au fur et à mesure de l’algorithme.

En déduire une fonctiondecompositionTrans(M)qui prend en argument une matriceM ∈ SLn(Z) et qui renvoie une liste de transvections à coefficients entiers dont le produit vaut M.

Références

Documents relatifs

Les quatre premiers octets du fichier donnent la largeur de chaque ligne (direction x) et les quatre octets suivants devraient donner le nombre de lignes de l’affichage

Créer un fichier nommé NotesEleves.csv avec le bloc-note (Wordpad sous windows et TextEdit sous mac) contenant les données du tableau ci-dessous.. Nom Maths

 Complète comme dans l’exemple...  Complète comme

 Range les nombres suivants du plus petit au

Comme les coefficients des équations sont entiers, on peut supposer les solutions commensurables et par suite entières.. On trouve ainsi /• relations linéaires à coefficients

La surface d’un quadrilatère est maximum quand celui-ci est inscriptible dans un cercle.. Cette propriété résulte de la formule de Bretscheider qui donne l’aire A

- les périmètres des huit triangles sont identiques. Les triangles ainsi obtenus sont appelés magiques. Trouver trois tableaux 3 x 3 distincts de sorte que l’aire de l’un au moins

¦ Avec P YTHON : le nombre de bits utilisés pour représenter un nombre entier est adapté automatiquement au cours du calcul, il n’y a donc pas de débordement (la seule limite est