Relation de conjugaison d'une lentille et régression linéaire

Principe de l'expérience


L'objectif est de tester la validité de la relation de conjugaison, avec origine au centre optique, d'une lentille mince : \begin{equation}\mathsf{ \frac{1}{\overline{OA'}}-\frac{1}{\overline{OA}}=\frac{1}{f'} \\ } \end{equation}

Pour ce faire, un banc optique est équipé avec :

  • une source lumineuse éclairant un objet,
  • une lentille convergente,
  • un écran.

L'objet est maintenu fixe. L'expérimentateur déplace la lentille. Pour chaque position de la lentille, il déplace l'écran jusqu'à y observer une image nette de l'objet.

Sources d'incertitudes


Les abscisses de l'objet, de la lentille et de l'écran sont lues sur une règle graduée au $\mathsf{mm}$. L'expérimentateur estime que les lectures des abscisses de l'objet et de la lentille se font à $\mathsf{1 mm}$ près, c'est-à-dire que si la valeur lue est de $\mathsf{1,5 cm}$, alors la valeur réelle doit être comprise entre $\mathsf{1,4}$ et $\mathsf{1,6 cm}$.

La détermination de l'abscisse de l'écran est moins précise car deux sources d'incertitudes peuvent intervenir :

  • choix de la position associée à une image nette,
  • lecture sur la règle graduée du banc optique.

Pour l'abscisse de l'écran, on propose de dire que l'abscisse est connue à $\mathsf{5 mm}$ près, c'est-à-dire que si la valeur mesurée est de $\mathsf{52,3 cm}$, la valeur réelle est estimée comprise entre $\mathsf{51,8}$ et $\mathsf{52,8 cm}$.

Valeurs mesurées


Les valeurs mesurées des abscisses de l'objet, de la lentille et de l'écran (respectivement $\mathsf{x_{obj}}$, $\mathsf{x_{len}}$ et $\mathsf{x_{ecr}}$) sont rassemblées dans le tableau suivant : \begin{array}{c} \mathsf{x_{obj} (cm)} & \mathsf{10,0} & \mathsf{10,0} & \mathsf{10,0 } & \mathsf{10,0} & \mathsf{ 10,0} \\ \hline \mathsf{x_{len}(cm) } & \mathsf{ 21,5 } & \mathsf{ 26,5 } & \mathsf{31,5 } & \mathsf{ 36,5 } & \mathsf{ 41,5} \\ \hline \mathsf{x_{ecr}(cm) } & \mathsf{ 89,2 } & \mathsf{ 51,4 } & \mathsf{ 50,5 } & \mathsf{ 53,1 } & \mathsf{ 56,7 } \end{array}

Explicitation du script


Importation des bibliothèques

La bibliothèque numpy est utilisée pour réaliser des calculs et simuler un processus aléatoire (module random).

La bibliothèque matplolib permet de tracer des graphiques.

In [ ]:
# Importation des bibliothèques

import numpy as np
import matplotlib.pyplot as plt       

Tracé et régression linéaire

Si la relation de conjugaison est validée, alors le nuage de points \begin{equation}\mathsf{ \frac{1}{\overline{OA'}}-\frac{1}{\overline{OA}}=\frac{1}{f'} \\ } \end{equation} doit raisonnablement être assimilbale à une droite de coefficient directeur $\mathsf{1}$ et d'ordonnée à l'origine $\mathsf{\frac{1}{f'}}$.

Les données d'abscisses sont d'abord saisies dans trois listes, avant de créer deux listes permettant de stocker les valeurs des ordonnées et des abscisses du nuage de points.

In [ ]:
#Abscisses de l'objet, de la lentille et de l'écran
xO = [10.0 , 10.0 , 10.0 , 10.0 , 10.0]
xL = [21.5 , 26.5 , 31.5 , 36.5 , 41.5]
xE = [89.2 , 51.4 , 50.5 , 53.1 , 56.7]

#Calcul des ordonnées et abscisses 
X = [100/(xO[i] - xL[i]) for i in range(len(xL))]   # en m^(-1)
Y = [100/(xE[i] - xL[i]) for i in range(len(xL))]   # en m^(-1)

#Tracé de 1/OA' en fonction de 1/OA
plt.figure(1)
plt.plot(X,Y,'o')
plt.title("1/OA' en fonction de 1/OA")
plt.xlabel("1/OA en $m^{-1}$")
plt.ylabel("1/OA' en $m^{-1}$")
plt.grid()
plt.show()

A première vue, le nuage de points semble assimilable à une droite. Il est possible de procéder à une régression linéaire grâce à la fonction np.polyfit(abscisse,ordonnée,degré).

La fonction np.polyval([liste des coefficient du polynôme,argument X0) permet de calculer la valeur en un point X0 donné du polynôme modèle.

In [ ]:
#Tracé de 1/OA' en fonction de 1/OA et de la droite de régression
p=np.polyfit(X,Y,1)

plt.figure(2)
plt.plot(X,Y,'o')
plt.plot(X,np.polyval(p,X))
plt.title("1/OA' en fonction de 1/OA")
plt.xlabel("1/OA en $m^{-1}$")
plt.ylabel("1/OA' en $m^{-1}$")
plt.grid()
plt.show()
print(f"Coefficient directeur : {p[0]}")
print(f"Ordonnée à l'origine : {p[1]} m^(-1)")
Coefficient directeur : 0.9212862688619473
Ordonnée à l'origine : 9.528086311309236 m^(-1)

Ajout de barres d'erreur

Pour estimer les incertitudes-type sur les abscisses et les ordonnées, il est possible d'utiliser la méthode de Monte-Carlo, qui consiste à simuler des valeurs pour les variables expérimentales dans un intervalle autour de valeurs mesurées. Faisons cette simulation pour un jeu de valeurs expérimentales : $\mathsf{x_{obj}=10,0 cm}$, $\mathsf{x_{len}=31,5 cm}$ et $\mathsf{x_{ecr}=50,5 cm}$.

Le calcul proposé ici envisage une distribution uniforme pour $\mathsf{x_{obj}}$ et $\mathsf{x_{len}}$, mais triangulaire pour $x_{ecr}$ car on suppose que la valeur retenue par l'expérimentateur était au centre de la plage de netteté.

D'autres choix sont bien entendu possibles.

In [ ]:
#Nombre de tirages
N=10000

#Création de listes pour accueillir les valeurs calculées de Y et X
Xsim,Ysim=[],[]

#Procédure de simulation
for i in range (N):
  XO = np.random.uniform(9.9,10.1)
  XL = np.random.uniform(31.4,31.6)
  XE = np.random.triangular(50.0,50.5,51.0)
  Xsim.append(100/(XO-XL))
  Ysim.append(100/(XE-XL))

u_X=np.std(Xsim,ddof=1)
u_Y=np.std(Ysim,ddof=1)

print(f"Incertitude-type sur X : {u_X} m^(-1)")
print(f"Incertitude-type sur Y : {u_Y} m^(-1)")
Incertitude-type sur X : 0.01753147585432748 m^(-1)
Incertitude-type sur Y : 0.05854605237408696 m^(-1)

On note ici que l'incertitude-type associée aux abscisses est plus faible que celle associée aux ordonnées, ce qui est pertinent pour la réalisation d'une régression linéaire ordinaire.

Disposant d'incertitudes-type, il est possible d'ajouter des barres d'erreur sur le graphique. En général, les barres d'erreur ajoutées ont une amplitude qui est le double de l'incertitude-type.

In [ ]:
plt.figure(3)
plt.errorbar(X,Y, xerr=2*u_X,yerr=2*u_Y,fmt='.')
plt.plot(X,np.polyval(p,X))
plt.title("1/OA' en fonction de 1/OA")
plt.xlabel("1/OA en $m^{-1}$")
plt.ylabel("1/OA' en $m^{-1}$")
plt.grid()
plt.show()
print(f"coefficient directeur : {p[0]}")
print(f"ordonnée à l'origine : {p[1]} m^(-1)")
coefficient directeur : 0.9212862688619473
ordonnée à l'origine : 9.528086311309236 m^(-1)

Il n'est pas aisé sur ce diagramme de voir si les barres d'erreur chevauchent ou non la droite modèle.

Un calcul des résidus pourrait faciliter cet aspect.

Calcul et affichage des résidus

Les résidus sont les écarts en ordonnée entre les points expérimentaux et la droite modèle.

In [ ]:
plt.figure(4)
plt.errorbar(X,Y-np.polyval(p,X),yerr=2*u_Y,fmt='o')
plt.title("Résidus")
plt.xlabel("1/OA en $m^{-1}$")
plt.ylabel("Résidus en $m^{-1}$")
plt.axhline()
plt.grid()
plt.show()

Les barres d'erreur chevauchent la droite de régression. La modélisation peut être considérée valide.

La relation de conjugaison paraît donc valable pour modéliser la relation entre les positions de l'objet et de l'image par rapport au centre optique d'une lentille mince.

La distance focale de la lentille mince utilisée s'identifie à l'inverse de l'ordonnée à l'origine \begin{equation}\mathsf{ f'=\frac{1}{9,528}=0,10495 m \\ } \end{equation}

Obtention de l'incertitude-type sur la distance focale


Pour estimer les incertitudes associées aux paramètres de la régression, il est possible de simuler une répétition, un très grand nombre de fois, de la régression linéaire.

Pour cela, on peut tirer au sort des valeurs pour les points expérimentaux en tenant compte des incertitudes calculées précédemment sur les valeurs des abscisses et des ordonnées.

Le tirage au sort de valeurs d'abscisses et d'ordonnées peut s'opérer grâce à la fonction np.random.normal(valeur centrale,écart-type). Le choix de cette fonction est permis par le fait que les incertitudes-type soient connues.

Deux listes, A et B, sont créées pour accueillir les valeurs calculées successives simulées du coefficient directeur et de l'ordonnée à l'origine.

Une dernière liste utilisée ici permet de stocker les valeurs de la distance focale afin d'obtenir l'incertitude-type sur cette distance caractéristique de la lentille mince.

In [ ]:
# Nombre de simulations MC
N = 100000

# Listes destinées à accueillir les valeurs successives des coefficients directeur et ordonnée à l'origine
A = []
B = []
F = []

# Réalisation de la simulation
for n in range(0,N):
    Xsim2,Ysim2=[],[]
    for i in range(len(xL)) :
      Xsim2.append(np.random.normal(X[i],u_X))
      Ysim2.append(np.random.normal(Y[i],u_X))
    p = np.polyfit(Xsim2,Ysim2,1)
    A.append(p[0])
    B.append(p[1])
    F.append(1/p[1])

# Calcul des incertitudes-type
u_A=np.std(A,ddof=1)
u_B=np.std(B,ddof=1)
u_F=np.std(F,ddof=1)

# Affichage des résultats
print(f"Incertitude-type sur le coefficient directeur : {u_A}")
print(f"Incertitude-type sur l'ordonnée à l'origine : {u_B} m^(-1)")
print(f"Incertitude-type sur la distance focale : {u_F} m")
Incertitude-type sur le coefficient directeur : 0.005462120100645767
Incertitude-type sur l'ordonnée à l'origine : 0.030676213150441334 m^(-1)
Incertitude-type sur la distance focale : 0.0003379060644759603 m

En vertus de ces résultats, la distance focale de la lentille utilisée est : \begin{equation} \boxed{ \begin{array}{rcl} {\mathsf{f'=10,495cm} \\ \mathsf{u_{f'}=00,034cm}} \end{array} } \end{equation}