Sperimentazioni dell'algoritmo

Faremo alcuni esempi di funzionamento dell'algoritmo di fattorizzazione $A=LU$ per osservarne il comportamento.

Per verificare la bontà dell'algoritmo abbiamo generato casualmente una matrice triangolare inferiore a diagonale unitaria ed una triangolare superiore e le abbiamo moltiplicate tra loro ed abbiamo poi applicato l'algoritmo di fattorizzazione al prodotto, ottenendo

» l1=round(10*(tril(rand(10,10),-1)))+eye(10)

l1 =

     1     0     0     0     0     0     0     0     0     0
     4     1     0     0     0     0     0     0     0     0
     1     5     1     0     0     0     0     0     0     0
     4     6     1     1     0     0     0     0     0     0
     9     1     5     5     1     0     0     0     0     0
     4     5     0     5     4     1     0     0     0     0
     3     5     2     3     4     8     1     0     0     0
     4     9     3     4     5     8     8     1     0     0
     7     9     9     9    10     9     4     6     1     0
     7     5     3     8     3     6     0     5     6     1

» u1=round(10*(triu(rand(10,10))))

u1 =

     8     0     7     3     5     2     0     8    10    10
     0     4     4    10     1     6     4     3     4     5
     0     0     5     5     7    10     7     2     1     5
     0     0     0     4     0     3     9     7     7     1
     0     0     0     0     6     5     5     3     9     5
     0     0     0     0     0     6     1     5     2     4
     0     0     0     0     0     0     5     8     0     3
     0     0     0     0     0     0     0     9     5     3
     0     0     0     0     0     0     0     0     1     8
     0     0     0     0     0     0     0     0     0     1

» a1=l1*u1

a1 =

     8     0     7     3     5     2     0     8    10    10
    32     4    32    22    21    14     4    35    44    45
     8    20    32    58    17    42    27    25    31    40
    32    24    57    81    33    57    40    59    72    76
    72     4    92    82    87    94    89   123   143   130
    32    20    48    82    49    79    86    99   133    94
    24    20    51    81    58   133    94   124   125   123
    32    36    79   133    80   177   166   221   173   188
    56    36   130   192   167   289   259   325   317   293
    56    20    84   118    79   149   134   217   219   221

» A=fattlu(a1)

A =

     8     0     7     3     5     2     0     8    10    10
     4     4     4    10     1     6     4     3     4     5
     1     5     5     5     7    10     7     2     1     5
     4     6     1     4     0     3     9     7     7     1
     9     1     5     5     6     5     5     3     9     5
     4     5     0     5     4     6     1     5     2     4
     3     5     2     3     4     8     5     8     0     3
     4     9     3     4     5     8     8     9     5     3
     7     9     9     9    10     9     4     6     1     8
     7     5     3     8     3     6     0     5     6     1

»

dove, nella parte strettamente triangolare inferiore di $A$ abbiamo la parte strettamente triangolare inferiore di $l1$ e nella parte triangolare superiore abbiamo $u1$.

Proviamo adesso l'algoritmo su una matrice completamente casuale:

» a1

a1 =

     2     6     5     1     9     6     1     9     9    10
     3     1     9     2    10     6     8     3     5     5
     6     9     6     1     8     2     5     3     7     5
     8     7     4     5     9     7     6     2     7     4
     0     0     8     8     4     1     5     6    10     8
     4     7     7     2     7     5     1     6     6     5
     8     3     4     0     3     3     3     9     5     8
     2     8     5     1     8     6     9     2     6     5
     3     1     9     5     2     3     4     3    10     1
     6     2     6     9     4     8     1     6     4     1

» A=fattlu(a1)

A =

  Columns 1 through 4

   2.00000000000000   6.00000000000000   5.00000000000000   1.00000000000000
   1.50000000000000  -8.00000000000000   1.50000000000000   0.50000000000000
   3.00000000000000   1.12500000000000 -10.68750000000000  -2.56250000000000
   4.00000000000000   2.12500000000000   1.79532163742690   4.53801169590643
                  0                  0  -0.74853801169591   1.34020618556701
   2.00000000000000   0.62500000000000   0.36842105263158   0.13917525773196
   4.00000000000000   2.62500000000000   1.86549707602339  -0.11726804123711
   1.00000000000000  -0.25000000000000  -0.03508771929825   0.00773195876289
   1.50000000000000   1.00000000000000                  0   0.66108247422680
   3.00000000000000   2.00000000000000   1.12280701754386   1.73582474226804

  Columns 5 through 8

   9.00000000000000   6.00000000000000   1.00000000000000   9.00000000000000
  -3.50000000000000  -3.00000000000000   6.50000000000000 -10.50000000000000
 -15.06250000000000 -12.62500000000000  -5.31250000000000 -12.18750000000000
   7.47953216374269  12.04093567251462  -2.27485380116959  10.19298245614035
 -17.29896907216495 -24.58762886597938   4.07216494845361 -16.78350515463917
   0.24880810488677   3.96811680572110  -3.80184743742551   1.80989272943981
  -0.29849523241955   1.13394533303296  -2.89220545167831  17.43144101524367
   0.14228247914184   0.55752046256664  -3.80207968220586  57.52323090703740
   0.74828665077473   1.87457760756927  -0.54753281146551   0.20812412887897
   0.69778009535161   1.62072914320042   0.61062429411536  -0.10213668385438

  Columns 9 through 10

   9.00000000000000  10.00000000000000
  -8.50000000000000 -10.00000000000000
 -10.43750000000000 -13.75000000000000
   7.80116959064327   9.93567251461988
  -8.26804123711340 -15.60824742268041
  -1.87067938021454  -1.18355184743743
  11.35173087031614  17.74881730119396
  39.82797834638001  62.30377380535107
   7.46266388810654   0.08094519791148
  -0.25256005115097  -2.45256300872870

»

come riprova possiamo

» a2=(tril(A,-1)+eye(10))*triu(A)

a2 =

     2     6     5     1     9     6     1     9     9    10
     3     1     9     2    10     6     8     3     5     5
     6     9     6     1     8     2     5     3     7     5
     8     7     4     5     9     7     6     2     7     4
     0     0     8     8     4     1     5     6    10     8
     4     7     7     2     7     5     1     6     6     5
     8     3     4     0     3     3     3     9     5     8
     2     8     5     1     8     6     9     2     6     5
     3     1     9     5     2     3     4     3    10     1
     6     2     6     9     4     8     1     6     4     1

»



Morpheus 2004-01-04