Young’s two-slits experiment
Matlab code 

% Program to plot the interference between two point oscillators as a

% function of their separation. The time-averaged far-field intensity is

% plotted on the right.

 

clear all; close all;

 

vid = VideoWriter('interference.mp4','MPEG-4');

vid.Quality = 70;

vid.FrameRate = 30;

vid.VideoCompressionMethod

open(vid);

figure('units','pixels','position',[0 0 1920 1080],'ToolBar','none');

set(0,'defaultfigurecolor',[1 1 1]);

set(gca,'linewidth',10);

myBlue = [0.4 0.44 0.73];

 

axis square

axis equal

axis off

hold on

 

lp = [0.2 0.5 0.8]; % Light projection angle

ec = [0.35 0.39 0.64]; % Phil blue

fc = [1.0 0.83 0]; % Gold

alphaVal = 0.82;

 

set(gca,'View',[0,90]);

%set(gca, 'Projection','perspective');

%light('Position',lp,'Style','infinite');

 

per = 2*pi; % periodicity

 

% Limits of real-space volume in Angstroms

xlim([-4*per 35*per]);

ylim([-11*per 11*per]);

zlim([-4.1 4.1]);

 

% surface mesh grid for propagating circular wave

leftLim = 4;

rightLim = 35;

topBottomLim = 11;

x = -leftLim*per:per/25:rightLim*per;

y = -topBottomLim*per:per/25:topBottomLim*per;

[X,Y] = meshgrid(x,y);

yrange = -topBottomLim:0.01:topBottomLim;

theta = atan(yrange/rightLim);

 

% electron

[u,v,w] = sphere; % Create sphere coordinates

er = 1.25; % radius of electron

pos1 = [0.0 0.0 0.8 1];

pos2 = [0.82 0.113 0.17 0.774];

 

% single electron oscillating up and down in centre

for i = 0:2*pi/30:10*pi-2*pi/60

    subplot('Position',pos1); % Main plot

    newplot

    clear surf1

    set(gca,'View',[0,90]);

    set(gca, 'Projection','perspective');

    %light('Position',lp,'Style','infinite');

    axis square

    axis equal

    axis off

    

    xlim([-4*per 35*per]);

    ylim([-11*per 11*per]);

    zlim([-4.1 4.1]);

    hold on

    light('Position',lp,'Style','infinite');

    

    F = (0.5*cos((X.^2+(Y).^2).^0.5-i)+0.5*cos((X.^2+(Y).^2).^0.5-i)).^2;

    elec1 = surf(u*er,v*er,w*er+2.5*cos(i),'FaceAlpha',1.0, ...

        'FaceColor',ec,'LineStyle','none');

    surf1 = surf(X,Y,F,'FaceColor',fc,'EdgeColor','none','FaceAlpha',alphaVal);

    drawnow;

    hold off

    subplot('Position',pos2); % intensity plot

    ith = (cos(pi*0*sin(theta)).*sinc(pi*sin(theta))).^2;

    plot(ith,yrange,'Color',myBlue,'Linewidth',4);

    axis tight

    axis off

    frame = getframe(gcf);

    writeVideo(vid,frame);

end

 

% two electrons moving apart from one another

for i = 0:2*pi/30:16*pi-2*pi/60

    subplot('Position',pos1); % Main plot

    newplot

    clear surf1

    set(gca,'View',[0,90]);

    set(gca, 'Projection','perspective');

    %light('Position',lp,'Style','infinite');

    axis square

    axis equal

    axis off

    

    xlim([-4*per 35*per]);

    ylim([-11*per 11*per]);

    zlim([-4.1 4.1]);

    hold on

    light('Position',lp,'Style','infinite');

    

    F = (0.5*cos((X.^2+(Y-i/2).^2).^0.5-i)+0.5*cos((X.^2+(Y+i/2).^2).^0.5-i)).^2;

    elec1 = surf(u*er,v*er+i/2,w*er+2.5*cos(i),'FaceAlpha',1.0, ...

        'FaceColor',ec,'LineStyle','none');

    elec2 = surf(u*er,v*er-i/2,w*er+2.5*cos(i),'FaceAlpha',1.0, ...

        'FaceColor',ec,'LineStyle','none');

    surf1 = surf(X,Y,F,'FaceColor',fc,'EdgeColor','none','FaceAlpha',alphaVal);

    drawnow;

    hold off

    subplot('Position',pos2); % intensity plot

    ith = (cos(pi*(i/(2*pi))*sin(theta)).*sinc(pi*sin(theta))).^2;

    plot(ith,yrange,'Color',myBlue,'Linewidth',4);

    axis tight

    axis off

    frame = getframe(gcf);

    writeVideo(vid,frame);

end

 

%Output the movie as an mpg file

close(vid);