TP

Accès aux logiciels et téléchargement du devoir

Pour cette semaine, le devoir sera essentiellement vide. L’utilisation du dépôt git sera principalement une manière pratique pour vous pour sauvegarder et transférer votre travail, et pour nous pour le consulter.

Consignes

Tout code non trivial doit être dans le fichier moncode.py. S’il devient trop long, vous pouvez créer d’autres fichiers, en les mentionnant dans le rapport.

Toute fonction doit:

  • être documentés
    la documentation doit inclure des exemples et une estimation rapide de la complexité algorithmique de la fonction;

  • être testée
    voir l’exemple fourni pour comment rédiger les tests sous forme de doctests;

  • utiliser chaque fois que possible des annotations de type.

Vous devez avoir vérifié votre code avec un analyseur statique comme pyflakes ou mypy.

Vous devez en outre rédiger dans rapport.md un rapport concis mettant en valeur votre travail: quelles exercices avez vous abordés, traités; indiquer les fonctions implantées avec exemples, préciser les difficultés rencontrées, …

Prise en main

Consulter les fichiers moncode.py et rapport.md.

Importer les objets définis dans moncode.py et les recharger automatiquement en cas de changement:

%load_ext autoreload
%autoreload 2
from moncode import *

Utilisation:

response("As-tu faim")

Consultation de la documentation:

response?

Vérifications statiques:

!pyflakes moncode.py
!mypy moncode.py

Lancement des tests:

!sage -t moncode.py

Indications

Pour utiliser des objets de Sage dans moncode.py, par exemple pour des annotations de type, il faut les importer:

from sage.all import matrix, GF  # type:ignore

Gauß

Implanter l’algorithme de Gauß de mise sous-forme échelon réduite d’une matrice à coefficients dans un corps.

    def forme_echelon_réduite(m: matrix) -> matrix:
        """
        Renvoie la matrice `m` mise sous forme échelon 
        """

Test d’appartenance à un sous espace vectoriel

Soit V=(v_i)_i une liste de vecteurs. On souhaite déterminer si un vecteur w est dans le sous-espace vectoriel engendré par les (v_i)_i.

Implanter une fonction:

   def appartientSEV(V, w):
       """
       Teste si `w` est engendré par les vecteurs dans `V`.
       """

Vous utiliserez la fonction forme_echelon_réduite.

Pourrait-t’on se contenter d’une matrice sous forme échelon?

Calcul d’une base de la somme de deux espaces vectoriels