Radice quadrata con metodo babilonese
Esegue 5 passi dell’algoritmo e visualizza la sequenza delle approssimazioni
1 2 3 4 5 6 |
n=256 x=n/2 for i in range(5): x=(x+n/x)/2 print(i, ':', x) |
Evidenzia che: date due approssimazioni, la loro media è un’approssimazione migliore…
1 2 3 4 5 6 7 8 |
n=256 xM=n/2 for i in range(5): xA=xM xB=n/xA xM=(xA+xB)/2 print(i, ':', xA, xB, xM) |
Input da tastiera
1 2 3 4 5 6 7 8 9 |
n=float(input("n = ")) passi=int(input("Passi = ")) xM=n/2 for i in range(passi): xA=xM xB=n/x1 xM=(xA+xB)/2 print(i, ':', xA, xB, xM) |
Output formattato per colonne
1 2 3 4 5 6 7 8 9 |
n=float(input("n = ")) passi=int(input("Passi = ")) xM=n/2 for i in range(passi): xA=xM xB=n/xA xM=(xA+xB)/2 print("%2d %15.8f %15.8f %15.8f" %(i, xA, xB, xM)) |
Valutazione dell’errore assoluto
1 2 3 4 5 6 7 8 9 10 |
n=float(input("n = ")) passi=int(input("Passi = ")) xM=n/2 for i in range(passi): xA=xM xB=n/xA xM=(xA+xB)/2 eA=abs(xA-xM) print("%2d %15.8f %15.8f %15.8f %15.8f" %(i, xA, xB, xM,eA)) |
Valutazione dell’errore assoluto e dell’errore relativo
1 2 3 4 5 6 7 8 9 10 11 |
n=float(input("n = ")) passi=int(input("Passi = ")) xA=n/2 for i in range(passi): xA=xM xB=n/xA xM=(xA+xB)/2 eA=abs(xA-xM) eR=eA/xM print("%2d %15.8f %15.8f %15.8f %15.8f %15.8f" %(i, xA, xB, xM, eA, eR)) |
L’iterazione continua se l’errore relativo è ancora troppo grande
1 2 3 4 5 6 7 8 9 10 11 12 |
ER=0.01 eR=1.00 n=float(input("n = ")) xM=n/2 while(eR >= ER): xA=xM xB=n/xA xM=(xA+xB)/2 eA=abs(xA-xM) eR=eA/xM print("%15.8f %15.8f %15.8f %15.8f %15.8f" %(xA, xB, xM, eA, eR)) |
matplotlib
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import matplotlib.pyplot as plt X =[] XA=[] XB=[] XM=[] n=256 ER=0.01 eR=1.00 xM=n/2 i=1 while(eR >= ER): xA = xM xB = n/xA xM = (xA+xB)/2 eA = abs(xA-xM) eR = eA/xM print("%i %12.6f %12.6f %12.6f %12.6f %12.6f" %(i+1, xA, xB, xM, eA, eR)) X.append(i) XA.append(xA) XB.append(xB) XM.append(xM) i+=1 plt.grid() plt.plot(X,XA, label="xA", linewidth="2") plt.plot(X,XB, label="xB", linewidth="2") plt.plot(X,XM, label="xM", linewidth="3") plt.title("Metodo babilonese, n = " + str(n)) plt.xlabel("Iterazione") plt.ylabel("Approsimazione") plt.legend() plt.show() |
Forse … Leggi tutto