SUBROUTINE MATINV(A,N,B,M,DETERM) C C *****Needed for RCW program FIT C A RETYPED VERSION IS IN [RCW.AIPS] FOR PCLOSE - CAN DO LARGER C MATRICES. C C C MATRIX INVERSION WITH ACCOMPANYING SOLUTION OF LINEAR EQUATIONS C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION A(50,50),B(50,1),PIVOT(50) INTEGER INDEX(50,2),IPIVOT(50) C C INITIALIZATION C 10 DETERM=1. 15 DO 20 J=1,N 20 IPIVOT(J)=0 30 DO 550 I=1,N C C SEARCH FOR PIVOT ELEMENT C 40 AMAX=0. 45 DO 105 J=1,N 50 IF(IPIVOT(J)-1) 60,105,60 60 DO 100 K=1,N 70 IF(IPIVOT(K)-1) 80,100,740 80 IF(ABS(AMAX)-ABS(A(J,K))) 85,100,100 85 IROW=J 90 ICOLUM=K 95 AMAX=A(J,K) 100 CONTINUE 105 CONTINUE IF(AMAX.EQ.0.) GOTO 760 110 IPIVOT(ICOLUM)=IPIVOT(ICOLUM)+1 C C INTERCHANGE ROWS TO PUT PIVOT ELEMENT ON DIAGONAL C 130 IF(IROW-ICOLUM) 140,260,140 140 DETERM=-DETERM 150 DO 200 L=1,N 160 SWAP=A(IROW,L) 170 A(IROW,L)=A(ICOLUM,L) 200 A(ICOLUM,L)=SWAP 205 IF(M) 260,260,210 210 DO 250 L=1,M 220 SWAP=B(IROW,L) 230 B(IROW,L)=B(ICOLUM,L) 250 B(ICOLUM,L)=SWAP 260 INDEX(I,1)=IROW 270 INDEX(I,2)=ICOLUM 310 PIVOT(I)=A(ICOLUM,ICOLUM) 320 DETERM=DETERM*PIVOT(I) C C DIVIDE PIVOT ROW BY PIVOT ELEMENT C 330 A(ICOLUM,ICOLUM)=1. 340 DO 350 L=1,N 350 A(ICOLUM,L)=A(ICOLUM,L)/PIVOT(I) 355 IF(M) 380,380,360 360 DO 370 L=1,M 370 B(ICOLUM,L)=B(ICOLUM,L)/PIVOT(I) C C REDUCE NON-PIVOT ROWS C 380 DO 550 L1=1,N 390 IF(L1-ICOLUM) 400,550,400 400 T=A(L1,ICOLUM) 420 A(L1,ICOLUM)=0. 430 DO 450 L=1,N 450 A(L1,L)=A(L1,L)-A(ICOLUM,L)*T 455 IF(M) 550,550,460 460 DO 500 L=1,M 500 B(L1,L)=B(L1,L)-B(ICOLUM,L)*T 550 CONTINUE C C INTERCHANGE COLUMNS C 600 DO 710 I=1,N 610 L=N+1-I IF(INDEX(L,1)-INDEX(L,2)) 630,710,630 630 JROW=INDEX(L,1) 640 JCOLUM=INDEX(L,2) 650 DO 705 K=1,N 660 SWAP=A(K,JROW) 670 A(K,JROW)=A(K,JCOLUM) 700 A(K,JCOLUM)=SWAP 705 CONTINUE 710 CONTINUE 740 RETURN 760 DETERM=0. RETURN END