Motor Lab's GWBasic Least Squares Fit Linear Equation Generator

10 CLS
15 REM least squares fit -linear equations
20 T$="Least Squares linear fit"
30 L=LEN(T$)
40 PRINT TAB(INT((80-L)/2+.5));T$
50 PRINT:PRINT:PRINT:PRINT
60 PRINT"THIS PROGRAM PERFORMS A LEAST SQUARES APPROXIMATION OF A LINEAR LINE."
70 PRINT "IT ACCEPTS THE X&Y COORDINATES OF GIVEN DATA POINTS ANT TRIES TO PRODUCE A BEST"
80 PRINT "FIT LINE THAT REPRESENTS THE DATA."
90 PRINT "THE EQUATION OF THE LINE IS :"
100 PRINT:PRINT" Y = MX + B "
110 PRINT
120 PRINT "WHERE M AND B ARE CALCULATED BY THE PROGRAM."
130 PRINT
140 INPUT "HOW MANY DATA POINTS";N
150 DIM X(N),Y(N)
160 PRINT
170 PRINT "ENTER DATA:"
180 FOR I=1 TO N
200 PRINT "X";I," Y";I;" ";
210 INPUT X(I),Y(I)
220 NEXT I
230 B$="-"
240 GOTO 290
250 X1=0
260 Y1=0
270 XY=0
280 X2=0
290 FOR I=1 TO N
300 X1=X1+X(I)
310 Y1=Y1+Y(I)
320 XY=XY+X(I)*Y(I)
330 X2=X2+X(I)*X(I)
340 NEXT I
350 J=N*X2-X1*X1
360 IF J<>0 THEN 380
370 PRINT:PRINT "NO SOLUTION FOUND":END
380 M=(N*XY-X1*Y1)/J
390 M=INT(1000!*M+.5)/1000!
400 B=(Y1*X2-X1*XY)/J
410 IF ABS(B)=B THEN B$="+"
420 D=0
430 B=INT(1000!*B+.5)/1000!
440 D2=0
450 FOR I=1 TO N
460 D=D+Y(I)-M*X(I)-B
470 D2=D2+(Y(I)-M*X(I)-B)^2
480 D2=INT(1000!*D2+.5)/1000!
490 NEXT I
500 PRINT
510 PRINT "THE LINEAR EQUATION THAT BEST FITS THE GIVEN DATA IS: "
520 PRINT:PRINT" Y = ";M;" X ";B$;ABS(B)
530 PRINT:PRINT"FOR THIS EQUATION THE SUM OF THE DEVIATIONS SQUARED IS ";D2
540 PRINT:PRINT
550 INPUT "DO YOU WANT TO INTERPOLATE DATA Y/N";A$
560 IF A$="Y" THEN 570 ELSE 620
565 IF A$="y" THEN 570 ELSE 620
570 PRINT:INPUT "ENTER X->";X
580 PRINT:PRINT
590 Y=M*X+B
600 PRINT "Y = ";Y
610 GOTO 540
620 INPUT "WOULD YOU LIKE TO ENTER NEW COORDINATES FOR A DIFFERENT LINE(Y/N)";T$
630 IF T$="y" THEN 10 ELSE 640
635 IF T$="Y" THEN 10 ELSE 640
640 END