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 :
1jk
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(1l < k) par blbl[i]×bk
6. Faire i:= i1,k:= k1. Tant que i1et k1, 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
Donnez le résultat de l’algorithme sur les deux exemples suivants :
b=
1
2
3
4
5
6
,
1
2
3
5
7
11
,
0
3
0
2
0
1
b=
1
0
42
,
0
0
0
,
0
2
0
,
0
0
π2/2
,
e
3
0
,
π
1
2
Vous pouvez vous convaincre qu’à chaque étape de l’algorithme, les (bi)forment toujours une
famille génératrice du même sous-espace. De plus, à la fin de l’exécution, les vecteurs non-nuls de
la famille sont en fait libres (cela découle de leur caractère “triangulaire”).
Programmez l’algorithme en Maple
3 Utilisation de l’algorithme
Une fois qu’on a programmé le pivot de Gauss, on peut faire plein de belles choses assez facilement ;
Utilisez cet algorithme pour déterminer si une famille est libre [indice : y’a-t-il des vecteurs nuls à
la fin ?]
Programmez une fonction qui extrait une base d’une famille génératrice.
Programmez une fonction qui donne le rang d’une famille.
Programmez une fonction qui détermine si un vecteur appartient à un sous-espace donné [Indice :
est-ce qu’ajouter ce vecteur à une base du sous-espace engenre un sous-espace plus gros ?].
Programmez une fonction qui détermine si deux familles engendrent le même espace [Indice : test
d’inclusions réciproques].
Programmez une fonction qui donne une base d’un supplémentaire d’un sous-espace [Pas d’indice].
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !