//
// Test per newtonNd: intersezione di due parabole.
//
// Parte 1: assegnare g = 0. Soluzioni esatte: (0,0) e (1,1).
// (a) Assegnare x0 = [1;-1]. Osservare i grafici della stima
//     dell'errore e dell'ordine di convergenza, calcolare la matrice
//     jacobiana in (0,0) e verificarne la non singolarità.
// (b) Assegnare x0 = [1;0] e sostituire "loquace" con "zitto" nell'uso
//     della funzione newtonNd (altrimenti l'esecuzione si arresta
//     nel desegnare l'ultimo grafico). Verificare che il metodo
//     supera il numero di iterazioni massimo perché la successione
//     calcolata (si trova in XX) è periodica (e quindi è inutile
//     aumentare il numero massimo di iterazioni).
// (c) Cercare x0 in modo che la successione abbia limite (1,1),
//     osservare i grafici della stima dell'errore e dell'ordine di
//     convergenza, calcolare la matrice jacobiana in (1,1) e
//     verificarne la non singolarità.
//
// Parte 2: assegnare g = 1/4. Soluzione esatta: (1/2,1/2).
//     Assegnare x0 = [1;-1]. Osservare i grafici della stima
//     dell'errore e dell'ordine di convergenza, calcolare la matrice
//     jacobiana in (1/2,1/2) e verificarne la singolarità. Calcolare il
//     determinante della matrice jacobiana nel punto z.
//
Percorso = "PERCORSO newtonNd.sci"; // <----------- *** MODIFICARE ***
exec(Percorso + "newtonNd.sci");
//
g = 0;
//g = 1/4;
//
function y = f_test(x)
    y = [x(1)^2 - x(2) + g;
        -x(1) + x(2)^2 + g]
endfunction
//
function j = df_test(x)
    j = [2*x(1),     -1;
             -1, 2*x(2)]
endfunction
//
// *** Ricerca zeri
//
x0 = [1; -1];
E_newt = 1d-8;
kmax = 30;
//
[z,v,info,XX] = newtonNd(f_test,x0,df_test,E_newt,kmax,"loquace");
//
// *** Fine ricerca zeri
//
printf("z ="); disp(z);
printf("v ="); disp(v);
printf("info ="); disp(info);
//
// Grafici
//
scf(0);clf();
// Disegna i grafici delle due curve da intersecare, la successione
// generata dal metodo di Newton (cerchietti verdi) e il punto z
// (crocetta rossa).
tt = linspace(-2,2,100);
plot(tt,tt.^2+g);plot(tt.^2+g,tt);
plot(XX(1,:),XX(2,:),"go--",z(1),z(2),"r+");
xlabel("x(1)");
ylabel("x(2)");
xgrid();
//
