import numpy as np
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit
Inserire in queste celle SOLO in corrispondenza delle linee precedute da >>> i valori
ATTENZIONE: il righello graduato non è in centimetri bensì in millimetri
# >>> Tensioni impostate
Tensioni = np.array((3000, 3500, 4000, 4500, 5000)) # V
# Calcolo la radice dell'inverso
TensioniInvRad = Tensioni ** (-1/2)
# >>> Valori misurati per i diametri (in mm)
Diametro1 = np.array((34.57, 32, 31, 29, 28)) * 1e-3 # m
Diametro2 = np.array((27, 25, 25, 23, 22)) * 1e-3 # m
# >>> Errori sulle misure (in mm)
err1 = np.array((1, 1, 1, 1, 1, )) * 1e-3 # m
err2 = np.array((1, 1, 1, 1, 1, )) * 1e-3 # m
# Costanti naturali
L = 0.13 # m
h = 6.63e-34 # J s
m = 9.11e-31 # kg
e = 1.60e-19 # C
Qui viene eseguito il plot dei dati sperimentali ed il fit con una retta
fig, ax = plt.subplots()
fig.set_size_inches(12, 5)
ax.errorbar(TensioniInvRad, Diametro1, yerr = err1, marker = "*", ls = "",
label = "Diametro 1", c = "tab:orange")
ax.errorbar(TensioniInvRad, Diametro2, yerr = err1, marker = "*", ls = "",
label = "Diametro 2", c = "tab:green")
# Faccio il fit lineare
def myLine(x, m, q):
return m*x + q
popt1, pcov1 = curve_fit(myLine, TensioniInvRad, Diametro1, sigma = err1, absolute_sigma = True)
popt2, pcov2 = curve_fit(myLine, TensioniInvRad, Diametro2, sigma = err2, absolute_sigma = True)
ax.plot(TensioniInvRad, myLine(TensioniInvRad, *popt1), ls = "--",
c = "tab:orange", label = "fit 1")
ax.plot(TensioniInvRad, myLine(TensioniInvRad, *popt2), ls = "--",
c = "tab:green", label = "fit 2")
ax.set_xlabel("$V^{-1/2}$", fontsize = 14)
ax.set_ylabel("Diametri (m)", fontsize = 14)
ax.grid()
ax.legend(fontsize = 14)
plt.show()
Questa cella permette di calcolare la distanza interatomica a partire dalle costanti naturali e dalla slope ricavata mediante fit
def distInteratom(slope):
return 2*L*h / (slope * np.sqrt(2*m*e))
print(f"La distanza interatomica per il primo set di dati vale {distInteratom(popt1[0])*1e9:.2e} nm")
print(f"La distanza interatomica per il secondo set di dati vale {distInteratom(popt2[0])*1e9:.2e} nm")
La distanza interatomica per il primo set di dati vale 2.02e-01 nm La distanza interatomica per il secondo set di dati vale 2.75e-01 nm