• Aucun résultat trouvé

Programme : d´ ecomposition QR (m´ ethode de Givens)

Manipulation de matrices

3.2 D´ ecomposition de Choleski

3.3.3 Programme : d´ ecomposition QR (m´ ethode de Givens)

La d´etermination des coefficients des matrices de rotation G(q, p) se traduit par la proc´edure que voici :

PROCEDURE CoefficientsGivens (p, q: integer; VAR c, s: real; VAR a: mat);

Calcul des r´eelscetstels queb(q, p) = 0.

VAR

norme: real;

BEGIN

norme := sqrt(sqr(a[p, p]) + sqr(a[q, p]));

IF EstNul(norme) THEN BEGIN c := 1;

s := 0 END ELSE BEGIN

c := a[p, p] / norme;

s := a[q, p] / norme END

END; { de "CoefficientsGivens" }

On peut construire les matricesG(q, p) explicitement puis faire le produit des matrices.

Mais comme cette matrice ne modifie que peu de coefficients, il est plus ´economique de faire ces quelques op´erations directement. On a alors :

PROCEDURE Premultiplier (n, p, q: integer; c, s: real; VAR a: mat);

Pr´emultiplication de la matriceapar la matrice de rotationG(q, p).

VAR

j: integer;

v, w: real;

BEGIN

FOR j := 1 TO n DO BEGIN v := a[p, j]; w := a[q, j];

a[p, j] := c * v + s * w;

a[q, j] := -s * v + c * w;

END

END; { de "Premultiplier" }

La m´ethode de Givens consiste `a it´erer cette op´eration pour les couples (p, q), avec 1≤p < q ≤n. La matrice obtenue, si l’on part deA, est la matrice R. Si l’on fait le produit des matrices de transformation orthogonales, on obtient une matriceU telle que R=U Aet la matrice cherch´ee Qest ´egale `aU1=tU. Les deux proc´edures suivantes r´ealisent ces calculs.

PROCEDURE IterationGivens (n: integer; VAR a, u: mat);

On annule successivement les coefficients d’indice(p, q), pour1≤p < q≤n. Le produit des matrices de rotation est l’inverse de la matrice orthogonale cherch´ee.

VAR

p, q: integer;

c, s: real;

BEGIN

FOR p := 1 TO n - 1 DO

FOR q := p + 1 TO n DO BEGIN

CoefficientsGivens(p, q, c, s, a);

Premultiplier(n, p, q, c, s, u);

Premultiplier(n, p, q, c, s, a);

END

END; { de "IterationGivens" }

PROCEDURE DecompositionQRparGivens (n: integer; a: mat; VAR q, r: mat);

D´ecompositionQRde la matriceapar la m´ethode de Givens.

BEGIN r := a;

q := MatriceUnite; Le couple de matrices(A, I)est transform´e IterationGivens(n, r, q); en un couple(R, Q), puisQest transpos´ee Transposer(n, q, q) pour donner la matrice cherch´ee.

END; {de "DecompositionQRparGivens" }

Voici un exemple d’ex´ecution. Les impressions interm´ediaires montrent comment la ma-trice de d´epart est progressivement transform´ee en mama-trice triangulaire sup´erieure.

Voici la matrice a

4.000 2.000 1.000 0.000 2.000 5.000 3.000 5.000 1.000 1.000 1.000 1.000 2.000 1.000 4.000 1.000 Matrice a pour p = 1, q = 2

4.472 4.025 2.236 2.236 0.000 3.578 2.236 4.472 1.000 1.000 1.000 1.000 2.000 1.000 4.000 1.000 Matrice a pour p = 1, q = 3

4.583 4.146 2.400 2.400 0.000 3.578 2.236 4.472 0.000 0.098 0.488 0.488 2.000 1.000 4.000 1.000 Matrice a pour p = 1, q = 4

5.000 4.200 3.800 2.600 0.000 3.578 2.236 4.472 0.000 0.098 0.488 0.488 -0.000 -0.742 2.706 -0.044 Matrice a pour p = 2, q = 3

5.000 4.200 3.800 2.600 0.000 3.579 2.249 4.484 0.000 -0.000 0.427 0.366 -0.000 -0.742 2.706 -0.044 Matrice a pour p = 2, q = 4

5.000 4.200 3.800 2.600 0.000 3.655 1.652 4.399 0.000 -0.000 0.427 0.366 -0.000 -0.000 3.106 0.867

Matrice a pour p = 3, q = 4 5.000 4.200 3.800 2.600 0.000 3.655 1.652 4.399 -0.000 -0.000 3.135 0.909 -0.000 0.000 -0.000 -0.244 D´ecomposition QR de a :

Voici la matrice q

