File: FIT.BA of Tape: Various/ETH/ba1
(Source file text) 

10 DIM F1(256)
20 DIM Q(3,3)
30 DIM D1(3,3)
40 DIM P1(15,15)
50 DIM C1(15)
60 DIM C3(15)
70 DIM C2(15,15)
80 DIM Z(15)
90 DIM L1(15)
100 DIM L2(15,9)
101 DIM A$(15)
102 DIM B$(15)
103 DIM C$(15)
104 DIM D$(15)
105 DIM E$(15)
110 P9=3.14159
120 PRINT\PRINT
130 GOTO 150
140 CLOSE #1
150 PRINT "FIT WITH CORR. COEFFS.";
160 INPUT A$
170 L7=1
180 IF A$="YES" THEN 200
190 L7=0
200 PRINT "FILENAME: 'YYYDXX.FD'"
210 PRINT "YYY";
220 INPUT A$
230 A$=SEG$(A$,1,3)
240 PRINT "FROM XX=";
250 INPUT Y1
260 IF Y1<=0 THEN 200
270 PRINT "  TO XX=";
280 INPUT Y2
290 IF Y2>99 THEN 200
300 IF Y2-Y1>=0 THEN 320
310 Y2=Y1
320 Y3=Y1-1
330 Y3=Y3+1
340 C$="0"
350 IF Y3<10 THEN 370
360 C$=SEG$(C$,1,-1)
370 B$=A$&"D"&C$&STR$(Y3)&".FD"
380 PRINT "DATA FILE: "&B$
390 FILE #1:B$
400 INPUT #1:D$
410 E$=SEG$(D$,1,1)
420 IF E$<>"D" THEN 800
430 E$=SEG$(D$,4,5)
440 IF VAL(E$)><Y3 THEN 800
450 GOSUB 2830
460 IF D1>256 THEN 800
470 P3=D1
480 FOR I=0 TO P3-1
490 GOSUB 2830
500 F1(I)=D1
510 NEXT I
520 GOSUB 2830
530 I9=D1
540 FOR I=1 TO I9
550 GOSUB 2830
560 NEXT I
565 K=0
570 FOR K1=0 TO 3
580 GOSUB 2830
590 IF D1=0 THEN 720
595 K=K+1
600 PRINT D1,
610 Q(K1,0)=D1*P9/256
620 GOSUB 2830
630 PRINT D1,
640 Q(K1,1)=D1*P9/180
650 GOSUB 2830
660 PRINT D1,
670 Q(K1,2)=D1
680 GOSUB 2830
690 PRINT D1
700 Q(K1,3)=-D1*P9/256
710 NEXT K1
720 IF K=0 THEN 800
725 K1=K
730 GOSUB 820
740 PRINT
750 PRINT
760 IF Y3>=Y2 THEN 140
770 CLOSE #1
780 PRINT "NEXT FILE"
790 GOTO 330
800 PRINT "BAD FILE,TAKING NEXT"
810 GOTO 750
820 K2=K1*4
830 K3=SQR(K2)
840 S8=.0001
850 C5=10000
860 C6=0
870 D5=0
880 D3=1
890 I8=1\REM START OF LOOP
900 L8=1
910 FOR L=0 TO K1-1
920 D1(L,0)=D3/(K3*P3)
930 D1(L,1)=D3/K3
940 D1(L,2)=D3*Q(L,2)/K3
950 D1(L,3)=D3*2/(K3*P3)
960 NEXT L
970 D5=D5+1
980 FOR I=0 TO K2-1
990 C1(I)=0
1000 FOR J=0 TO K2-1
1010 C2(I,J)=0
1020 NEXT J
1030 NEXT I
1040 C4=0
1050 FOR H=0 TO P3-1
1060 R1=-(F1(H)+C6/P3)
1070 FOR L=0 TO K1-1
1080 C=COS(H*Q(L,0)-Q(L,1))
1090 S=SIN(H*Q(L,0)-Q(L,1))
1100 A=Q(L,2)
1110 E=EXP(H*Q(L,3))
1120 E1=H*E
1130 R1=R1+A*C*E
1140 L1(L*4)=-H*S*A*E*D1(L,0)
1150 L1(L*4+1)=S*A*E*D1(L,1)
1160 L1(L*4+2)=C*E*D1(L,2)
1170 L1(L*4+3)=E1*A*C*D1(L,3)
1180 L2(L,0)=-H*H*C*A*E*D1(L,0)*D1(L,0)
1190 L2(L,1)=H*C*A*E*D1(L,0)*D1(L,1)
1200 L2(L,2)=-C*A*E*D1(L,1)*D1(L,1)
1210 L2(L,3)=-H*S*E*D1(L,0)*D1(L,2)
1220 L2(L,4)=S*E*D1(L,1)*D1(L,2)
1230 L2(L,5)=0
1240 L2(L,6)=-H*S*A*E1*D1(L,0)*D1(L,3)
1250 L2(L,7)=S*A*E1*D1(L,1)*D1(L,3)
1260 L2(L,8)=C*E1*D1(L,2)*D1(L,3)
1270 L2(L,9)=H*E1*A*C*D1(L,3)*D1(L,3)
1280 NEXT L
1290 C4=C4+R1*R1\C6=C6+R1
1300 FOR L=0 TO K1-1
1310 M1=-1
1320 FOR N=0 TO 3
1330 I=N+4*L
1340 C1(I)=C1(I)-L1(I)*R1
1350 FOR J=0 TO L*4-1
1360 C2(J,I)=C2(J,I)+L1(J)*L1(I)
1370 NEXT J
1380 FOR M=0 TO N
1390 J=M+4*L\M1=M1+1
1400 C2(J,I)=C2(J,I)+L1(J)*L1(I)+R1*L2(L,M1)
1410 NEXT M
1420 NEXT N
1430 NEXT L
1440 NEXT H
1450 C4=C4/(P3-K2)
1460 PRINT "CHI=";SQR(C4)
1470 PRINT
1480 M=K2-1
1490 IF C4<=C5 THEN 1600
1500 C5=C5*1.001
1510 D3=D3/2\I8=I8*2
1520 PRINT "REDUCED LINEARITY RANGE";D3
1530 FOR J=0 TO K2-1
1540 J1=INT(J/4)\J2=J-J1*4
1550 Q(J1,J2)=Q(J1,J2)-C3(J)
1560 C3(J)=0
1570 NEXT J
1580 IF I8>100 THEN 1600
1590 GOTO 900
1600 GOSUB 2240
1610 FOR J=0 TO K2-1
1620 Z(J)=0
1630 FOR K=0 TO K2-1
1640 Z(J)=Z(J)+P1(K,J)*C1(K)
1650 NEXT K
1660 L1(J)=C2(J,J)
1670 IF ABS(Z(J))<L1(J) THEN 1700
1680 Z(J)=SGN(Z(J))\L8=0
1690 PRINT "MAX";J\GOTO 1710
1700 Z(J)=Z(J)/L1(J)
1710 NEXT J
1720 L9=L1(0)+L1(K2-1)
1730 S9=0
1740 FOR J=0 TO K2-1
1750 C3(J)=0\T1=0
1760 FOR K=0 TO K2-1
1770 IF L8=0 THEN 1790
1780 T1=T1+P1(J,K)*P1(J,K)/L1(K)
1790 C3(J)=C3(J)+P1(J,K)*Z(K)
1800 NEXT K
1810 IF L8=0 THEN 1830
1820 S9=S9+C3(J)*C3(J)/T1
1830 J1=INT(J/4)\J2=J-J1*4
1840 C3(J)=C3(J)*D1(J1,J2)
1850 Q(J1,J2)=Q(J1,J2)+C3(J)
1860 C2(J,J)=T1*C4*D1(J1,J2)*D1(J1,J2)
1870 NEXT J
1880 FOR L=0 TO K1-1
1890 PRINT Q(L,0)*256/P9,Q(L,1)*180/P9,
1900 PRINT Q(L,2),-Q(L,3)*256/P9
1910 NEXT L
1920 C5=C4
1930 IF L9<>L1(K2-1) THEN 1950
1940 PRINT "ILL CONDITIONED"
1950 IF L8=0 THEN 1970
1960 IF S9<S8 THEN 1990
1970 IF D5>20 THEN 1990
1980 GOTO 890
1990 PRINT\PRINT "CURVE SHIFTED BY";C6/P3
2000 PRINT\PRINT "STANDARD DEVIATIONS"
2010 FOR J=0 TO K1-1
2020 PRINT SQR(C2(J*4,J*4))*256/P9,
2030 PRINT SQR(C2(J*4+1,J*4+1))*180/P9,
2040 PRINT SQR(C2(J*4+2,J*4+2)),
2050 PRINT SQR(C2(J*4+3,J*4+3))*256/P9
2060 NEXT J
2070 IF L7=0 THEN 2230
2075 IF L8=0 THEN 2230
2080 PRINT\PRINT "CORRELATION COEFFS"
2090 FOR J=1 TO K2-1
2100 PRINT
2110 FOR K=0 TO J-1
2120 T1=0
2130 FOR I=0 TO K2-1
2140 T1=T1+P1(J,I)*P1(K,I)/L1(I)
2150 NEXT I
2160 C2(K,J)=T1*D1(INT(J/4),J-4*INT(J/4))*D1(INT(K/4),K-4*INT(K/4))*C4
2170 PRINT C2(K,J)/(K2*SQR(C2(K,K)*C2(J,J))),
2180 IF K-4*INT(K/4)<>3 THEN 2200
2190 PRINT
2200 NEXT K
2210 PRINT "--";J;"--"
2220 NEXT J
2230 RETURN
2240 FOR J=0 TO M
2250 FOR K=0 TO M
2260 P1(J,K)=0
2270 NEXT K
2280 P1(J,J)=1
2290 NEXT J
2300 FOR L=1 TO 50
2310 S9=0
2320 FOR J=0 TO M-1
2330 FOR K=J+1 TO M
2340 S9=S9+C2(J,K)*C2(J,K)
2350 NEXT K
2360 NEXT J
2370 T9=0
2380 IF L>3 THEN 2400
2390 T9=.2*SQR(2*S9)/(M+1)
2400 FOR J=0 TO M-1
2410 FOR K=J+1 TO M
2420 IF C2(J,J)+C2(J,K)<>C2(J,J) THEN 2440
2430 IF C2(K,K)+C2(J,K)=C2(K,K) THEN 2530
2440 IF C2(J,K)*C2(J,K)=0 THEN 2530
2450 IF ABS(C2(J,K))<=T9 THEN 2780
2460 T8=.5*(C2(K,K)-C2(J,J))/C2(J,K)
2470 IF .1/(T8*T8)=0 THEN 2520
2480 T=1/(ABS(T8)+SQR(1+T8*T8))
2490 IF T8>0 THEN 2510
2500 T=-T
2510 C=1/SQR(1+T*T)\S=T*C\GOTO 2570
2520 S=.5/T8\C=1\GOTO 2570
2530 C2(J,K)=0
2540 IF C2(J,J)>=C2(K,K) THEN 2780
2550 C=0
2560 S=1
2570 H=C*C*C2(J,J)-2*C*S*C2(J,K)+S*S*C2(K,K)
2580 G=S*S*C2(J,J)+2*C*S*C2(J,K)+C*C*C2(K,K)
2590 C2(J,K)=C*S*(C2(J,J)-C2(K,K))+C2(J,K)*(C*C-S*S)
2600 C2(J,J)=H\C2(K,K)=G
2610 FOR I=0 TO J-1
2620 H=C*C2(I,J)-S*C2(I,K)
2630 C2(I,K)=S*C2(I,J)+C*C2(I,K)\C2(I,J)=H
2640 NEXT I
2650 FOR I=J+1 TO K-1
2660 H=C*C2(J,I)-S*C2(I,K)
2670 C2(I,K)=S*C2(J,I)+C*C2(I,K)\C2(J,I)=H
2680 NEXT I
2690 FOR I=K+1 TO M
2700 H=C*C2(J,I)-S*C2(K,I)
2710 C2(K,I)=S*C2(J,I)+C*C2(K,I)\C2(J,I)=H
2720 NEXT I
2730 FOR I=0 TO M
2740 H=C*P1(I,J)-S*P1(I,K)
2750 P1(I,K)=S*P1(I,J)+C*P1(I,K)\P1(I,J)=H
2760 NEXT I
2770 C2(J,K)=0
2780 NEXT K
2790 NEXT J
2800 IF S9=0 THEN 2820
2810 NEXT L
2820 RETURN
2830 INPUT #1:D2,D1
2840 IF END #1 THEN 800
2850 RETURN
2860 END