TD #9 : manipulation d’espace vectoriels
6 mars 2009
Le but de ce TP est de fournir des méthodes de calcul (des algorithmes) pour répondre aux questions
suivantes : une famille de vecteurs est-elle libre ? Comment calculer le rang d’une famille ? Un vecteur
donné appartient-il à un certain sous-espace ? Comment extraire une base d’une famille génératrice ?
Deux familles engendrent-elles le même sous-espace ? Comment obtenir une base du supplémentaire d’un
sous-espace ?
1 Petits rappels
Dans tout ce TP, tous les espaces vectoriels seront de dimension finie. on va noter Span(v1, . . . , vm) =
Pαivil’espace engendré par la famille de vecteurs (v1, . . . , vm). On suppose que tous ces vecteurs
appartiennent à Rn, pour une certaine valeur de n.Span(v1, . . . , vm)est donc un sous-espace vectoriel
de Rn. Si xest un vecteur de Rn, on note x[i]la i-ième coordonnée de x.
On rappelle les résultats suivants :
–dim Span(v1, . . . , vm)≤min(n, m).
–Span(v1, . . . , vi, . . . , vj, . . . , vm) = Span(v1, . . . , vj, . . . , vi, . . . , vm)
–Span(v1, . . . , vi, . . . , vj, . . . , vm) = Span(v1, . . . , vi, . . . , vi+vj, . . . , vm)
– pour λ6= 0, Span(v1, . . . , vi, . . . , vm) = Span(v1, . . . , λvi, . . . , vm)
On rappelle qu’une base d’un sous-espace vectoriel est une famille libre qui engendre cet espace
vectoriel.
2 De bonnes bases
Pour résoudre les question posées dans l’introduction, on va en fait programmer une fonction qui à
partir d’une famille génératrice d’un sous-espace en calcule une base. Cela va nous permettre de résoudre
les problèmes posés facilement. Le procédé par lequel on obtient cette base, l’élimination de Gauss, est
classique, mais n’est pas forcément très simple à programmer.
L’algoritmhe fonctionne en plusieurs étapes, décrites ci-dessous. L’idée générale est qu’à chaque étape
on utilise un vecteur de la famille d’entrée comme “pivot” pour annuler un certain nombre d’autres entrées
de la base.
1. On initialise i:= net k:= m
2. S’il existe un vecteur de la base actuelle bjtel que :
–1≤j≤k
– la i-ième entrée de bjest non-nulle
Alors on utilisera bjcomme vecteur pivot et passe à l’étape 3, sinon on passe à l’étape 6.
3. Si j6=k, échanger les vecteurs bjet bk
4. Remplacer bkpar (1/bk[i]) ×bk
5. Remplacer tous les vecteurs bl(1≤l < k) par bl−bl[i]×bk
6. Faire i:= i−1,k:= k−1. Tant que i≥1et k≥1, on retourne à l’étape 2
Pour vous familiariser avec cette technique, il faut l’éxecuter à la main sur des exemples, avant de la
programmer.
1