C #INVTA V1A 17-APR-72 C LAST UPDATE: C SUBROUTINE INVTA(A,N,M,DET) DIMENSION A(M,M) C C *PURPOSE. C TO INVERT A REAL SQUARE MATRIX. C C *PARAMETERS. C C A - A REAL ARRAY OF DIMENSION "M" X "M" CONTAINING THE MATRIX C OF SIZE "N" X "N" IN ITS TOP LEFT CORNER. THE MATRIX C IS INVERTED IN PLACE . C N - THE LOGICAL SIZE OF THE MATRIX TO BE INVERTED. C M - THE PHYSICAL SIZE OF THE ARRAY CONTAINING THE MATRIX. C DET - A REAL NUMBER RETURNING THE DETERMINANT OF THE ORIGINAL C MATRIX. C C INPUT PARAMETERS: C A, N, M C OUTPUT PARAMETERS: C A, DET C C *METHOD. C THE CROUT FORM OF GAUSSIAN ELIMINATION IS USED TO C INVERT THE MATRIX IN PLACE. THERE IS NO CHECK FOR ZERO DIAGONAL C ELEMENTS NOR ANY PIVOTING AND SO THE USER MUST USE THIS ROUTINE C WITH SOME CARE. C C *ACCURACY. C IF THE VALUE OF DET IS SMALL THE ROUNDING ERROR MAY BE QUITE C LARGE AND IF THE VALUE OF DET IS ZERO THE RESULT IS MEANINGLESS. C HOWEVER VERY OFTEN 4 OR 5 SIGNIFICANT FIGURES CAN BE OBTAINED. C C *RESTRICTIONS. C C *ERROR CONDITIONS. C C *NON STANDARD ROUTINES CALLED. C C *TYPICAL TIMES. C THE TIME IS ROUGHLY PROPORTIONAL TO N**3. C C *ORIGIN. M.R.MANNING. C C *COMMENTS. C IN GENERAL ONE SHOULD USE THE SIMILAR ROUTINE "INVTB" WHICH C USES A PIVOTING STRATEGY. HOWEVER THERE ARE SITUATIONS SUCH AS C STANDARD LEAST SQUARES FITTING PROCEDURES WHERE THE ROUTINE MAY BE C QUITE SAFE. C C C #END. C C #START. DET=1. DO 8 I=1,N FAC=A(I,I) DET=DET*FAC FAC=1./FAC A(I,I)=FAC DO 4 K=1,N IF(I-K) 3,4,3 3 A(I,K)=A(I,K)*FAC 4 CONTINUE DO 8 J=1,N IF(J-I) 6,8,6 6 FAC=A(J,I) A(J,I)=0. DO 7 K=1,N 7 A(J,K)=A(J,K)-FAC*A(I,K) 8 CONTINUE RETURN END