Metodo numerico  di Newton per il calcolo della radice ennesima



Per la radice quadrata il metodo di Erone di Alessandria dice che se y è una approssimazione della radice quadrata di x allora

x/(2*y)+y/2

sarà una approssimazione migliore.

Per la radice cubica:

x/(3*y^2)+2*y/3

Per la radice di ordine n:

x/(n*y^(n-1))+(n-1)*y/n

Ecco il listato di un programma in Python che calcola ricorsivamente la radice ennesima di un numero x

"""Calcolo della radice ennesima con il metodo di Newton"""

def preciso(y,x,n):
    if abs(y**n-x)<0.0000001:
        return True
    else:
        return False
   
def migliora(y,x,n):
    if preciso(y,x,n):
        print y
        return y
    else:
        print y
        return migliora(((n-1)*y+x/y**(n-1))/n,x,n)
       
def radice(x,n=2):
    n=float(n)
    return migliora(x/n,x,n)

La terza definizione si riferisce alla radice del numero x di ordine n. Se l'ordine non viene indicato si considera di ordine 2.

Questa funzione lancia la funzione ricorsiva migliora che continua a migliorare l'approssimazione della radice finchè una apposita funzione preciso riporti che la precisione desiderata è stata raggiunta.

La funzione migliora  svolge anche il compito di stampare le succesive approssimazioni della radice ennesima, indicate con y.

Dimostrazione

Secondo il celebre metodo delle tangenti di Newton dovendo risolvere una equazione del tipo

f(x)=0

se x0 è un'approssimazione dello zero della funzione, sarà una approssimazione migliore

x1=x0-f(x0)/Df(x0)

dove Df è la derivata della funzione f(x).


Avviso: cambiamento di simboli
In realtà per trovare la radice quadrata x di k, si tratta di trovare lo zero della funzione

f(x)=x2-k

Lo zero di una funzione è quel valore di x che rende appunto zero il valore della funzione.
Procedendo con le approssimazioni successive di Newton  dobbiamo trovare la derivata:

f'(x)=2*x

Allora se x è l'approssimazione corrente, l'approssimazione successiva sarà:

x-(x2-k)/(2*x)

Con una semplicissima approssimazione si avrà:

x/2+k/(2*x)

Ripetendo questo passaggio si può ottenere una approssimazione via via migliore  della radice quadrata di k.
Ovviamente il ragionamento si può generalizzare per trovare la radice ennesima:

f(x)=xn-k

f'(x)=n*x(n-1)

Allora se x è l'approssimazione corrente, l'approssimazione successiva sarà:

x-(xn-k)/(n*x(n-1))

Con una semplicissima semplificazione si avrà:

(n-1)*x/n+k/(n*x(n-1))

Il metodo di Newton converge rapidamente. Ma ci si può chiedere da quale valore di x conviene partire ? I dettagli sono complicati, rifacendosi però al testo Maraschini Palma "ForMat Spe" III ed. Paravia pag. 146 conviene partire da un valore più grande della radice ennesima. Per esempio  per x>1, si può scegliere come prima approssimazione x/n.

L'algoritmo è comunque valido anche se si applica a valori di  x minori di uno.