Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 4

L2 Algorithmique 1

DM noté Résolution de systèmes linéaires à coefficients rationnels

Le travail demandé reprend les exercices de la feuille de Tp intitulée "Résolution de systèmes


linéaires à coefficients rationnels par l’algorithme du pivot de Gauss." en ligne sur le cours
moodle . Ce document précise quelles autres fonctions écrire, comment tester les fonctions et
sous quelle forme vous devez rendre votre travail pour qu’il soit pris en compte.

Un fichier de données data.py vous est fourni, il vous donne pour chaque fonction demandée
un jeu de tests : une liste L (données) et une liste SOL (solutions). Vous ne devez pas le
modifier.
Un fichier d’évaluation automatique eval.py vous sera fourni ultérieurement.
Vous devez rendre 2 fichiers :
• fonctions.py : ce fichier contiendra au moins les fonctions suivantes :
1. la fonction de l’exercice 1 de la feuille de TP nommée gauss
Rappel : la fonction gauss ne renvoie pas le système résolu mais seulement la liste
des indices des pivots.
2. la fonction teste_gauss déjà fournie : elle est utile pour vérifier la forme du système
"résolu" calculé dans la fonction gauss.
3. la fonction de l’exercice 2 de la feuille de TP nommée est_compatible
4. une fonction rang_fam qui prend une famille de vecteurs supposés tous de même
taille et renvoie son rang. Cette famille de vecteurs est représentée par une liste de
listes toutes de même longueur . On rappelle que le rang d’une famille de vecteurs
est égal au rang de la matrice dont les colonnes sont constituées des vecteurs de la
famille.
On pourra d’abord construire le système homogène associé à cette matrice puis
calculer son rang en remarquant que c’est la longueur de la liste des pivots renvoyée
par la fonction gauss.
Par exemple :
· rang_fam([[-3]])=1
· rang_fam([[Fraction(2, 7), Fraction(-1, 10)], [0, Fraction(1, 3)]])=2
· rang_fam([[Fraction(1, 1), Fraction(0, 1), Fraction(-80, 63)], [1,1,Fraction(-59,
63)]])=2
· rang_fam([[Fraction(0, 1), 2 , Fraction(1, 1)] , [ Fraction(-10, 21),0,0], [1,2,3]])=2
· rang_fam([[Fraction(0, 1), 0 , 0] , [0,0,0] ])=0

5. la fonction diff qui prend un entier n ≥ 0 et une liste d’entiers strictement crois-
sante L incluse dans la liste {0, · · · n − 1} et renvoie la liste croissante des entiers
de {0, · · · n − 1} non contenus dans L (c’est à dire le complémentaire de L dans
{0, · · · n − 1}).
Par exemple :
· diff(3,[0,2])=[1]
· diff(6,[0,1,3])=[2,4,5]
· diff(3,[0,1,2])=[]
Pensez aux listes en compréhension...
Cette fonction sera utile pour déterminer la liste des inconnues indépendantes dans
la fonction resoudre.
6. la fonction solH_egaux qui prend F1 et F2 2 familles de vecteurs (2 listes de listes
supposées toutes de même taille) et renvoie un booléen.
Si F1 et F2 sont vides on renvoie True.
Sinon l’un des deux est vide et pas l’autre on renvoie False.
Sinon, dans le cas général (F1 et F2 non vides), on renvoie le booléen V ect(F1 ) =
V ect(F2 ) . On utilisera le résultat suivant :

V ect(F1 ) = V ect(F2 ) ⇐⇒ rang(F1 ) = rang(F2 ) = rang(F 1 ∪ F 2)

et on utilisera la fonction rang_fam.


Par exemple :
· solH_egaux( [[[1, 0], [Fraction(2, 5), 0]], [[2, 1],[10, 5], [10,0]]] )=False
· solH_egaux( [[[Fraction(8, 5), 0], [Fraction(2, 5), 1]], [[2, 1],[Fraction(24, 5), 0]]]
)=True
· solH_egaux( [[[Fraction(8, 5), 0], [Fraction(2, 5), 0]], [[2, 1],[Fraction(24, 5), Frac-
tion(2, 5)]]])=False
· solH_egaux( [[[Fraction(8, 5), 0], [Fraction(2, 5), 1]], [[2, 1],[Fraction(24, 5), 0],
[Fraction(8, 5), 0]] ,[-20,-10]] )=True
7. la fonction solS_egaux qui prend deux listes A1 = [v1 , F1 ] et A2 = [v2 , F2 ] représen-
tant 2 ensembles de solutions d’un système où v1 et v2 sont des listes (représentant
une solution particulière de S )et F1 et F2 sont deux familles de vecteurs (base de
SH ) et renvoie un booléen vrai lorsque les deux ensembles de solutions sont égaux.
Si A1 = A2 on renvoie True
Sinon si v1 = [] ou (exclusif) v2 = [] on renvoie False
Sinon, dans les cas général, on a 2 espaces affines A1 et A2 . On renvoie un booléen
vrai si les deux espaces affines sont égaux. On utilisera le résultat suivant :

