Questo è un metodo di bisezione usato per trovare la radice di una funzione.
Prendiamo una funzione e due punti sull'asse delle ascisse tali che $f(A)<0$ e $F(B)>0$.
Se la funzione è continua, esiste un punto $f(C)$ con $A<C<B$ per cui risulta $f(C)=0$.
Dividiamo il segmento a metà, AZ e ZB. Se C è contenuto in AB, si scarta ZB, altrimenti viceversa.
Dividiamo il segmento a metà...
Andiamo avanti finchè non troviamo un valore $Z : f(Z)~=0$
Le condizioni:
- Codice:
if (fx==0) return x;
if (fy==0) return y;
if (fz==0) return z;
significano che se la funzione in quel punto vale 0, si è trovata la radice.
1e-8 è un numero molto piccolo scelto arbitrariamente, cioè $1*10^(-8)=0.00000008$.
La condizione
- Codice:
if ((y-x)<1e-8) return z;
significa: se la differenza tra i due valori è minore di 0.00000008, cioè sufficientemente piccola, la consideriamo un'approssimazione accettabile, prendiamo come soluzione il punto medio e fermiamo la ricorsione.
Le ultime condizioni, cioè
- Codice:
if (fx*fz<0)
return bisezione(x,z)
else
return bisezione(z,y);
sono il centro della ricorsione.
Cioè: se il prodotto è negativo, significa che $f(x)$ e $f(z)$ sono uno negativo e l'altro positivo, pertanto la radice deve trovarsi in questo intervallo, quindi
return bisezione(x,z) significa "riapplica il nuovo passo di ricorsione sui punti x e z"..
Se, invece, il prodotto è negativo, vuol dire che entrambi i punti sono positivi o negativi, quindi la soluzione deve trovarsi nell'altra metà, quindi si prende l'altra.