// Metodi ad un punto
//
// Funzione che definisce il metodo
//
function y = H(x)
    y = exp(-x)
endfunction
//
// Valore iniziale, errore richiesto e numero massimo di iterazioni
//
x0 = 1/2;
E = 1d-16;
KMAX = 100;
//
// inizio iterazioni
//
x = x0;
x($+1) = H(x($));
k = 1; // indice della successione
while abs(x($) - x($-1)) > E & k < KMAX,
    x($+1) = H(x($));
    k = k+1;
end;
//
// fine iterazioni
//
if k == KMAX then info = 2; else info = 1; end;
printf('\n*** info = %d , x(%d) = %15.6e\n', info, k, x($));
// genera nella console le tre righe:
// (1)
// (2)*** info = 1 , x(63) =    5.671433e-01
// (3)
// La 'stringa di formattazione' \n significa 'a capo'. Le stringhe %d e
// %15.6e specificano il formato di visualizzazione del valore delle
// corrispondenti variabili: %d specifica che il valore
// (un numero intero) deve essere scritto utilizzandi la usuale notazione
// posizionale in base dieci; %15.6e specifica che il valore (un numero reale)
// deve essere scritto, utilizzando almeno 15 caratteri in totale
// (eventualmente inserendo spazi in testa), nella forma:
//                   [segno] c(0).c(1)...c(6) e [segno] esponente
// (il 6 che compare nel formato indica il numero di cifre da utilizzare
//  dopo il punto decimale).
//
// grafici
//
clf();
subplot(211);
// La finestra grafica viene suddivisa 2 sottofinestre
// allineate verticalmente:
//
//                  +-----------------+
//                  | sottof numero 1 |
//                  +-----------------+
//                  | sottof numero 2 |
//                  +-----------------+
//
// e viene selezionata la sottofinestra numero 1
t = linspace(0,1,200)';
plot2d(t,[H(t),t], style=[2,5]);
xgrid(); xlabel('x'); ylabel('y'); legend('y = H(x)','y = x');
plot2d(x($),H(x($)), style = -2);
//
subplot(212); // viene selezionata la sottofinestra numero 2
L = exp(-1/2);
d0 = abs(x0 - x($));
indice = (0:k)';
plot2d('nl',indice,L^(indice) * d0, style = 5);
plot2d('nl',indice,abs(x - x($)), style = 2);
xgrid(); xlabel('k'); ylabel('y');
//
legend('L^k * |x(0) - x($)|','|x(k) - x($)|');

