TP#

Salle de TP virtuelle: accès aux logiciels et au matériel pédagogique#

Pour cette séance, 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, le noter et, le cas échéant, collaborer avec vous pour vous aider.

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ée
    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 (voir détails dans ce fichier).

Prise en main#

Consultez les fichiers moncode.py et rapport.md.

Indications#

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

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ß#

Implantez 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 
        """

Quelle est la complexité de votre implantation? Précisez bien le modèle de calcul (taille des problèmes, opérations élémentaires) et justifiez.

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\).

Implantez 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?

Quelle est la complexité de votre implantation? Précisez bien le modèle de calcul (taille des problèmes, opérations élémentaires) et justifiez.

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

Soient \(V\) et \(W\) deux espaces vectoriels décrits chacun par une base. Implanter un algorithme calculant une base de la somme de ces deux espaces vectoriels.

Quelle est la complexité de votre implantation? Précisez bien le modèle de calcul (taille des problèmes, opérations élémentaires) et justifiez.