Soluzione numerica di equazioni
Il metodo delle corde (o della secante)
algoritmo PhP
caso 1 caso 2 caso 3 caso 4

Questo metodo permette di approssimare le soluzioni di un'equazione $f(x) = 0$ (o che è lo stesso di calcolare gli zeri della funzione $y = f(x)$ in un intervallo [a, b] alla condizione di saper calcolare la funzione in tutto l'intervallo.

Prima di tutto è necessario separare le soluzioni e cioè individuare gli intervalli nei quali cadono le singole soluzioni. Una volta individuato un intervallo $[x_0, x_1]$ nel quale cade una soluzione si può passare all'approssimazione della soluzione.

Nel disegno accanto la funzione $y=f(x)$ attraversa l'asse delle $x$ tra $x_0$ e $x_0$. Dei due punti $P_0$ e $P_1$ possiamo calcolare le ordinate $y = f(x)$.

Viene allora naturale l'idea di tracciare il segmento di retta $P_0 P_1$ (ovvero la $corda$ o $secante$) che unisce i due punti; tale segmento incontrerà l'asse delle $x$ per un'ascissa che possiamo prendere come prima approssimazione della soluzione cercata.

questa approssimazione si può calcolare facilmente determinando l'equazione della retta per due punti e quindi calcolando l'intersezione tra questa retta e l'asse delle $x$. Si può anzi ricavare la seguente formula iterativa che fornisce l'approssimazione $x$ in funzione delle coordinate dei due punti:

$$x = x_0 - y_0\frac{x_1 - x_0}{y_1 - y_0}$$

Una volta calcolata questa approssimazione $x$, il procedimento si può iterare, calcolando il valore della $y = f(x)$, sostituendo questo punto a uno dei due precedenti, a seconda dei quattro casi possibili, conducendo una nuova secante, calcolando una seconda approssimazione e così via.

	Ripeti
		x ← x0 - y0*(x1-x0)/(y1-y0);
		y ←  f(x);
		se (y y1 hanno lo stesso segno){
			x1 ←  x; y1 ←  y;
		altrimenti
			x0 ←  x; y0 ←  y;
	Finché la differenza (x1-x0) non è minore della precisione desiderata

L'algoritmo è convergente, nel senso che fissato un margine di errore piccolo quanto si vuole, si troverà sempre una approssimazione per la quale l'errore è minore di tale margine. Ne segue che in teoria l'algoritmo precedente si fermerà sempre quale che sia la precisione desiderata. Nel mondo reale però i numeri possono rappresentarsi solo con un numero finito di cifre, e quindi se si richiede una precisione troppo piccola può accadere che l'algoritmo possa andare in loop infinito se per errori di arrotondamento la differenza tra i due numeri $x_1$ e $x_0$ non arrivi mai a zero. Per essere assolutamente sicuri a volte si sostituisce la logica del "ripeti" in un "ripeti n volte" con $n$ stimato a priori come un numero di iterazioni sufficienti a dare la precisione desiderata.

Detto questo, l'algoritmo si implementa facilmente in un qualsiasi linguaggio di programmazione; si veda p.es. quello in Php.


Esempi