0.800 -0.372 -0.455 0.122 0.400 0.908 -0.007 0.122 0.200 0.044 0.053 -0.977 0.400 -0.186 0.889 0.122 Voici la matrice r

5.000 4.200 3.800 2.600 0.000 3.655 1.652 4.399 -0.000 -0.000 3.135 0.909 -0.000 0.000 -0.000 -0.244 V´erification: produit q*r

4.000 2.000 1.000 0.000 2.000 5.000 3.000 5.000 1.000 1.000 1.000 1.000 2.000 1.000 4.000 1.000 Voici un deuxi`eme exemple :

Voici la matrice a

4.000 1.000 0.000 0.000 0.000 1.000 4.000 1.000 0.000 0.000 0.000 1.000 4.000 1.000 0.000 0.000 0.000 1.000 4.000 1.000 0.000 0.000 0.000 1.000 4.000 D´ecomposition QR de a

Voici la matrice q

0.970 -0.234 0.062 -0.017 0.005 0.243 0.935 -0.248 0.066 -0.018 0.000 0.265 0.929 -0.249 0.069 0.000 0.000 0.268 0.928 -0.258 0.000 0.000 0.000 0.268 0.963 Voici la matrice r

4.123 1.940 0.243 0.000 0.000 0.000 3.773 1.996 0.265 0.000 0.000 0.000 3.736 2.000 0.268 0.000 -0.000 0.000 3.732 2.000 0.000 0.000 -0.000 -0.000 3.596

CommeA =QR et que Q est orthogonale, on a d´et(A) = d´et(R) et en particulier A est inversible si et seulement siRl’est. De plus, le syst`eme d’´equationsAx=b´equivaut

aux syst`emes

Qy=b Rx=y

Le premier se r´esout imm´ediatement parce quey =tQbet le deuxi`eme est un syst`eme triangulaire. D’o`u :

PROCEDURE SystemeParQR (n: integer; a: mat; b: vec; VAR x: vec;

VAR inversible: boolean);

Calcul de la solution du syst`eme lin´eaireAx=bpar la d´ecompositionA=QR. SiRest inversible, on r´esout d’abord le syst`emeQy=bpary=tQb, puis le syst`eme triangulaire Rx=y.

VAR

i: integer;

q, r: mat;

y: vec;

BEGIN

DecompositionQR(n, a, q, r);

inversible := true; i := 1;

WHILE (i <= n) AND inversible DO BEGIN

inversible := NOT EstNul(r[i, i]); i := i + 1 END;

IF inversible THEN BEGIN

VecteurParMatrice(n, b, q, y);

SystemeTriangulaireSuperieur(n, r, y, x);

END

END; { de "SystemeParQR" }

3.3.4 D´ ecomposition QR (m´ ethode de Householder)

Nous pr´esentons maintenant une autre m´ethode de calcul d’une d´ecomposition QR.

On pourra aussi consulter l’´enonc´e correspondant de mise sous forme tridiagonale. Les matrices consid´er´ees sont r´eelles, carr´ees d’ordren. On noteI la matrice unit´e d’ordren.

Lemme 3.3.5. Soitw ∈ Rn un vecteur colonne de norme euclidienne 1 et soit P = I−2wtw. AlorstP =P1=P.

En effet, on atP =I−2t(wtw) =P et

P2= (I−2wtw)(I−2wtw)

=I−4wtw+ 4wtwwtw=I cartw w=kwk= 1.

Pourk∈ {1, . . . , n}et pourx∈Rn, on notev=v(k, x)∈Rn le vecteur d´efini par vi=

(0 si 1≤i < k

xk+signe(xk)α sii=k xi sik < i≤n

o`uα=p

x2k+· · ·+x2n etsigne(s) = 1,0,−1 selon que s >0,s= 0, s <0. On d´efinit P=P(k, x) =I−βvtv

avecβ = 2/kvk2siv6= 0,β = 2 sinon. Posonsy=P(k, x)x.

Lemme 3.3.6. On akvk2= 2·tvxety=x−v.

Preuve. On a

tvx= (xk+signe(xk)α)xk+ Xn i=k+1

x2i =signe(xk)xkα+α2 et

kvk2= (xk+signe(xk)α)2+ Xn i=k+1

x2i = 2α2+ 2signe(xk)xkα d’o`u la premi`ere ´egalit´e. Par ailleurs, siv6= 0,

βvtvx= v

kvk22tvx=v doncy=x−βvtvx=x−v.

En d’autres termes,

yi=

