1  REM ****  HP TIME-SHARED BASIC PROGRAM LIBRARY *********************
2  REM
3  REM       SOLVIT:    SIMULTANEOUS LINEAR EQUATIONS USING   
4  REM                  GAUSSIAN REDUCTION
5  REM       36196    REV A       3/72    
6  REM
7  REM ****  CONTRIBUTED PROGRAM **************************************
106  REM THIS PROGRAM WAS WRITTEN BY E.J.WHITE
110  READ R
120  IF R <> 999999. THEN 320
150  PRINT "SOLVIT SOLVES SIMULTANEOUS EQUATIONS USING GAUSSIAN"
160  PRINT "REDUCTION WITH POSITIONING FOR SIZE. THE FIRST DATA INPUT"
170  PRINT "IS THE NUMBER OF EQUATIONS IN THE SET.  THIS IS FOLLOWED"
180  PRINT "BY THE COEFFICIENTS FED IN BY ROWS INCLUDING THE RIGHT"
190  PRINT "SIDE (THE DRIVING FUNCTIONS)."
200  PRINT "FOR EXAMPLE IF THE EQUATIONS 9X+4Y=1 AND 3X+5Y=0 ARE TO"
210  PRINT "BE SOLVED THE DATA WOULD BE "
220  PRINT "1 DATA 2"
230  PRINT "2 DATA 9,4,1"
240  PRINT "3 DATA 3,5,0"
250  PRINT "THE DATA LINES SHOULD BE NUMBERED CONSECUTIVELY STARTING"
260  PRINT "WITH ONE. THIS INSURES THAT NO DATA LEFT OVER FROM ANOTHER"
270  PRINT "PROBLEM ARE READ IN PLACE OF YOUR NEW DATA."
271  PRINT " IF YOU DO NOT WANT THESE INSTRUCTIONS REPEATED THE"
272  PRINT " NEXT TIME YOU GET SOLVIT, JUST FEED IN YOUR DATA BEFORE"
273  PRINT " CALLING FOR A RUN."
280  PRINT "NOW FEED IN YOUR DATA AND CALL FOR A RUN."
290  STOP 
300  DIM A[20]
310  DIM Y[20,21]
320  LET X=0
340  MAT A=ZER[R+1]
350  MAT Y=ZER[R,R+1]
360  FOR I=1 TO R
370  FOR J=1 TO R+1
380  READ Y[I,J]
390  NEXT J
400  NEXT I
420  REM PUT THE STATEMENT "GOSUB 990 " HERE TO GET THE MATRIX
421  REM OF THE COEFFICIENTS WRITTEN OUT.
430  FOR Q=1 TO R-1
440  LET B=Y[Q,Q]
450  LET D=0
460  FOR I=Q+1 TO R
470  LET G=Y[I,Q]
480  IF ABS(G)>ABS(B) THEN 500
490  GOTO 560
500  LET X=X
510  LET D=1
520  LET M=I
530  LET B=G
540  REM D IS 1 IF A ROW INTERCHANGE IS REQUIRED
550  REM M IS THE ROW WITH THE LARGEST ELEMENT.
560  NEXT I
570  IF D <> 1 THEN 650
580  REM INTERCHANGE ROWS IF NECESSARY
590  FOR I=Q TO R+1
600  LET C=Y[M,I]
610  REMC IS AN INTERMEDIATE VARIABLE
620  LET Y[M,I]=Y[Q,I]
630  LET Y[Q,I]=C
640  NEXT I
650  LET X=0
660  FOR P=Q+1 TO R
670  IF Y[P,Q]=0 THEN 710
680  LET F=Y[P,Q]/Y[Q,Q]
690  FOR N=Q+1 TO R+1
700  LET Y[P,N]=Y[P,N]-(F*Y[Q,N])
710  LET X=X
720  NEXT N
730  NEXT P
740  NEXT Q
750  REM CALCULATE THE ANSWERS USING BACK SUBSTITUTION
770  FOR I=R TO 1 STEP -1
780  LET A1=0
800  FOR J=I+1 TO R
810  LET A1=A1+Y[I,J]*A[J]
820  NEXT J
830  LET A[I]=(Y[I,R+1]-A1)/Y[I,I]
840  NEXT I
841  PRINT 
842  PRINT 
843  PRINT 
850  PRINT "V 1, V 2, ETC. STAND FOR VARIABLE 1, VARIABLE 2 ETC."
860  PRINT 
870  FOR I=1 TO R
880  PRINT "V"I"=",A[I]
890  PRINT 
900  NEXT I
910  PRINT 
920  PRINT 
930  PRINT 
940  STOP 
990  PRINT "THE INPUT MATRIX FOLLOWS"
991  FOR X=1 TO R
1000  PRINT "ROW = "X
1010  FOR Z=1 TO R+1
1020  PRINT Y[X,Z]
1030  NEXT Z
1040  PRINT 
1050  NEXT X
1060  PRINT 
1070  RETURN 
1075  DATA 999999.
1080  END 
