REM GE Copeland REM Feb 1999 - changed to QuickBasic REM Old Dominion University REM Dept of Physics REM 2/21/2001 DIM Z(100) PI = 4! * ATN(1) 200 DEF FNC (X) 400 X1 = PI * X * X * .5 500 FNC = COS(X1) 600 END DEF 700 DEF FNS (X) 900 X1 = PI * X * X * .5 1000 FNS = SIN(X1) 1100 END DEF 1150 PRINT CHR$(12); 1200 PRINT "FRESNEL STRAIGHT EDGE DIFFRACTION" 1300 PRINT 1400 PRINT "LET THE FRESNEL INTEGRALS BE DEFINES AS:" 1500 PRINT " C(S)= INT COS(PI *W^2/2) DW FROM 0 ---->S" 1600 PRINT " S(S)= INT SIN(PI *W^2/2) DW FROM 0 ---->S" 1700 PRINT , "WHERE INT IS A DEFINITE INTEGRAL." 1800 PRINT 1900 PRINT "THE OPTICAL DISTURBANCE AT AN OBSERVATION POINT P IS GIVEN BY:" 2000 PRINT 2100 PRINT "U(P) = U0 [ C(V) +IS(V) +.5 + I*.5 ]" 2200 PRINT " ------" 2300 PRINT " 1+I" 2400 PRINT 2500 PRINT " THE INTENSITY I = ABS[ U(P)]^2" 2600 PRINT "THE VALUE V = Y*SQR( 2/(W*L) ) and L=Equilvalent Length" 2700 PRINT "AND W = Wavelength OF THE LIGHT." 2800 PRINT "BELOW WILL BE PRINTED THE VALUES OF THIS INTENSITY FUNCTION FOR " 2900 PRINT "V values from -5.0 TO 5.0. THE INTEGRALS ARE" 3000 PRINT "EVALUATED BY A ROMBERG 6TH ORDER NUMERICAL INTEGRATION SCHEME." 3102 PRINT "HIT RETURN TO CONTINUE" INPUT T$ 3112 PRINT CHR$(12); 3200 PRINT "V INTENSITY" 3300 O = 5 3400 REM N= COUNTER 3500 n = 0 3600 DIM C(600), S(600), P5(600), X(600) 3700 FOR I = -5 TO 5 STEP .1 3800 n = n + 1 3900 X(n) = I 4000 L = 0 4100 R = I 4200 GOSUB 9600 4300 GOSUB 13200 4400 C(n) = V 4500 S(n) = V1 4600 NEXT I 4700 REM PRINT OUT THE CORNU SPIRAL X=C(S),Y=S(S) 4800 REM OCCURS IN 1ST AND 3RD QUADRANTS 4900 PRINT 5000 FOR I = 1 TO n 5100 P5(I) = .25 * ((C(I) + S(I) + 1) ^ 2 + (-S(I) + C(I)) ^ 2) 5200 NEXT I 5300 PRINT "N=", n 5400 FOR I = 1 TO n STEP 5 5500 PRINT USING " ##.### "; X(I); P5(I); P5(I + 1); P5(I + 2); P5(I + 3); P5(I + 4) 5600 NEXT I 5700 PRINT "PLOT OUT THE INTENSITY PATTERN?"; 5800 INPUT P$ 5900 IF P$ = "YES" OR P$ = "yes" OR P$ = "Yes" THEN GOTO 8200 6000 IF P$ = "NO" OR P$ = "no" OR P$ = "No" THEN GOTO 6300 6100 PRINT "PLEASE INPUT YES OR NO" 6200 GOTO 5700 6300 STOP 8200 REM TEKTRONIX OUTPUT ROUTINE 8300 OPEN "PLTTEK.DAT" FOR OUTPUT AS #2 8400 PRINT #2, 1 8500 PRINT #2, 1 8600 PRINT #2, n 8700 PRINT #2, " INTENSITY NORMALIZED" 8800 PRINT #2, "DISPLACEMENT FROM GEOMETRIC EDGE" 8900 PRINT #2, " FRESNEL ST EDGE INTENSITY" 9000 PRINT #2, " " 9100 FOR I = 1 TO n 9200 PRINT #2, X(I); ","; P5(I); "" 9300 NEXT I CLOSE #2 9400 PRINT "Now do the Plot using WPLOT." CHAIN "Tek2wplt.bas" 9500 STOP 9600 REM NAME--ROMINT 9700 REM 9800 REM DESCRIPTION--SUBROUTINE FOR PERFORMING ROMBERG"S EQUATION. 9900 REM 10000 REM SOURCE--UNKNOWN 10100 REM 10200 REM INSTRUCTIONS--THE SUBROUTINE ASSUMES THAT L IS EQUAL 10300 REM TO THE LEFT POINT END POINT THAT R IS EQUAL TO THE 10400 REM RIGHT END POINT. THAT O IS THE DESIRED ORDER OF THE INTEGRATION, 10500 REM AND THAT FNC IS THE FUNCTION TO BE INTEGRATED. THE ANSWER IS 10600 REM V. THE ROUTINE USES THE LIST Z, AND THE VARIABLES 10700 REM Z5 THROUGH Z9. THE SUBROUTINE PROPER STARTS IN LINE 10170 10800 REM AND CONTINUES THROUGH LINE 10350. 10900 REM 11000 REM 11100 REM * * * * * * SUBROUTINE * * * * * * * * * * * 11200 REM 11300 Z7 = (R - L) / 2 11400 Z8 = 1 11500 Z(1) = (FNC(L) + FNC(R)) / 2 11600 FOR Z5 = 1 TO O 11700 Z6 = 0 11800 FOR Z9 = 1 TO 2 * Z8 - 1 STEP 2 11900 Z6 = Z6 + FNC(L + Z9 * Z7) 12000 NEXT Z9 12100 Z(Z5 + 1) = (Z6 / Z8 + Z(Z5)) / 2 12200 Z6 = 1 12300 FOR Z9 = Z5 TO 1 STEP -1 12400 Z6 = 4 * Z6 12500 Z(Z9) = Z(Z9 + 1) + (Z(Z9 + 1) - Z(Z9)) / (Z6 - 1) 12600 NEXT Z9 12700 Z8 = Z8 * 2 12800 Z7 = Z7 / 2 12900 NEXT Z5 13000 V = Z(1) * (R - L) 13100 RETURN 13200 REM NAME--ROMINT 13300 REM 13400 REM DESCRIPTION--SUBROUTINE FOR PERFORMING ROMBERGREMS EQUATION. 13500 REM 13600 REM SOURCE--UNKNOWN 13700 REM 13800 REM INSTRUCTIONS--THE SUBROUTINE ASSUMES THAT L IS EQUAL 13900 REM TO THE LEFT POINT END POINT, THAT R IS EQUAL TO THE 14000 REM RIGHT END POINT, THAT O IS THE DESIRED ORDER OF THE INTEGRATION, 14100 REM AND THET FNS IS THE FUNCTION TO BE INTEGRATED. THE ANSWER IS 14200 REM V. THE ROUTINE USES THE LIST Z, AND THE VARIABLES 14300 REM Z5 THROUGH Z9. THE SUBROUTINE PROPER STARTS IN LINE 10170 14400 REM AND CONTINUES THROUGH LINE 10350. 14500 REM 14600 REM 14700 REM * * * * * * SUBROUTINE * * * * * * * * * * * 14800 REM 14900 Z7 = (R - L) / 2 15000 Z8 = 1 15100 Z(1) = (FNS(L) + FNS(R)) / 2 15200 FOR Z5 = 1 TO O 15300 Z6 = 0 15400 FOR Z9 = 1 TO 2 * Z8 - 1 STEP 2 15500 Z6 = Z6 + FNS(L + Z9 * Z7) 15600 NEXT Z9 15700 Z(Z5 + 1) = (Z6 / Z8 + Z(Z5)) / 2 15800 Z6 = 1 15900 FOR Z9 = Z5 TO 1 STEP -1 16000 Z6 = 4 * Z6 16100 Z(Z9) = Z(Z9 + 1) + (Z(Z9 + 1) - Z(Z9)) / (Z6 - 1) 16200 NEXT Z9 16300 Z8 = Z8 * 2 16400 Z7 = Z7 / 2 16500 NEXT Z5 16600 V1 = Z(1) * (R - L) 16700 RETURN 16800 END