L2 MAI MAP24x
TP 6 : Proc´ed´e d’orthonormalisation de Gram-Schmidt
Dans ce TP on met en oeuvre la m´ethode d’orthonormalisation de Gram-Schmidt originale et sa version modifi´ee,
plus stable num´eriquement. On illustre l’instabilit´e de la m´ethode originale sur un exemple simple.
Le proc´ed´e de Gram-Schmidt est une m´ethode pour orthonormaliser une famille libre de vecteurs d’un
espace vectoriel muni d’un produit scalaire. A partir d’une famille libre (v1, ..., vn) on construit une famille
orthonormale (e1, ..., en) qui engendre les mˆemes espaces vectoriels successifs : pour tout jinf´erieur `a n,Fj=
Vect(e1, . . . , ej) = Vect(v1, . . . , vj).
L’´etape g´en´erale de l’algorithme consiste `a soustraire au vecteur vj+1 sa projection orthogonale sur l’espace
Fj. On s’appuie sur la famille orthonormale d´ej`a construite pour le calcul de projection. Notons le projecteur
sur la direction upar
projuv=hu,vi
hu,uiu.
L’algorithme s’´ecrit :
u1=v1,e1=u1
||u1||
u2=v2proju1
v2,e2=u2
||u2||
u3=v3proju1
v3proju2
v3,e3=u3
||u3||
.
.
..
.
..
.
.
uk=vk
k1
X
j=1
projujvk,ek=uk
||uk||
1. Impl´ementer ce proc´ed´e en cr´eant une fonction gramschmidt prenant une matrice rectangulaire en entr´ee
et, si la famille de vecteurs colonnes est libre, renvoyant une matrice de mˆeme taille avec les vecteurs
orthonormaux issus du proc´ed´e ci-dessus. On veillera `a tester si la matrice a au moins autant de lignes
que de colonnes, et `a afficher un message d’erreur si la famille n’est pas libre, c’est `a dire si la norme d’un
vecteur devient trop petite (<1020 par exemple). Application : tester la proc´edure sur la matrice
A=
123
21 2
112
2. Cette m´ethode originelle est instable num´eriquement. Pour l’illustrer, consid´erer le cas
A=
111
ε0 0
0ε0
0 0 ε
avec par exemple ε= 1010. Quel est le r´esultat exact ? Quel r´esultat donne votre proc´edure d’orthonor-
malisation ? Est-ce une famille orthogonale ? Cette anomalie vient du fait que du fait des erreurs d’arrondi,
les vecteurs ukne sont pas orthogonaux. Cependant le proc´ed´e peut ˆetre stabilis´e en l’impl´ementant de
la mani`ere suivante : Plutˆot que de calculer ukpar uk=vkproju1
vkproju2
vk · · · projuk1
vk,
on le calcule par
u(1)
k=vkproju1
vk,
u(2)
k=u(1)
kproju2
u(1)
k,
.
.
.
u(k2)
k=u(k3)
kprojuk2
u(k3)
k,
uk=u(k2)
kprojuk1
u(k2)
k.
Ce calcul donnerait le mˆeme r´esultat en arithm´etique exacte mais est plus stable en arithm´etique ap-
proch´ee.
3. Impl´ementer ce second algorithme en modifiant tr`es l´eg`erement la fonction pr´ec´edente et comparer le
r´esultat qu’il fournit sur l’exemple ci-dessus. Etonnant, non ?
1 / 1 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 !