Wave propagation and interference phenomenom simulation with Matlab
Young's double-slit experiment
- Résultats, animation et observations
- Principes des calculs numériques et de la simulation - programme Matlab
- Quelques détails théoriques et mathématiques: phénomène d'interférence
Résultats, animation et observations
L'animation ci-dessous montre les résultats de la simulation détaillée par la suite:La fenêtre graphique est divisée en 3 figures: (voir mise en forme avancée et subplots),
- à gauche: la simulation complète, propagation de l'onde, dont le passage au travers des deux fentes
- bas à droite: onde se propageant après le passage dans la double fente
- haut droite: écran d'observation (en haut des deux autres graphiques), sur lequel on observe des figures d'interférence. La courbe en rouge est l'observation théorique (voir plus bas)
Principes des calculs numériques et de la simulation - programme Matlab
Les calculs numériques de la simulation reposent sur la méthode des différences finies, voir par exemple cete page ou aussi introduction à la programmation et la simulation en Matlab, et plus précisément TP 9: Simulation bidimensionnelle de la propagation d'une onde, Diffraction par une simple ou double fenteLes calculs, simulations, et animations sont réalisés ici avec Matlab, à partir du programme:
% Nouveau départ... propre...
clear all;close all
tic
c=10;
% Grille de calcul
Lx=100;
Ly=100;
T=15;
deltax=Lx/200;
deltay=Ly/200;
deltat=sqrt(deltax^2+deltay^2)/(2*c)
deltat=0.9*deltat
gax=(c*deltat)^2/(deltax^2);
gay=(c*deltat)^2/(deltay^2);
xx=[0:deltax:Lx];nx=length(xx);
yy=[0:deltay:Ly];ny=length(yy);
tt=[0:deltat:T];nt=length(tt);
Reflection_parois=0; % si 1, reflection sur les bords
Largeurx=1;Nlgx=round(Largeurx/Lx*nx);
posfx=50;nfx1=round(posfx/Lx*nx);nfx2=nfx1+Nlgx;
LargeurFy=2;NFy=round(LargeurFy/Ly*ny);
posF1y=Ly/2-LargeurFy/2;posF2y=Ly/2+LargeurFy/2;
cF1y=round(posF1y/Ly*ny);cF1y=96;
cF2y=round(posF2y/Ly*ny);cF2y=104;
nF1y1=cF1y-NFy/2;nF1y2=nF1y1+NFy/2;
nF2y1=cF2y-NFy/2;nF2y2=nF2y1+NFy/2;
Fentex=[nfx1:nfx2];
Fentey=[1:nF1y1,nF1y2:nF2y1,nF2y2:ny];
% Position de la source
sx=round(nx/4);sy=round((nF1y2+nF2y1)/2);
% Fréquence de la source: 2 Hertz
sfrq=2;
Mat=zeros(nx,ny,nt);
% Indices de Mat, hors bords:
i=[2:nx-1];j=[2:ny-1];
Mat(i,j,2)=Mat(i,j,1)+...
gax/2*(Mat(i-1,j,1)+Mat(i+1,j,1)-2*Mat(i,j,1))+...
gay/2*(Mat(i,j-1,1)+Mat(i,j+1,1)-2*Mat(i,j,1));
for k=3:nt-1
Mat(i,j,k+1)=2*Mat(i,j,k)-Mat(i,j,k-1)+...
gax*(Mat(i-1,j,k)+Mat(i+1,j,k)-2*Mat(i,j,k))+...
gay*(Mat(i,j-1,k)+Mat(i,j+1,k)-2*Mat(i,j,k));
Mat(sx,sy,k+1)=sin(2*pi*sfrq*k*deltat);
if (Reflection_parois==0)
Mat(1,:,k+1)=Mat(2,:,k);
Mat(nx,:,k+1)=Mat(nx-1,:,k);
Mat(:,1,k+1)=Mat(:,2,k);
Mat(:,ny,k+1)=Mat(:,ny-1,k);
end
Mat(Fentex,Fentey,k+1)=0;
end
m=max(max(max(Mat)))
% Affichage de la double fente
Mat(Fentex,Fentey,:)=1;
% 3 zones d'affichage:
% 3 subplots:
% - gauche: whole simulation: wave propgation + double-slit
% - bas droite: onde après les fentes
% - haut droite: écran, montrant les interférences
fig=figure(1);clf;whitebg('w');
set(fig,'position',[0 0 640 480]);
% Initialisation de la variable Film
% qui contiendra toutes les images de l'animation
Film=[];
ecranx=200;
Interf=squeeze(Mat(ecranx,:,:));
MatEcran=Mat;
MatEcran(ecranx,:,:)=5;
MatEcranSup=MatEcran(101:end,:,:);
% Résultats théoriques:, see below
lbd=c/sfrq; % longueur d'onde
k=2*pi/lbd; % nombre d'onde
D=Lx/2;
D=(ecranx-max(Fentex))/200*Lx
d=(nF2y1-nF1y2)/200*Ly;
w=k*d/D;
for kk=1:1:nt
subplot('position',[0.05 0.2 0.45 0.6])
pcolor(squeeze(MatEcran(:,:,kk)));
shading interp,axis off
caxis([-0.4 0.4])
subplot('position',[0.55 0.05 0.4 0.4])
pcolor(squeeze(MatEcranSup(:,:,kk)));
shading interp
caxis([-0.003 0.003]);
axis off
subplot('position',[0.55 0.55 0.4 0.4])
axis off;hold on
% La courbe théorique:
plot(xx,(.75e-6)*(cos(w*(xx-49))).^2,'-r','linewidth',2);
plot(xx,Interf(:,kk).^2)
axis([xx(30) xx(end-30) 0 1e-6])
title('{\bf \''Ecran}','fontsize',16,'interpreter','Latex')
%Film=[Film getframe(fig)];
pause(0.05)
end
%movie2avi(Film,'Film.avi','compression','none','fps',15)
Détails théoriques et mathématiques: phénomène d'interference
L'amplitude à un point de l'écran est la somme des amplitudes des deux ondes provenant des sources secondaires cohérentes (de même fréquence):
où est l'intensité lumineuse, est la pulsation, est le temps d'observation (par rapport à une origine temporelle quelconque, mais de toute façon sans intérêt pour la suite), est le nombre d'onde, et et les distances telles que représentées sur l'illustration précédente.
On peut aussi écrire cette somme selon
et donc, en factorisant par l'angle moitié comme il l'est courant avec des exponentielles complexes:
Ensuite, l'intensité lumineuse est proportionnelle au carré du module de l'amplitude:
est appelée différence de phase; l'expression précédente montre ainsi que l'intensité dépend seulement de la différence de trjat parcouru and chaque onde.
Géométriquement, avec les notations précédentes et le théorème de Pythagore,
En supposant que la distance depuis les fentes jusqu'à l'écran d'observation est grande comparée à celle séparant les deux fentes, on a avec un développement limité au 1er ordre,
et de même pour :
Finallement, au 1er ordre,
et alors, l'intensité sur l'écran est donnée par
et est donc proportionnelle à:
Cette expression est celle codée dans la simulation Matlab et peut être observée dans l'animation en haut de la page (courbe sinusoïdale rouge).