10 REM ********************** 11 REM * PROGRAM GAUSS, VERSION I, BY SHLOMO GINSBURG, MAY 1984 12 REM * THIS SOLVES A SYSTEM OF N LINEAR EQUATIONS WITH N UNKNOWNS 13 REM * IT NOTIFIES THE USER WHEN THERE IS NO SOLUTION 14 REM * VARIABLES: 15 REM * N = NUMBER OF EQUATIONS 16 REM * A(I,J) = ELEMENTS OF THE COEFFICIENT MATRIX I,J=1,2,...,N 17 REM * B(I) = ELEMENTS OF THE RIGHT HAND SIDE (CONSTANTS) 18 REM * K = STEP INDICATOR (A TOTAL OF N-1 STEPS IS RTREQUIRED) 19 REM * R = DIAGONAL ELEMENT BY WHICH EQUATIONS ARE DIVIDED 20 REM * T = TEMPORARY STORAGE FOR ROW INTERCHANGE 21 REM ********************** 22 REM * 23 REM * 24 POKE 53280,11:POKE 53281,0 25 PRINT"[147] A SYSTEM OF N LINEAR EQUATIONS "; 26 PRINT" GAUSS ELIMINATION [146]" 30 REM * BEGINNING OF PROGRAM - INPUT 40 INPUT " [158]NUMBER OF EQUATIONS (N[158])";N 45 IFN<1ORN>80THENPRINT"TRY A BETTER NUMBER!":FORDL=1TO500:NEXT:GOTO40 46 PRINT" " 50 DIM A(N,N),B(N) 60 PRINT" INPUT THE COEFFICIENTS OF A[158]" 70 FOR I=1 TO N 80 FOR J=1 TO N 90 PRINT " A("I","J")"; 100 INPUT "";A(I,J) 110 NEXT J:NEXT I 120 PRINT" INPUT THE COEFFICIENTS OF [150]B[158]" 130 FOR I=1 TO N 140 PRINT " B("I")"; 150 INPUT B(I) 160 NEXT I 170 IF N=1 THEN 540: REM SINGLE EQUATION 180 FOR K=1 TO N-1: REM STEP COUNTER 190 R=A(K,K) 200 REM * CHECK FOR ZERO DIAGONAL. INSTEAD OF ZERO WE USE 1/1000000 210 IF ABS(R)>.000001 THEN 390: REM NO NEED FOR INTERCHANGE 220 REM * INTERCHANGE ROWS 230 FOR J=(K+1) TO N 240 IF ABS(A(J,K))>.000001 THEN 260: REM FOUND THE ROW FOR INTERCHANGE 250 GOTO 350: REM KEEP LOOKING FOR ROW 260 FOR L=K TO N: REM INTERCHANGE ROW J WITH ROW K - A'S 270 T=A(K,L) 280 A(K,L)=A(J,L) 290 A(J,L)=T 300 NEXT L 310 T=B(K): REM INTERCHANGE B'S 320 B(K)=B(J) 330 B(J)=T 340 GOTO 390 350 NEXT J 360 PRINT " NO SOLUTION ! " 370 GOTO 700 380 REM * DIVIDING ROW BY DIAGONAL ELEMENT A(K,K) 390 R=A(K,K) 400 FOR J=(K+1) TO N 410 A(K,J)=A(K,J)/R 420 NEXT J 430 B(K)=B(K)/R 440 REM * ELIMINATION OF X(K) FROM ROWS K+1, K+2, ... , N 450 FOR I=(K+1) TO N 460 R=A(I,K) 470 FOR J=(K+1) TO N 480 A(I,J)=A(I,J)-R*A(K,J) 490 NEXT J 500 B(I)=B(I)-R*B(K) 510 NEXT I 520 NEXT K: REM END OF STEPS 530 REM * LAST EQUATION FOR A(N,N) 540 IF ABS(A(N,N))>.000001 THEN 570 550 PRINT " NO SOLUTION ! " 560 GOTO 700 570 B(N)=B(N)/A(N,N) 580 REM * BACKSUBSTITUTION 590 FOR I=1 TO (N-1) 600 K=N-I 610 FOR J=(K+1) TO N 620 B(K)=B(K)-A(K,J)*B(J) 630 NEXT J:NEXT I 640 PRINT"[147] RESULTS " 650 FOR I=1 TO N 660 PRINT" TOUCH ANY KEY TO CONTINUE" 670 PRINT" X("I") =";B(I) 680 GET A$:IF A$="" THEN 680 690 NEXT I 700 GOTO60000 800 : 60000 FORDL=1TO500:NEXTDL 60001 PRINT"[147]WOULD YOU LIKE TO TRY ANOTHER?"; 60002 POKE198,0:WAIT198,1:GETA$:IFA$<>"Y"ANDA$<>"N"THENPOKE53280,RND(1)*15:GOTO60002 60004 IFA$="Y"THENCLR:RESTORE:GOTO21 60006 GOTO63000 60010 : 63000 REM CONNECT BACK TO L.S. 63002 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 63004 POKE198,0:POKE631,13:POKE632,13:POKE198,2:END