1 DIMX(50),Y(50),X1(50),Y1(50):NL=50:SCREEN0,0 10 CLS:PRINT" FAMILY REGRESSION THIS PROGRAM WILL DO LINEAR(N)," 13 PRINT"EXPONENTIAL(E), LOGARITHMIC(L), AND/OR POWER(P) FITS TO DATA IN A .DO FILE," 15 PRINT"PRINT THE FACTORS, AND PLOT BOTH DATA AND FITS." 20 LOCATE0,6:INPUT"WHICH .DO FILE IS TO BE FIT";A$:ONERRORGOTO800:OPENA$FORINPUTAS#1:ONERRORGOTO0 30 LOCATE0,6:PRINT" " 40 LOCATE0,6:LINEINPUT"WHICH FITS (ENTER LETTER)";L$ 60 L%=LEN(L$):IFL%<=0GOTO 40 65 NF=0:LF=0:EF=0:PF=0 70 FORI%=1TOL%:NF=(MID$(L$,I%,1)="N")+NF:LF=(MID$(L$,I%,1)="L")+LF:EF=(MID$(L$,I%,1)="E")+EF:PF=(MID$(L$,I%,1)="P")+PF:NEXTI% 80 IF ((NF=0)AND(LF=0)AND(EF=0)AND(PF=0))THEN LOCATE0,6:PRINT" " 83 IF ((NF=0)AND(LF=0)AND(EF=0)AND(PF=0))THEN LOCATE0,6:INPUT"PLEASE ENTER N,L,E AND/OR P.";L$:GOTO 60 85 CLS:LOCATE15,3: PRINT"Working." 90 IFEOF(1)THEN 110 100 N1=N1+1:INPUT#1,X1(N1),Y1(N1):X(N1)=X1(N1):Y(N1)=Y1(N1):GOTO 90 110 CLOSE #1:N=N1:IFN<2GOTO 10 120 REM LINEAR FIT 130 IFNFTHENF=1:GOSUB250:AN=A:BN=B 150 REM EXPONENTIAL FIT 160 IFNOT(EF)GOTO190 170 FORI%=1TON1:IFY1(I%)>0THENY(I%)=LOG(Y1(I%))ELSEY(I%)=-999.99 175 NEXTI%:F=2:GOSUB250:AE=A:BE=B 180 REM LOGARITHMIC FIT 190 IFNOT(LF)GOTO 220 200 FORI%=1TON1:X(I%)=LOG(X1(I%)^-(X1(I%)>0))+999.99*(X1(I%)<=0):Y(I%)=Y1(I%):NEXTI%:F=3:GOSUB250:AL=A:BL=B 210 REM POWER FIT 220 IFNOT(PF)GOTO 400 230 FORI%=1TON1:X(I%)=LOG(X1(I%)^-(X1(I%)>0))+999.99*(X1(I%)<=0) 235 Y(I%)=LOG(Y1(I%)^-(Y1(I%)>0))+999.99*(X1(I%)<=0):NEXTI%:F=4:GOSUB250:AP=A:BP=B 240 GOTO 400 250 REM DO REGRESSION 260 SX=0:SY=0:XY=0:X2=0:Y2=0:N=0 270 FORI%=1TON1:IF(X(I%)=-999.99)OR(Y(I%)=-999.99)THEN 290 280 SX=SX+X(I%):SY=SY+Y(I%):X2=X2+X(I%)*X(I%):Y2=Y2+Y(I%)*Y(I%):XY=XY+X(I%)*Y(I%):N=N+1 290 NEXTI%:NX=N*X2-SX*SX:NY=N*Y2-SY*SY:CLS 300 IF((N>0)AND(NX<>0))THEN B=(N*XY-SX*SY)/NX 310 IFN>0THENA=(SY-B*SX)/N 315 IF FMOD2=0 THEN A=EXP(A) 320 IFNX*NY>0THEN R=(N*XY-SX*SY)/SQR(NX*NY) 330 IF F=1THENLOCATE4,0:PRINT"LINEAR FIT -> Y = B*X+A" 332 IF F=2THENLOCATE4,0:PRINT"EXPONENTIAL FIT -> Y = A*EXP(B*X)" 334 IF F=3THENLOCATE4,0:PRINT"LOGARITHMIC FIT -> Y = A+B*LOG(X)" 336 IF F=4THENLOCATE4,0:PRINT"POWER FIT -> Y = A*X^B" 340 LOCATE5,2:PRINT"A = ";A:LOCATE5,3:PRINT"B = ";B:LOCATE5,5:PRINT"CORR. COEFF. =";R 350 LOCATE0,6:PRINT" ":A$=INKEY$:LOCATE0,6:PRINT" ":IFA$=""THEN 350 360 RETURN 400 REM PLOT POINTS AND FITS 410 FOR I%=1TON1:X(I%)=X1(I%):Y(I%)=Y1(I%):NEXTI%:PT=0:GOSUB 900 420 IFNOT(NF)GOTO450 430 X(1)=XN:Y(1)=AN+BN*X(1):X(2)=XM:Y(2)=AN+BN*X(2):N=2:PT=1:GOSUB 925 440 LOCATE0,3:PRINT"LIN.";:LOCATE0,3:PRINT" ";:A$=INKEY$:IFA$=""THEN440 450 IFNOT(EF)GOTO 480 460 I%=0:FORXP=XNTOXMSTEP(XM-XN)/(NL-1):I%=I%+1:X(I%)=XP:Y(I%)=AE*EXP(BE*XP):NEXT XP:N=I%:PT=1:GOSUB925 470 LOCATE0,3:PRINT"EXP.";:LOCATE0,3:PRINT" ";:A$=INKEY$:IFA$=""GOTO470 480 IFNOT(LF)GOTO 510 490 I%=0:FORXP=XNTOXMSTEP(XM-XN)/(NL-1):I%=I%+1:X(I%)=XP:IFXP>0THENY(I%)=AL+BL*LOG(XP)ELSEY(I%)=-999.99 495 NEXTXP:N=I%:PT=1:GOSUB925 500 LOCATE0,3:PRINT"LOG.";:LOCATE0,3:PRINT" ";:A$=INKEY$:IFA$=""GOTO500 510 IFNOT(PF)GOTO 540 520 I%=0:FORXP=XNTOXMSTEP(XM-XN)/(NL-1):I%=I%+1:X(I%)=XP:IF XP>0THEN Y(I%)=AP*(XP)^BPELSEY(I%)=-999.99 525 NEXTXP:N=I%:PT=1:GOSUB925 530 LOCATE0,3:PRINT"POW.";:LOCATE0,3:PRINT" ";:A$=INKEY$:IFA$=""GOTO530 540 LOCATE0,3:PRINT"END ";:LOCATE0,3:PRINT" ";:A$=INKEY$:IFA$=""GOTO540 550 END 799 PRINT"HOW DID YOU GET HERE?":END 800 BEEP:LOCATE0,6:PRINT" ":FORI=1TO30:LOCATE0,6:PRINTA$+" DOESN'T EXIST TRY ANOTHER":NEXTI 810 LOCATE0,6:PRINT" ":RESUME20 900 REM PLOTTING ROUTINES 910 XS=48:XR=192:YS=9:YR=55'PT=2 920 GOSUB 1100:GOSUB 1200:CLS:GOSUB 1300 925 REM PLOTTING 930 I1%=-1:J1%=-1:FOR L%=1TO N: IF X(L%)=-999.99 OR Y(L%)=-999.99THEN 980 940 I%=INT((X(L%)-XN)/DX)+XS:J%=64-INT((Y(L%)-YN)/DY)-YS 945 REM PLOT POINTS 950 IF((PTMOD2=0)AND(I%>=0)AND(I%<=240)AND(J%>=0)AND(J%<=64))THENPSET(I%,J%+(J%>0)):PSET(I%,J%-(J%<64)):PSET(I%+(I%>0),J%) 953 IF((PTMOD2=0)AND(I%>=0)AND(I%<=240)AND(J%>=0)AND(J%<=64))THENPSET(I%-(I%<240),J%):PSET(I%,J%) 955 REM PLOT BETWEEN POINTS 960 IF((PT<1)OR(L%<2))THENI1%=I%:J1%=J%:NEXTL%:RETURN 965 IF((I%>=0)AND(I%<=240)AND(J%>=0)AND(J%<=64)AND(I1%>=0)AND(I1%<=240)AND(J1%>=0)AND(J1%<=64))THENLINE(I1%,J1%)-(I%,J%) 970 I1%=I%:J1%=J% 980 NEXT L%:RETURN 1100 REM MIN-MAX 1110 XM=-9.9999E+32:XN=9.9999E+32:YM=-9.9999E+32:YN=9.9999E+32 :FORI=1TON 1115 IF X(I)=-999.99 OR Y(I)=-999.99 THEN 1160 1120 IF XMX(I)THENXN=X(I) 1140 IF YMY(I) THENYN=Y(I) 1160 NEXT I:IF(XN>=XM)THEN PRINT"SORRY; X MINIMUM >= X MAXIMUM.":STOP 1170 IF(YN>=YM)THEN PRINT"SORRY; Y MINIMUM >= Y MAXIMUM.":STOP 1180 RETURN 1200 REM SCALING ROUTINE 1210 IF XM>XN THENXE=LOG(XM-XN)/LOG(10) 1220 IF YN3)-5*(XT=1)-4*(XT=2)-6*(XT=3) 1280 YT=-YT*(YT>3)-5*(YT=1)-4*(YT=2)-6*(YT=3) 1290 XM=MX*10^IX:XN=NX*10^IX:YM=MY*10^IY:YN=NY*10^IY:IX=XR/XT:IY=YR/YT:DX=(XM-XN)/XR:DY=(YM-YN)/YR:RETURN 1300 REM AXIS 1310 SCREEN0,0 1320 LOCATE0,0:IF(ABS(YM)>=1E+07ORABS(YM)<=3)ANDYM<>0THEN PRINT USING"+#.#^^^^";YM;ELSEPRINT USING"+#######";YM; 1330 LOCATE0,6:IF(ABS(YN)>=1E+07ORABS(YN)<=3)ANDYN<>0THEN PRINT USING"+#.#^^^^";YN;ELSEPRINT USING"+#######";YN; 1340 LOCATE1,7:IF(ABS(XN)>=1E+07ORABS(XN)<=3)ANDXN<>0THEN PRINT USING"+#.##^^^^";XN;ELSEPRINT USING"+#######";XN; 1350 LOCATE30,7:IF(ABS(XM)>=1E+07ORABS(XM)<=3)ANDXM<>0THEN PRINT USING"+#.##^^^^";XM;ELSEPRINT USING"+#######";XM; 1355 LINE(XS,64-YS)-(XS+XR,64-YS):LINE(XS,64-YS)-(XS,64-YS-YR):FORI=0TOXT:PSET(XS+INT(I*IX),64-YS+1):NEXTI:FORI=0TOYT:PSET(XS-1,64-YS-INT(I*IY)):NEXTI 1360 RETURN 1370 REM FAMREG.NEC - A regression and plotting program. 1380 REM Last Revision 12 May '85 by R.L.Kays 1390 REM This program is intended for the use of the members of the CompuServe Model 100 SIG