import numpy as np import matplotlib.pyplot as plt # Fréquences en Hz frequences = np.array([11.825,10.111,8.210,7.4129,6.8838])*1e14 u_frequences = np.array([2.3,1.7,1.1,0.91,0.79])*1e12 # Ec en J Ec = np.array([2.40,1.69,0.91,0.57,0.35])*1.6e-19 u_Ec = 0.05*1.6e-19 ## Régression linéaire # Calcul de la valeur centrale de la mesure par régression linéaire h,ordonnee = np.polyfit(frequences,Ec,1) ## Simulation Monte-Carlo pour estimer l'incertitude-type # Nombre de simulations pour estimer l'incertitude-type N = 1000 # Initialisation des listes liste_h,liste_ordonnee = [], [] for i in range(N): l = len(frequences) my = Ec + u_Ec*np.sqrt(3)*np.random.uniform(-1,1,l) mx = frequences + u_frequences*np.sqrt(3)*np.random.uniform(-1,1,l) p=np.polyfit(mx,my,1) liste_h.append(p[0]) liste_ordonnee.append(p[1]) u_h = np.std(liste_h,ddof=1) u_ordonnee = np.std(liste_ordonnee,ddof=1) ## Tracé de la régression xfit=np.linspace(min(frequences),max(frequences),2) plt.plot(xfit, ordonnee + h*xfit, 'r', label='Régression linéaire') plt.errorbar(frequences,Ec,xerr=u_frequences ,yerr=u_Ec,fmt='b+',zorder=2,label='Mesures') plt.title("Tracé de l'évolution de l'énergie des électrons en fonction de la fréquence") plt.xlabel("Fréquence en Hz") plt.ylabel("Énergie cinétique en J") plt.legend() plt.show() ## Affichage du résultat print('constante de Planck=',h) print('incertitude sur la constante de Planck=',u_h) nu_s = -ordonnee/h u_nu_s = nu_s * np.sqrt((u_ordonnee/ordonnee)**2 + (u_h/h)**2 ) print('frequence de seuil =',nu_s) print('incertitude sur la frequence de seuil=',u_nu_s)