//
// Per poter utilizzare con il file xt2(usafiledati).xhtml questo file di
// dati, bisogna dargli il nome:
//                 xt2(matricestudiata).txt
//
//<![CDATA[
// 
var esempi = new Array(11);
//
// Esempio studiato per far bloccare la tridiagonalizzazione al terzo passo.
// Questo esempio (come gli altri) può venire modificato dalla function ultimicalcoli.
//
esempi[0] = [ [    1,    -1.6,    -1.2,       0,       0,     0],
              [-0.64, -1.1264, -0.7648, -4.2896,  7.1328,  0.36],
              [-2.48,  3.2352,  1.4864,  8.6528, -7.3104, -0.48],
              [-0.96, -1.5856,  1.3808,  7.5216, -6.7088,  2.44],
              [-0.72,  0.8608,  0.3856,  5.0912, -3.8816, -1.92],
              [    0,    0.36,   -0.48,    1.24,   -0.32,     3] ];
//
// Copia identica alla precedente tenuta di riserva...
//
esempi[1] = [ [    1,    -1.6,    -1.2,       0,       0,     0],
              [-0.64, -1.1264, -0.7648, -4.2896,  7.1328,  0.36],
              [-2.48,  3.2352,  1.4864,  8.6528, -7.3104, -0.48],
              [-0.96, -1.5856,  1.3808,  7.5216, -6.7088,  2.44],
              [-0.72,  0.8608,  0.3856,  5.0912, -3.8816, -1.92],
              [    0,    0.36,   -0.48,    1.24,   -0.32,     3] ];
//
// Altro esempio studiato per far bloccare la tridiagonalizzazione al terzo passo.
//
esempi[2] = [ [   1,   -2,     0,     0,     0,   0],
              [  -2,    1,   0.4,   2.2,     0,   0],
              [ 1.6, -3.6, -0.64, -1.52, -13.8, 0.6],
              [-1.2,  0.2, -1.52,  2.64,  11.6, 0.8],
              [   0,   -1,  -1.4,  -0.2,     1,   3],
              [   0,    0,   0.6,   0.8,     1,   3]];
//
// Altro esempio studiato per far bloccare la tridiagonalizzazione al terzo passo.
//
esempi[3] =[   [ 1, -2,  0,  0,  0],
               [-2,  2,  1,  2,  0],
               [ 0,  3,  1,  0, 18],
               [ 0,  0,  2,  0,  1],
               [ 0,  0,  1, -1,  1]];
//
// Altro esempio studiato per far bloccare la tridiagonalizzazione al terzo passo.
//
esempi[4] =[   [ 1, -2,  0,  0,  0, 0],
               [-2,  1,  1,  2,  0, 0],
               [-2,  3,  2,  2, 18, 0],
               [ 0, -2,  2,  0,  1, 1],
               [ 0, -1,  1, -1,  1, 3],
               [ 0,  0,  0,  1,  1, 3] ];
//
esempi[5] =[   [2.5, 3, 1, 2, 5,-2],
               [  3,-1,-5, 1, 2, 1],
               [  1, 5, 3, 1, 2, 1],
               [  2, 1,-1,-3,-3, 1],
               [  5, 4, 2,-3, 0, 2],
               [  5, 1, 3, 1, 1,-1]];
//
// Un esempio quasi simmetrico ...
//
esempi[6] =[  [ 3, 2, 1, 8.0000000000001],
              [ 2,-1, 4, 1],
              [ 1, 4, 2, 3],
              [ 8, 1, 3,-2] ];
//
esempi[7] = [  [ 1, 1, 0, 1, 0 ],
               [ 0, 3, 2, 0, 0 ],
               [-1,-2, 1, 2, 1 ],
               [ 0, 0,-2, 5, 2 ],
               [-3, 0, 0,-2, 1 ]];
//
esempi[8] = [  [ 1, 1, 1, 1 ],
               [ 1, 2, 3, 4 ],
               [ 1, 3, 6, 10],
               [ 1, 4,10, 20]];
