PROGRAM interfere CALL initial(nslit,a,L,lambda,ymax,nbar) CALL pattern(nslit,a,L,lambda,ymax,nbar) END SUB initial(nslit,a,L,lambda,ymax,nbar) INPUT prompt "number of slits = " : nslit INPUT prompt "distance between slits (mm) = ": a INPUT prompt "distance to the screen (mm) = ": L INPUT prompt "wavelength (angstroms)= ": lambda INPUT prompt "max. position on photographic plate (mm) = ": ymax INPUT prompt "# times to average intensity = ": nbar LET lambda = lambda*1e-7 ! convert angstroms to millimeters LET Imax = (nslit/L)^2 ! maximum value of intensity SET WINDOW -1.1*ymax,1.1*ymax,-0.1*Imax,1.1*Imax PLOT LINES: -ymax,0;ymax,0 ! draw horizontal axis PLOT LINES: 0,Imax;0,0 ! draw intensity axis PRINT "intensity versus vertical distance on screen" LET dy = lambda*L/a ! distance between maxima if L >> a LET ntick = int(ymax/dy) LET Lt = 0.01*Imax ! height of vertical tick FOR itick = -ntick to ntick PLOT LINES: i*dy,0; i*dy,Lt NEXT itick END SUB SUB pattern(nslit,a,L,lambda,ymax,nbar) LET k = 2*pi/lambda ! wavenumber LET npoint = 200 ! # points in positive y-direction LET dy = ymax/npoint ! distance between points to be plotted LET delta = a/(nslit - 1) ! distance between slits LET phase = 2*pi/nbar LET L2 = L*L FOR ipoint = -npoint to npoint LET y = ipoint*dy ! position on screen LET intensity = 0 ! intensity of light FOR t = 1 to nbar ! average over intensity not amplitude LET amplitude = 0 FOR islit = 1 to nslit LET yslit = -0.5*a + (islit - 1)*delta ! position of slit LET yslit = yslit - y ! vertical distance between slit and point on screen LET r2 = L2 + yslit*yslit LET r = sqr(r2) ! distance of slit from screen LET amplitude = (1/r)*cos(k*r - phase*t) + amplitude NEXT islit LET intensity = intensity + amplitude*amplitude NEXT t LET intensity = intensity/nbar PLOT y,intensity; NEXT ipoint END SUB