(xi si 1≤i < k

−signe(xk)α sii=k 0 sik < i≤n

et en particulier les coefficients dey d’indices plus grands queksont nuls. NotonsA(j) laj-i`eme colonne de la matriceA.

Proposition 3.3.7. SoitA une matrice d’ordren, soitA0=Aet posons Ph=P(h, A(h)h1) Ah=PhAh1 h= 1, . . . , n−1

AlorsPn1· · ·P1A=An1; de plus, la matrice An1 est triangulaire sup´erieure et la matricePn1· · ·P1est orthogonale.

On a donc

A=QR avecQ=t(Pn1· · ·P1) etR=An1.

Preuve. D’apr`es ce qui pr´ec`ede, si l’on prend pourxlaj-i`eme colonneA(j) deA, alors la j-i`eme colonne de P(k, A(j))A a ses coefficients nuls dans les lignes d’indices plus grands quek. De plus, on a, avecv=v(k, A(j)),

P(k, A(j))A=A−vtp avecp=βtAv (3.1) ce qui montre que les colonnes d’indices inf´erieurs `akdeAne sont pas modifi´ees par la pr´emultiplication parP. La proposition en r´esulte.

Pour la r´ealisation de cette m´ethode de d´ecomposition, il convient d’abord de calculer le vecteurv(k, A(j)), ce qui se fait par la proc´edure que voici :

PROCEDURE VecteurHouseholder (n: integer; VAR a: mat; k, j: integer;

VAR v: vec);

Calcule le vecteurv(k, a(j)), o`ua(j)est laj-i`eme colonne dea.

VAR

i: integer;

BEGIN

FOR i := 1 TO k - 1 DO v[i] := 0;

FOR i := k TO n DO v[i] := a[i, j];

v[k] := v[k] + signe(v[k]) * norme(n, v);

END; { de "VecteurHouseholder" }

L’application de la formule (3.1) conduit `a la proc´edure que voici, qui calcule dansQle produit deP parQ:

PROCEDURE TransformationHouseholder (n, h: integer; VAR q, a: mat);

VAR

i, j: integer;

beta, normeV2: real;

v, z, p: vec;

BEGIN { de "TransformationHouseholder" } VecteurHouseholder(n, a, h, h, v);

normeV2 := ProduitScalaire(n, v, v);

IF EstNul(normeV2) THEN beta := 2

ELSE

beta := 2 / normeV2;

VecteurParMatrice(n, v, a, p);

VecteurParScalaire(n, p, beta, p); p=βvA VecteurParMatrice(n, v, q, z);

VecteurParScalaire(n, z, beta, z); z=βvQ FOR i := 1 TO n DO

FOR j := 1 TO n DO BEGIN

a[i, j] := a[i, j] - v[i] * p[j];

q[i, j] := q[i, j] - v[i] * z[j];

END

END; { de "TransformationHouseholder" } La d´ecompositionQRdeAs’obtient enfin par :

PROCEDURE DecompositionQRparHouseholder (n: integer; a: mat; VAR q, r: mat);

VAR

h: integer;

BEGIN

q := MatriceUnite;

r := a;

FOR h := 1 TO n - 1 DO

TransformationHouseholder(n, h, q, r);

Transposer(n, q, q)

END; { de "DecompositionQRparHouseholder" }

Voici un exemple d’ex´ecution, avec des impressions interm´ediaires : Voici la matrice lue

4.000 2.000 1.000 0.000 2.000 5.000 3.000 5.000 1.000 1.000 1.000 1.000 2.000 1.000 4.000 1.000

Matrice apr`es transformation de la colonne 1 -5.000 -4.200 -3.800 -2.600

0.000 3.622 1.933 4.422 0.000 0.311 0.467 0.711 0.000 -0.378 2.933 0.422

Matrice apr`es transformation de la colonne 2 -5.000 -4.200 -3.800 -2.600

0.000 -3.655 -1.652 -4.399 0.000 0.000 0.313 0.334 0.000 0.000 3.119 0.880

Matrice apr`es transformation de la colonne 3 -5.000 -4.200 -3.800 -2.600

0.000 -3.655 -1.652 -4.399 0.000 0.000 -3.135 -0.909 0.000 0.000 -0.000 -0.244 Matrice r

-5.000 -4.200 -3.800 -2.600 0.000 -3.655 -1.652 -4.399 0.000 0.000 -3.135 -0.909 0.000 0.000 -0.000 -0.244 Matrice q

-0.800 0.372 0.455 0.122 -0.400 -0.908 0.007 0.122 -0.200 -0.044 -0.053 -0.977 -0.400 0.186 -0.889 0.122

On pourra comparer la d´ecomposition `a celle obtenue par la m´ethode de Givens : les matricesRn’ont pas les mˆemes diagonales.

Notes bibliographiques

Les d´ecompositions pr´esent´ees ici sont des plus classiques. Il en existe bien d’autres, en particulier la singular value decomposition qui est d’une grande utilit´e. On pourra consulter :

G. H. Golub, C. F. van Loan,Matrix computations, Baltimore, John Hopkins University Press, 1985.

Chapitre 4