//
// Attenzione: il Durand (Solutions numériques des équations algébriques, Tome II),
// sostiene, a pag. 302, esercizio 3, che gli autovalori della seguente matrice
// sono 1, 1, 2, 2 mentre l'algoritmo QR da' la seconda coppia complessa coniugata...
// Chi ha ragione ?
//
esempi[9] = [ [ -9, -8, -5, -2],
              [ 40, 31, 18, -7],
              [-50,-36,-20, -8],
              [ 20, 14,  8,  4]];
//
esempi[10] = [ [ 9, -8, -11, 8],
              [ 1, -1, -5,  1],
              [ 6,  5,  9,  6],
              [ 8,  8, 11,  9]];
//
// Questa è una matrice che dà risultati sorprendenti. Potrebbe essere interpretata
// come la matrice della discretizzazione di un laplaciano bidimensionale con 
// condizioni al contorno di riflessione perfetta. L'autovalore più piccolo 
// deve valere 0 e il corrispondente autovettore ha tutti gli elementi uguali.
// La cosa strana è che la tridiagonalizzazione provoca la suddivisione della
// matrice in due blocchi indipendenti !
// Notare che la matrice è simmetrica e dunque non c'é bisogno del mio metodo
// necessario per tridiagonalizzare matrici non simmetriche.
// Dato però che la matrice è partizionabile, il mio algoritmo, al passo 9
// segnala che non può applicare la trasformazione "delicata" perché
// il parametro di trasformazione sarebbe infinito. Naturalmente tutto poi
// procede bene perché appunto la matrice è simmetrica e dunque la 
// tridiagonalizzazione è garantita per ragioni di simmetria.
//
esempi[11]= [ [ 2, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
              [-1,  3, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
              [ 0, -1,  3, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0,  0,  0],
              [ 0,  0, -1,  2,  0,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0,  0],
              [-1,  0,  0,  0,  3, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0],
              [ 0, -1,  0,  0, -1,  4, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0],
              [ 0,  0, -1,  0,  0, -1,  4, -1,  0,  0, -1,  0,  0,  0,  0,  0],
              [ 0,  0,  0, -1,  0,  0, -1,  3,  0,  0,  0, -1,  0,  0,  0,  0],
              [ 0,  0,  0,  0, -1,  0,  0,  0,  3, -1,  0,  0, -1,  0,  0,  0],
              [ 0,  0,  0,  0,  0, -1,  0,  0, -1,  4, -1,  0,  0, -1,  0,  0],
              [ 0,  0,  0,  0,  0,  0, -1,  0,  0, -1,  4, -1,  0,  0, -1,  0],
              [ 0,  0,  0,  0,  0,  0,  0, -1,  0,  0, -1,  3,  0,  0,  0, -1],
              [ 0,  0,  0,  0,  0,  0,  0,  0, -1,  0,  0,  0,  2, -1,  0,  0],
              [ 0,  0,  0,  0,  0,  0,  0,  0,  0, -1,  0,  0, -1,  3, -1,  0],
              [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0, -1,  0,  0, -1,  3, -1],
              [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, -1,  0,  0, -1,  2]];
// ______________________________________________________________________________
//
// Prima di iniziare i test viene chiamata la function ultimicalcoli che effettua
// gli ultimi aggiustamenti delle matrici di esempio:
//
//
function ultimicalcoli(){
    var nn,xx,aa,bb,ax,uax,serve;
    xx=confirm("Vuoi modificare l'esempio "+nes+" ? Schiaccia O.K.");
    if(xx) {
        nn=esempi[nes].length;
        aa=new ARMA(nn,nn);
        bb=new ARMA(nn,nn); // e' una matrice di servizio di tipo ARMA
        ax   = new VDV(nn);
        uax  = new VDV(nn);
        serve= new VDV(nn);
        davetdivet(aa,ax.m);
        clip_inversa(aa,bb);
        invetdivet(aa,uax.m);
        mprodotto(esempi[nes],ax.m,serve.m,1);
        mprodotto(uax.m,esempi[nes],serve.m,2);
        }
    }
// ______________________________________________________________________________
//
// ]]>
//