A1 = A2 ⇐⇒ V ect(F1 ) = V ect(F2 ) et V ect({v1 − v2 } ∪ F1 ) = V ect(F1 )

Par exemple :
· solS_egaux( [ [[4, 6], [[Fraction(2, 5), 1] ]] , [[2,1], [[20,50] ] ] ] )=True
· solS_egaux( [ [[Fraction(8, 5), 0], [[Fraction(2, 7), 1] ]] , [[2,1], [[2,5] ] ] ]=False ,
· solS_egaux( [ [[Fraction(2, 1), 1], [[Fraction(2, 5), 1], [1,0] ]] , [[1,1], [[0,1],[1,0] ]
] ] =True
Comme il n’y a pas unicité de l’écriture d’un espace affine sous la forme : solution
particulière +SH (v + V ect(F )), la fonction solS_egaux permet éventuellement de
savoir si le résultat de la fonction resoudre est correct lorsque le résultat obtenu n’a
pas la même forme que l’expression attendue.
8. la fonction de l’exercice 3 de la feuille de TP nommée resoudre
Vous placerez également dans ce fichier que toute autre fonction auxiliaire que vous
jugerez nécessaire de créer.
Il est obligatoire de créer des fonctions auxiliaires : a minima une
fonction pour permuter deux lignes, une fonction pour dilater une
ligne d’une matrice,... Il est souhaitable que vous en créiez un certain
nombre pour alléger votre code. D’une manière générale une fonction
dont le code ne tient pas tout entier à l’écran devrait être découpée
en fonctions auxiliaires !

Après la déclaration de toutes ces fonctions, vous placerez la ligne :


if __name__==’__main__’
Après cette ligne vous placerez des lignes de mise au point et de tests
(assert) de vos fonctions auxiliaires.
Les tests des fonctions demandées explicitement seront placées dans le fichier tests.py.
• tests.py : Ce fichier commence par la ligne : #from fonctions import*.
Il se poursuit par des tests des fonctions explicitement demandées.
Vous avez le choix d’utiliser ou non unittest. Vous pouvez utiliser des donnés du fichier
fourni data.py pour vos tests.

1 Consignes de remise :
— vous devez coder en python3
— chacun des 2 fichiers fonctions.py et tests.py commencera par une ligne de commentaire
avec votre nom et prénom.
— seuls les fichiers .py seront acceptés (pas ipynb ou autre ...)
— vous créerez un répertoire nommé VotreNom_VotrePrenom contenant les 2 fichiers
fonctions.py et tests.py et un fichier VotreNom_VotrePrenom.pdf (décrit ci-dessous) puis
zipperez ce répertoire. Vous déposerez ce fichier zip sur moodle avant le dimanche 5
Décembre minuit.
Le non respect de ces consignes peut entraîner un malus de 3 points

2 Notation
• Résolution du système : 12 pts Validation automatique avec un fichier fourni ultérieu-
rement. Ce fichier d’évaluation est adossé au fichier de données fourni data.py.
• Tests unitaires : 3 pts
— tests unitaires des fonctions auxiliaires : les lignes de tests de chacune de vos fonc-
tions auxiliaires doivent figurer directement dans le fichier fonctions.py
— tests unitaires des fonctions demandées : ils sont placés dans le fichier tests.py
• Forme : 2 pts
— Pas de code intercalé dans les fonctions
— Explications dans le code quand cela est nécessaire
— Vous utiliserez au maximum la clause assert pour vérifier la cohérence des données
des fonctions
— Chaque définition de fonction sera précédée d’un cartouche (comme dans les fi-
chiers de départ déjà fournis dans des TP précédents (affichage_str) et précisant
les Entrées, les Sorties et l’action accomplie)
— Lisibilité du code : choix des identificateurs...
• Document texte explicatif : 3 pts
— au format pdf
— entre 1 et 2 pages
— il permet de préciser : quelle version de python, quel système d’exploitation vous
avez utilisé ; qu’est ce qui est opérationnel dans un temps acceptable (c’est à dire
quelques secondes) ; quels problèmes vous avez rencontré ; comment vous les avez
résolus ou pourquoi vous pensez ne pas y être parvenu ?
— il inclura une copie d’écran de l’exécution du programme de validation.

  ♦  

Vous aimerez peut-être aussi