//
// Per ciascuna delle seguenti funzioni determinare, con errore assoluto
// non superiore a 1d-12, tutti gli zeri negli intervalli specificati.
//
function y = f_test_1(x) // [1,7]: z = pi, z = 2 pi
    y = sin(x)           //   pi = 3.14159 26535 89793 23846...
                         // 2 pi = 6.28318 53071 79586 47692...
endfunction
//
function y = f_test_2(x) // [-1,1]: z = 1/10
    y = x.^3 - 0.001
endfunction
//
function y = f_test_3(x) // [0,1]: z = 1/3
    y = log(x + 2/3)
endfunction
//
function y = f_test_4(x) // [0,5]: z = sqrt(3)
                         //          = 1.73205 08075 68877 29352...
    y = atan(x) - %pi/3
endfunction
//
function y = f_test_5(x) // [0,5]: nessuno zero. Cosa accade in x = pi?
                         // Studiare la continuità della funzione.
                         // Come si spiegano i grafici disegnati?
    y = (1) ./ (x - %pi)
endfunction
//
function y = f_test_6(x) // [-10,10]: z = 2, z = -2
    y = x.^4 - 2*x.^2 - 8
endfunction
//
function y = f_test_7(x) // [-10,10]: z = 1, z = 2
    y = x.^6 - 9*x.^3 + 8
endfunction
//
function y = f_test_8(x) // [-10,10]: z = -1, z = 2
                         // z = -1 ha molteplicità due...
    y = x.^3 - 3*x - 2
endfunction
//
function y = f_test_9(x) // [-2,10]: z = 2
                         // Attenzione: valori di x minori di -2 portano
                         // ad un comportamento anomalo della procedura
                         // di bisezione (che NON è pensata per funzioni
                         // a valori complessi!)
    y = sqrt(x + 2) - x
endfunction
//
function y = f_test_10(x) // [-10,10]: z = -2, z = 2
                          // La funzione z^(1/3) restituisce il valore
                          // principale della radice cubica come
                          // funzione sui complessi...
    function s = RadiceCubica(t)
        s = sign(t).*(abs(t)).^(1/3)
    endfunction
    y = RadiceCubica(x.^3 + x.^2 - 4) - x
endfunction
//
function y = f_test_11(x) // [0,10]: z = (log(3)/log(2))^2
                          //           = 2.51210 61286 92261 00901...
    y = 2.^sqrt(x) - (6)./(2.^sqrt(x)) - 1 
endfunction
//
function y = f_test_12(x) // [0,2 pi]: z = pi/2, z = pi/6, z = 5 pi/6
                          //   pi/2 = 1.57079 63267 94896 61923...
                          //   pi/6 = 0.52359 87755 98298 87307...
                          // 5 pi/6 = 2.61799 38779 91494 36538...
                          // Ma z = p/2 è zero di molteplicità due...
    y = sin(x).^2 - 3*sin(x) - cos(x).^2 + 2 
endfunction
//
// Ricerca zeri
//
Percorso_bis='/home/maurizio/Documents/Scienza/Scilab/Zeri/Metodi/';
exec(Percorso_bis + 'bisezione.sci');
//
a = 1;
b = 7;
tol = 2d-12;
kmax = 60;
//
[z,v,info] = bisezione(f_test_1,a,b,"assoluto",tol,kmax,"loquace");
//
format("e",25);
printf("z =");disp(z);
printf("v =");disp(v);
format("v");
printf("info =");disp(info);
format("e");
//
// grafici
//
scf(0); clf(0);
//
t = linspace(a,b,400);
//
plot(t,f_test_1(t),"b");
plot(z,v,"ro");
// griglia
xgrid();
// etichetta asse orizzontale
xlabel("t");
// legenda
legend("f_test","(z,f(z))")
//