1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        DETER4:  DETERMINANTS, CHARACTERISTIC POLYNOMIALS AND
4  REM                 INVERSES OF MATRICES
5  REM        36263  REV A  --  2/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
10  DIM W[20,2],X[20,20],Y[20,20],Z[20,20],V[20,20]
20  PRINT '10'10;TAB(10);"THE DETERMINANT, CHARACTERISTIC POLYNOMIAL"
30  PRINT TAB(19);"AND THE INVERSE OF MATRICES"
40  PRINT '10'10"WHAT IS THE ORDER OF THE MATRIX";
50  INPUT Z0
60  PRINT '10"NOW ENTER THE MATRIX."'13'10'10" ";
70  MAT  INPUT Z[Z0,Z0]
80  MAT W=ZER[Z0,2]
90  MAT Y=ZER[Z0,Z0]
100  MAT X=IDN[Z0,Z0]
110  MAT V=IDN[Z0,Z0]
120  PRINT '10"THE DETERMINANT OF :"'13'10
130  MAT  PRINT Z
140  FOR Z=1 TO Z0
150  MAT Y=X
160  IF Z <> 1 THEN 190
170  MAT X=Z
180  GOTO 200
190  GOSUB 750
200  GOSUB 940
210  LET W[Z,1]=Z1
220  FOR Z1=1 TO Z-1
230  LET W[Z,2]=W[Z,2]+W[Z1,1]*W[Z-Z1,2]
240  IF ABS(W[Z,2])>ABS(W[Z1,1]*W[Z-Z1,2]*.000001) THEN 260
250  LET W[Z,2]=0
260  NEXT Z1
270  LET W[Z,2]=W[Z,1]+W[Z,2]
280  IF ABS(W[Z,2])>ABS(W[Z,1]*.000001) THEN 300
290  LET W[Z,2]=0
300  LET W[Z,2]=-W[Z,2]/Z1
310  NEXT Z
320  MAT W=((-1)^Z0)*W
330  PRINT '10"IS ";W[Z0,2]
340  PRINT '10"THE COEFFICIENTS OF ITS CHARACTERISTIC POLYNOMIAL ARE"
350  PRINT '10'10;TAB(10);(-1)^Z0;
360  FOR Z=1 TO Z0
370  PRINT W[Z,2];
380  NEXT Z
390  PRINT '13'10'10"DO YOU WANT THE INVERSE OF THIS MATRIX : ";
400  DIM Z$[5]
410  INPUT Z$
420  IF Z$[1,1] <> "Y" THEN 740
430  MAT W=((-1)^Z0)*W
440  IF W[Z0,2]=0 THEN 730
450  MAT V=Y
460  FOR Z=1 TO Z0
470  LET V[Z,Z]=V[Z,Z]+W[Z0-1,2]
480  IF ABS(V[Z,Z])>ABS(Y[Z,Z]*.000001) THEN 500
490  LET V[Z,Z]=0
500  NEXT Z
510  FOR Z=1 TO Z0-2
520  IF Z <> 1 THEN 550
530  MAT X=Z
540  GOTO 560
550  GOSUB 750
560  MAT Y=X
570  FOR Z1=1 TO Z0
580  FOR Z2=1 TO Z0
590  LET V[Z1,Z2]=V[Z1,Z2]+W[Z0-1-Z,2]*Y[Z1,Z2]
600  IF ABS(V[Z1,Z2])>ABS(W[Z0-1-Z,2]*Y[Z1,Z2]*.000001) THEN 620
610  LET V[Z1,Z2]=0
620  NEXT Z2
630  NEXT Z1
640  NEXT Z
650  PRINT '13'10'10"THE INVERSE IS"'13'10
660  MAT V=(-1/W[Z0,2])*V
670  MAT  PRINT V,
680  PRINT '13'10'10"VERIFICATION - THE PRODUCT OF THE MATRIX AND ITS INVERSE IS :"'13'10
690  MAT Y=V
700  GOSUB 750
710  MAT  PRINT X,
720  STOP 
730  PRINT '10'10"THE MATRIX IS SINGULAR, AND THEREFORE HAS NO INVERSE."
740  STOP 
750  MAT X=ZER
760  LET Z3=0
770  FOR Z7=1 TO Z0
780  FOR Z8=1 TO Z0
790  FOR Z9=1 TO Z0
800  LET X[Z7,Z8]=X[Z7,Z8]+Y[Z7,Z9]*Z[Z9,Z8]
810  IF ABS(X[Z7,Z8])>ABS(Y[Z7,Z9]*Z[Z9,Z8]*.000001) THEN 830
820  LET X[Z7,Z8]=0
830  NEXT Z9
840  LET Z3=Z3 MAX ABS(X[Z7,Z8])
850  NEXT Z8
860  NEXT Z7
870  FOR Z8=1 TO Z0
880  FOR Z9=1 TO Z0
890  IF ABS(X[Z8,Z9])>Z3*.000001 THEN 910
900  LET X[Z8,Z9]=0
910  NEXT Z9
920  NEXT Z8
930  RETURN 
940  LET Z1=0
950  FOR Z9=1 TO Z0
960  LET Z1=Z1+X[Z9,Z9]
970  IF ABS(Z1)>ABS(X[Z9,Z9]*.000001) THEN 990
980  LET Z1=0
990  NEXT Z9
1000  RETURN 
1010  END 
