ENP TP3 : Correction Wietze Herreman, janvier 2014 Contents Onde propagative en 1 dimension Onde stationnaire en 1 dimension Onde circulaire a deux dimensions (methode 1) Onde circulaire a deux dimensions (methode 2) Interference de deux ondes circulaires Diffraction d'une one plane Onde propagative en 1 dimension Commencons par definir l'amplitude, la longueur d'onde, la vitesse de propagation. A=1; lambda=1; c=1/2; On fera une animation pour des temps t allant de 0 a T, par petit pas de dt. Por faire la courbe, il est necessaire d'introduire un maillage de l'espace entre x=0 et x=L, par pas de dx. dt=0.01; dx=0.01; L=5; T=2; x=0:dx:L; for t=0:dt:T u=A*cos(2*pi/lambda*(x-c*t)); plot(x,u) xlabel('x') ylabel('amplitude') title('Onde propagative 1D') drawnow end Il n'est evidemment pas possible d'imprimer l'animation. Remarque que l'on compte exactement 5 longueurs d'ondes dans notre figure. Il est necessaire de choisir dx suffisament petit pour avoir une courbe visuellement lisse. Onde stationnaire en 1 dimension Une onde stationnaire est une superposition d'une onde propagant a droite et une propagant a gauche. Pour faire l'animation, nous avons for t=0:dt:T % vers a droite vers la gauche u=A*cos(2*pi/lambda*(x-c*t)) + A*cos(2*pi/lambda*(x+c*t)) ; plot(x,u) % Il est necessaire de fixer les echelles verticales pour eviter que matlab % change les axes. ylim([-2*A,2*A]) xlabel('x') ylabel('amplitude') title('Onde stationnaire 1D') drawnow end Si les deux ondes n'ont pas la meme amplitude, la superposition des deux ne sera pas stationnaire. Onde circulaire a deux dimensions (methode 1) Il est necessaire d'introduire un maillage de l'espace en deux dimensions. Pour cela, on commence avec un maillage selon x et y x=0:0.01:1; y=0:0.01:1; Ensuite, nous utilisons [X,Y]=meshgrid(x,y); pour faire un mailage 2D (voir TP1). Le code suivant realise l'animation souhaitee xs=0.5; ys=0.5; lambda=0.1; A=1; for t=0:dt:T R=sqrt((X-xs).^2+(Y-ys).^2); u=A./sqrt(R).*cos(2*pi/lambda*(R-c*t)); ent par element pcolor(x,y,u) colorbar %puissance element par element .^ % division et multiplication ./ et .* elem % la fonction u(x,y) en code couleur % legende pour les couleurs caxis([-2*A,2*A]) shading flat % fixer les echelles de couleur % enlever le maillage dans la figure axis equal x et y xlabel('x') ylabel('y') title('Onde circulaire 2D') % utiliser les mes echelles pour les axes drawnow end Onde circulaire a deux dimensions (methode 2) Au lieu d'utiliser la commande meshgrid pour faire un maillage en 2D, nous pouvons manuellement programmer le remplissage de la matrice u, qui contiendra les valeur du champ u, sur les points de la maille. Le code suivant realise cet exploit. x=0:0.01:1; y=0:0.01:1; u=zeros(length(x),length(y)); %initialisation u xs=0.5; ys=0.5; lambda=0.1; A=1; for t=0:dt:T %remplir la matrice manuellement, element par element for i=1:length(x) for j=1:length(y) r=sqrt((x(i)-xs)^2+(y(j)-ys)^2); u(i,j)=A/sqrt(r)*cos(2*pi/lambda*(r-c*t)); end end pcolor(x,y,u) colorbar caxis([-2*A,2*A]) shading flat axis equal xlabel('x') ylabel('y') title('Onde circulaire 2D') drawnow end Cette methode est plus proche de ce qu'on ferait, si on devrait utiliser un langange de programmation autre que Matlab. On remplit tout simplement les elements d'une matrice, 1 par 1. Cette methode est donc peut etre plus simple a comprendre et elle donnne une meilleure comprehension de ce qui se passe veritablement. D'un point de vue, vitesse de calcul et nombre d'instructions, la premiere methode est preferable, mais nous avouons egalement qu'elle est peut etre plus abstraite. Vous choisissez la methode que vous voulez ! Interference de deux ondes circulaires Pour faire interferer deux ondes, nous placons les deux sources aux endroits specifies. Ceci peut se faire manuellement ou a l'aide d'une boucle xs=[0.3,0.7]; ys=[0.5,0.5]; A=[1,1]; for t=0:dt:T u=zeros(size(X)); for n=1:length(xs) R=sqrt((X-xs(n)).^2+(Y-ys(n)).^2); u=u+A(n)./sqrt(R).*cos(2*pi/lambda*(R-c*t)); end pcolor(x,y,u) colorbar caxis([-2,2]) shading flat axis equal xlabel('x') ylabel('y') title('interference en 2D') drawnow end Suite a l'interference, il y a des endroits dans l'espace ou les amplitudes des deux ondes s'ajoutent (interference constructive) et d'autres endroits ou c'est l'inverse (interference destructive). Si la distance entre les sources est grande par rapport a la longueur d'onde, les deux sources agiront comme une seule et vous ne verez plus d'interferences. Dans le cas inverse on observe de plus en plus d'interferences. Grace a la boucle, le meme programme peut maintenant etre legerement modifie pour faire interferer plus que deux sources, par exemple, il suffira de modifier xs=[0.3,0.7,0.5,0.5]; ys=[0.5,0.5,0.3,0.7]; pour faire interferer des ondes emanant de quatre sources. Diffraction d'une one plane Comme exemple d'un plus grand nombre de sources en interference, nous considerons le cas special ou nous mettons (un grand nombre) une vingtaine de sources (Ns=20) en xs=0 entre ys=0.4 et ys=0.6. Nous utilisons exactement la meme boucle que precedemment Ns=20; %vingt sources xs=zeros(1,Ns); ys=linspace(0.4,0.6,Ns); %positions A=ones(1,Ns); %amplitudes for t=0:dt:T u=zeros(size(X)); %n'oublier pas cette initialisation %a chaque temps, nous calculons une nouvelle %superposition d'onde = une nouvelle somme for n=1:length(xs) R=sqrt((X-xs(n)).^2+(Y-ys(n)).^2); u=u+A(n)./sqrt(R).*cos(2*pi/lambda*(R-c*t)); end pcolor(x,y,u) colorbar caxis([-2*Ns,2*Ns]) shading flat %adapter l'echelle de couleur axis equal xlabel('x') ylabel('y') title('Diffraction en 2D') drawnow end Nous voyons que les 20 sources rapprochees agissent comme une source unique en forme de barreau. Ceci illustre le principe de Huygens. La figure obtenue, est celle que l'on verrait derriere une fente sur laquelle tombe une onde plane. On remarque que l'onde a une forte amplitude dans certaines directions, mais faibles dans d'autres directions. Ce phenomene est connu sous le nom de la diffraction. Published with MATLAB® 7.10
© Copyright 2024 Paperzz