Physique et informatique - Entrainement#
Ces exercices proposent de s’entrainer à l’utilisation de Python en physique dans le cadre de l’optique. On n’utilisera pas ici de méthode numérique particulière, simplement le tracé graphique et l’utilisation de numpy
.
Etude théorique#
Cette partie est semblable à un exercice d’entrainement classique.
On considère un axe Ox et on supposera par la suite que tous les axes optiques des systèmes centrées mis en jeu sont confondus avec Ox. On repèrera donc la position longitudinale de tout objet, image ou lentille par une coordonnées
On choisi un axe
Mise en équation
On considère une lentille placé à la coordonnée
, de distance focale et un objet lumineux situé à une coordonnée et de taille . Exprimer la position et la taille de l’image de cet objet par la lentille et montrer que :
On va considérer pour l’étude numérique un système à trois lentilles
Les lentilles
On rappelle que lorsque deux lentilles de distances focales
Cas extrêmes.
Justifier que lorsque
Partie code#
Vous allez maintenant vous entraîner à coder en Python. Lorsqu’on code des problèmes physiques, il est important de savoir sous quelle forme/type on va coder les objets physiques. Ici:
Les objets et les images seront représentés par des listes de deux flottants
obj <- [xi, yi]
oùxi
etyi
représentent les coordonnées de l’objet (position sur Ox et taille sur Oy).Les lentilles seront représentées par des listes de deux flottants
L1 <- [xL, f]
oùxL
représente la position sur Ox de la lentille etf
la distance focale image de la lentille.
# Exemples
objet1 = [-3, 1] # Objet ou image en x=-3 de taille y=1
lentille1 = [2, -1] # Lentilles en x=2 de distance focale f=-1
print(objet1[0]) # Quelle valeur est affichee ? A quelle grandeur physique correspond-elle ?
Lorsqu’on étudiera le système
Codons
Ecrire une fonction
image(L:list, objet:list) --> list
qui prend comme argument:L
: une liste représentant une lentilleobjet
: une liste représentant un objet
et qui renvoie une liste représentant l’image de l’objet par la lentille.
Se servir de la fonction image pour trouver la position de l’image finale donnée par le système
lorsque est au milieu de et pour un objet situé 1m avant le système.Ecrire une procédure
systeme(objet:list) --> list
qui prend comme argument un objet et qui renvoie la position finale après le système .Pour 100 positions équiréparties d’objet entre 100m et 1m, tous de taille 1, obtenir, sous forme de liste les positions des images correspondant. On devra pour cela:
Utiliser la fonction
numpy.linspace
pour créer un vecteur position d’objet équiréparties.Utiliser une boucle pour obtenir et stocker les positions d’image obtenues dans une liste.
Modifier le programme précédent pour obtenir aussi dans une seconde liste, les tailles des images.
Tracer 2 graphiques représentant la position ou la taille de l’image en fonction de la position de l’objet.
Show code cell source
#1
def image(L: list, objet:list) -> list:
xL = L[0]
f = L[1]
xO = objet[0]
yO = objet[1]
return [xL + (f * (xO -xL) ) / (f + xO - xL), yO * f / (f + xO - xL)]
#2
f2 = -6
f4 = -6
f3 = 3.5
x4 = f4 + f2 * f3 / (f2 + f3)
image1 = image([0, f2], [-100, 1])
image2 = image([x4 / 2, f3], image1)
imagef = image([x4, f4], image2)
print(imagef[0])
#3
def systeme(objet:list) -> list:
f2 = -6
f4 = -6
f3 = 3.5
x4 = f4 + f2 * f3 / (f2 + f3)
image1 = image([0, f2], objet)
image2 = image([x4 / 2, f3], image1)
imagef = image([x4, f4], image2)
return imagef
#4 et #5
import numpy as np
pos_objet = np.linspace(-10000, -100, 100)
images_pos = []
images_taille = []
for pos in pos_objet:
imagef = systeme([pos, 1])
images_pos.append(imagef[0])
images_taille.append(imagef[1])
#6
import matplotlib.pyplot as plt
f, ax = plt.subplots()
f.suptitle("Position des images")
ax.set_xlabel('Objet(cm)')
ax.set_ylabel('Image(cm)')
ax.plot(pos_objet, images_pos)
ax.grid()
f, ax = plt.subplots()
f.suptitle("Taille des images")
ax.set_xlabel('Objet(cm)')
ax.set_ylabel('Image(cm)')
ax.plot(pos_objet, images_taille)
ax.grid()