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 `aU−1=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 =P−1=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)h−1) Ah=PhAh−1 h= 1, . . . , n−1
AlorsPn−1· · ·P1A=An−1; de plus, la matrice An−1 est triangulaire sup´erieure et la matricePn−1· · ·P1est orthogonale.
On a donc
A=QR avecQ=t(Pn−1· · ·P1) etR=An−1.
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.