Objectif
Représenter, à l’aide d’un langage de programmation, la somme de deux signaux sinusoïdaux périodiques synchrones en faisant varier la phase à l’origine de l’un des deux. Cas particulier des ondes lumineuses.
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,5]
### Initialisations
t=np.linspace(0,4,400) # Définition du tableau des dates en ms 400 dates entre 0 et 4 ms
T=1 # Période commune en ms
### Variables à modifier
# Élongation maximale en m − Tester 0.25E-2, 0.5E-2, ... ⩽ 1.5E-2
A=1.0E-2
# Phase φ à l'origine − Tester −π, −π/2, 0, π/2, π, k×π ...
phi=-pi/4
### Définition de l'élongation
y=A*np.cos(2*pi*t/T + phi)
############ Ne pas éditer #############
##### Signal de référence et tracé #####
y0=1.5E-2*np.cos(2*pi*t/T)
plt.plot(t,y0,"r:",label='Référence : $0.015×\cos({2\pi}\dfrac{t}{T}+0)$')
########################################
### Courbes
# Tracé des points
plt.plot(t,y,label=r'$A\cos({2\pi}\dfrac{t}{T}+\varphi)$')
# Étiquettes impératives
plt.title("Influence de l'amplitude et/ou de la phase à l'origine\nsur un onde progressive sinusoïdale")
plt.xlabel("t (ms)")
plt.ylabel("y(t) (m)")
# Limites des axes (min,max)
plt.xlim(0,4)
plt.ylim(-1.6E-2,1.6E-2) # Fixe pour observer l'influence de la valeur de A
# Grille et légende
plt.grid()
plt.legend(bbox_to_anchor=(1, 0.5), loc="lower left")
# Place le coin lower left de la légende aux positions 1, 0.5 de la boite de tracé
# Affichage
plt.show()
Compléter le code pour afficher la somme des élongations y1(t) et y2(t).
Étudier l'influence de la phase à l'origine de y2(t) sur la somme des deux ondes, pour des valeurs de φ2 comprises entre −π et π.
Étudier l'influence des amplitudes A1 et A2 sur la somme lorsque φ2 vaut 0, π/2 et kπ avec k∈ℤ.
Compléter le titre de la courbe et les étiquettes des axes.
Quelles sont les meilleures valeurs pour un casque antibruit ?
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,5]
### Initialisations
t=np.linspace(0,4,400) # Définition du tableau des dates en ms 400 dates entre 0 et 4 ms
T=1 # Période en ms
### Variables à modifier
# Élongation maximale de y1 en mètres ⩽ 1.5E-2
A1=1.5E-2
# Élongation maximale en mètres de y2 ⩽ 1.5E-2
A2=1.5E-2
# Phase φ à l'origine de y2 − Tester 0, π/2, π/4, π, k×π
phi2=2*pi
### Définition des élongations
y1=A1*np.cos(2*pi*t/T)
y2=A2*np.cos(2*pi*t/T + phi2)
y3=y1+y2
### Courbes
# Tracé des point
plt.plot(t,y1,":",label=r'$A_{1}\cos({2\pi}\dfrac{t}{T}+0)$')
plt.plot(t,y2,"--",label=r'$A_{2}\cos({2\pi}\dfrac{t}{T}+\varphi_{2})$')
plt.plot(t,y3,label=r'$A_{1}\cos({2\pi}\dfrac{t}{T})+A_{2}\cos({2\pi}\dfrac{t}{T}+\varphi_{2})$')
# Étiquettes impératives
plt.title("Somme en un point de deux ondes sinusoïdales synchrones")
plt.xlabel("t (ms)")
plt.ylabel("y(t) (m)")
# Limites des axes (min,max)
plt.xlim(0,4)
plt.ylim(-3.1E-2,3.1E-2) # Fixe pour observer l'influence la valeur de A
# Grille et légende
plt.grid()
plt.legend(bbox_to_anchor=(1, 0.5), loc="lower left")
# Affichage
plt.show()
Compléter le code pour afficher le carré de la somme des grandeurs lumineuses.
Étudier l'influence de la phase à l'origine de a2(t), sur l'intensité lumineuse reçue, pour des valeurs de φ2 comprises entre −π et π.
Étudier l'influence des amplitudes A1 et A2 sur l'intensité lumineuse lorsque φ2 vaut 0, π/2 et k×π avec k∈ℤ.
Compléter le titre de la courbe et les étiquettes des axes.
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,5]
### Initialisations
t=np.linspace(0,4,400) # Définition du tableau des dates en ms 400 dates entre 0 et 4 ms
T=1 # Période en ms
### Variables à modifier
# Grandeur lumineuse maximale de a1 ⩽ 1.5
A1=1.5
# Grandeur lumineuse maximale de a2 ⩽ 1.5
A2=1.4
# La phase φ à l'origine de a2
phi2=pi/4
### Définition des grandeurs lumineuses
a1=A1*np.cos(2*pi*t/T)
a2=A2*np.cos(2*pi*t/T+phi2)
### Carré de la somme
a3=(a1+a2)*(a1+a2)
### Intensité lumineuse
# Valeur max de a3
max=np.max(a3)
# La valeur moyenne de cos² est 1/2
intensite=max/2
# Affichage
print("L'intensité lumineuse reçue vaut", np.round(intensite,2), "W/m²")
### Courbes
# Tracé des point
plt.plot(t,a1,"--",label='Grandeur lumineuse 1')
plt.plot(t,a2,":",label='Grandeur lumineuse 2')
plt.plot(t,a3,label='Carré de la somme des grandeurs lumineuses')
# Étiquettes impératives
plt.title("Somme de deux ondes lumineuses monochromatiques synchrones")
plt.xlabel("t (ms)")
plt.ylabel("a(t) & a²(t)")
# Limites des axes (min,max)
plt.xlim(0,4)
plt.ylim(-1.6,9.1) # Fixe pour observer l'influence la valeur de A
# Grille et légende
plt.grid()
plt.legend(bbox_to_anchor=(1, 0.5), loc="lower left")
# Affichage
plt.show()
L'intensité lumineuse reçue vaut 3.59 W/m²
Plutôt que de tatônner en testant différentes valeurs de φ2, on trace l'amplitude en fonction de φ2, pour repérer les valeurs de φ2 où l'amplitude s'annule.
On compare les résultats avec ceux d'une formule mathématique issue des calculs sur les interférences dans le cas de la cuve à ondes.
Comme φ1 est toujours nul, c'est donc en S1 qu'on calcule la somme. Tout se passe comme si on considérait des point M (c'est à dire S1) de plus en plus éloignés de S2. En terme d'interférences, la différence de marche est donc la distance S1S2.
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,10]
### Initialisations
t=np.linspace(0,1,100) # Définition du tableau des dates en ms 100 dates entre 0 et 1 ms
T=1 # Période en ms
### Valeurs
# Valeur utile uniquement pour la comparaison avec l'expression mathématique
A=2
# Déclaration des listes
amplitude_fonction_de_phi, phase, amplitude_via_expression_math = [], [], []
# Renvoie l'élongation max de la somme en fonction de φ
# par calcul de toutes les sommes sur une période
# et conservation de la plus grande
def elogation_max(p) :
y1=A*np.cos(2*pi*t/T) # Toutes les valeurs de y1 sur une période vu que t=np.linspace(0,1,100)
y2=A*np.cos(2*pi*t/T + p) # Idem pour y2
y3=y1+y2 # Idem pour y3
return np.max(y3) # La valeur maximale de y3 est l'amplitude de l'onde résultante
# Balaye de -2π à 2π
for i in range(-628,628,10) :
# φ vaut i/100 car i doit être entier
phase.append(i/100)
# L'amplitude courante est déterminée grâce à la fonction elogation_max pour phi courant
amplitude_courante=elogation_max(i/100)
# Complète la liste des amplitudes numériques
amplitude_fonction_de_phi.append(amplitude_courante)
# Calcule une amplitude mathématique
amplitude_via_expression_math.append(2*A*np.cos(i/200))
# Tracé des amplitudes
plt.subplot(211)
plt.xlim(-6.3,6.3)
plt.ylim(-4.1,4.1)
plt.plot(phase, amplitude_fonction_de_phi, 'b-', linewidth=0.5, label='Amplitude en fonction de '+r'$\varphi_{2}$'+' par calcul numérique.\nLes valeurs nulles indiquent l’immobilité.\nLes maxima indiquent une vibration, creux ou sommet.')
plt.legend(bbox_to_anchor=(0, 0.5), loc="upper left")
plt.subplot(212)
plt.xlim(-6.3,6.3)
plt.ylim(-4.1,4.1)
plt.plot(phase, amplitude_via_expression_math, 'r-', linewidth=0.5, label='Amplitude en fonction de '+r'$\varphi_{2}$'+' via l’expression mathématique.\nLes valeurs négatives indiquent des creux.')
plt.legend(bbox_to_anchor=(0, 0.5), loc="upper left")
plt.savefig('Amplitudes.png')
plt.show()
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,10]
### Initialisations
t=np.linspace(0,1,100) # Définition du tableau des dates en ms 100 dates entre 0 et 1 ms
T=1 # Période en ms
### Valeurs
# Valeur utile uniquement pour la comparaison avec l'expression mathématique
A=2
# Déclaration des listes
intensite_fonction_de_phi, phase, intensite_via_expression_math = [], [], []
# Renvoie l'intensité en fonction de φ
# par calcul du carré de toutes de toutes les sommes sur une période
# et conservation de la plus grande
def intensite(p) :
y1=A*np.cos(2*pi*t/T) # Toutes les valeurs de y1 sur une période vu que t=np.linspace(0,1,100)
y2=A*np.cos(2*pi*t/T + p) # Idem pour y2
y3=(y1+y2)*(y1+y2) # Idem pour y3 carré de y1+y2
return np.max(y3)/2 # La moitié de valeur maximale de y3 est l'intensité lumineuse de l'onde résultante
# Balaye de -2π à 2π
for i in range(-628,628,10) :
# φ vaut i/100 car i doit être entier
phase.append(i/100)
# L'intensité courante est déterminée grâce à la fonction intensite pour la valeur de φ courante
intensite_courante=intensite(i/100)
# Complète la liste des intensités calculées numériquement
intensite_fonction_de_phi.append(intensite_courante)
# Intensité calculée mathématiquement
intensite_via_expression_math.append(A*A*(1+np.cos(i/100)))
# Tracé des intensités
plt.subplot(211)
plt.plot(phase, intensite_fonction_de_phi, 'b-', linewidth=0.5, label="Intensité en fonction de "+r'$\varphi_{2}$'+" par calcul numérique")
plt.legend(bbox_to_anchor=(0, 0.25), loc="upper left")
plt.subplot(212)
plt.plot(phase, intensite_via_expression_math, 'r-', linewidth=0.5, label="Intensité en fonction de "+r'$\varphi_{2}$'+" via l’expression mathématique")
plt.legend(bbox_to_anchor=(0, 0.25), loc="upper left")
plt.savefig('Intensités.png')
plt.show()