Sperimentazioni dell'algoritmo

Come sempre verifichiamo che il nostro algoritmo funzioni, e per fare questo prendiamo una matrice ortogonale (nel nostro esempio la matrice identità $2 \times 2$ con le colonne invertite, che sappiamo essere ortogonale) ed una matrice triangolare superiore, le moltiplichiamo tra loro ed applichiamo la fattorizzazione $QR$ al risultato:

» q=[0 1;1 0]

q =

     0     1
     1     0

» r=[5 6; 0 7]

r =

     5     6
     0     7

» a=q*r

a =

     0     7
     5     6

» a1=fattqr(a)

a1 =

    -5    -6
     1     7

» r1=triu(a1)

r1 =

    -5    -6
     0     7

» v1=[1;1]

v1 =

     1
     1

» p1=eye(2)-2*(v1*v1')/(v1'*v1)

p1 =

     0    -1
    -1     0

» v2=[1]

v2 =

     1

» p2=eye(1)-2*(v2*v2')/(v2'*v2)

p2 =

    -1

» p2=[eye(1) 0; 0 p2]

p2 =

     1     0
     0    -1

» q1=p1*p2

q1 =

     0     1
    -1     0

» q1*r1

ans =

     0     7
     5     6

»

come risultato abbiamo ottenuto la matrice di partenza. Possiamo allora passare ad un esempio con una matrice casuale:

» a=round(10*rand(4))

a =

     4     4     5     2
     3     6     9     9
     3     1     9     2
     4     0     3     6

» fattqr(a)

ans =

  -7.07106781186548  -5.23259018078045 -12.16223663640862  -9.19238815542512
   0.27097657163519  -5.06162029393751  -3.82486217371702  -3.14128659928206
   0.27097657163519  -0.17544975548535  -5.78363461432936  -0.55069379758375
   0.36130209551359  -0.38969980181225  -0.00131662244093  -5.50718211451862

»

che contiene nella parte triangolare superiore la matrice $R$.



Morpheus 2004-01-04