Trailing-Edge
-
PDP-10 Archives
-
decuslib20-02
-
decus/20-0026/minv.ssp
There are 2 other files named minv.ssp in the archive. Click here to see a list.
C MINV 10
C ..................................................................MINV 20
C MINV 30
C SUBROUTINE MINV MINV 40
C MINV 50
C PURPOSE MINV 60
C INVERT A MATRIX MINV 70
C MINV 80
C USAGE MINV 90
C CALL MINV(A,N,D,L,M) MINV 100
C MINV 110
C DESCRIPTION OF PARAMETERS MINV 120
C A - INPUT MATRIX, DESTROYED IN COMPUTATION AND REPLACED BY MINV 130
C RESULTANT INVERSE. MINV 140
C N - ORDER OF MATRIX A MINV 150
C D - RESULTANT DETERMINANT MINV 160
C L - WORK VECTOR OF LENGTH N MINV 170
C M - WORK VECTOR OF LENGTH N MINV 180
C MINV 190
C REMARKS MINV 200
C MATRIX A MUST BE A GENERAL MATRIX MINV 210
C MINV 220
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED MINV 230
C NONE MINV 240
C MINV 250
C METHOD MINV 260
C THE STANDARD GAUSS-JORDAN METHOD IS USED. THE DETERMINANT MINV 270
C IS ALSO CALCULATED. A DETERMINANT OF ZERO INDICATES THAT MINV 280
C THE MATRIX IS SINGULAR. MINV 290
C MINV 300
C ..................................................................MINV 310
C MINV 320
SUBROUTINE MINV(A,N,D,L,M) MINV 330
DIMENSION A(1),L(1),M(1) MINV 340
C MINV 350
C ...............................................................MINV 360
C MINV 370
C IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE MINV 380
C C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION MINV 390
C STATEMENT WHICH FOLLOWS. MINV 400
C MINV 410
C DOUBLE PRECISION A,D,BIGA,HOLD MINV 420
C MINV 430
C THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS MINV 440
C APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS MINV 450
C ROUTINE. MINV 460
C MINV 470
C THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO MINV 480
C CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS. ABS IN STATEMENT MINV 490
C 10 MUST BE CHANGED TO DABS. MINV 500
C MINV 510
C ...............................................................MINV 520
C MINV 530
C SEARCH FOR LARGEST ELEMENT MINV 540
C MINV 550
D=1.0 MINV 560
NK=-N MINV 570
DO 80 K=1,N MINV 580
NK=NK+N MINV 590
L(K)=K MINV 600
M(K)=K MINV 610
KK=NK+K MINV 620
BIGA=A(KK) MINV 630
DO 20 J=K,N MINV 640
IZ=N*(J-1) MINV 650
DO 20 I=K,N MINV 660
IJ=IZ+I MINV 670
10 IF( ABS(BIGA)- ABS(A(IJ))) 15,20,20 MINV 680
15 BIGA=A(IJ) MINV 690
L(K)=I MINV 700
M(K)=J MINV 710
20 CONTINUE MINV 720
C MINV 730
C INTERCHANGE ROWS MINV 740
C MINV 750
J=L(K) MINV 760
IF(J-K) 35,35,25 MINV 770
25 KI=K-N MINV 780
DO 30 I=1,N MINV 790
KI=KI+N MINV 800
HOLD=-A(KI) MINV 810
JI=KI-K+J MINV 820
A(KI)=A(JI) MINV 830
30 A(JI) =HOLD MINV 840
C MINV 850
C INTERCHANGE COLUMNS MINV 860
C MINV 870
35 I=M(K) MINV 880
IF(I-K) 45,45,38 MINV 890
38 JP=N*(I-1) MINV 900
DO 40 J=1,N MINV 910
JK=NK+J MINV 920
JI=JP+J MINV 930
HOLD=-A(JK) MINV 940
A(JK)=A(JI) MINV 950
40 A(JI) =HOLD MINV 960
C MINV 970
C DIVIDE COLUMN BY MINUS PIVOT (VALUE OF PIVOT ELEMENT IS MINV 980
C CONTAINED IN BIGA) MINV 990
C MINV1000
45 IF(BIGA) 48,46,48 MINV1010
46 D=0.0 MINV1020
RETURN MINV1030
48 DO 55 I=1,N MINV1040
IF(I-K) 50,55,50 MINV1050
50 IK=NK+I MINV1060
A(IK)=A(IK)/(-BIGA) MINV1070
55 CONTINUE MINV1080
C MINV1090
C REDUCE MATRIX MINV1100
C MINV1110
DO 65 I=1,N MINV1120
IK=NK+I MINV1130
HOLD=A(IK) MINV1140
IJ=I-N MINV1150
DO 65 J=1,N MINV1160
IJ=IJ+N MINV1170
IF(I-K) 60,65,60 MINV1180
60 IF(J-K) 62,65,62 MINV1190
62 KJ=IJ-I+K MINV1200
A(IJ)=HOLD*A(KJ)+A(IJ) MINV1210
65 CONTINUE MINV1220
C MINV1230
C DIVIDE ROW BY PIVOT MINV1240
C MINV1250
KJ=K-N MINV1260
DO 75 J=1,N MINV1270
KJ=KJ+N MINV1280
IF(J-K) 70,75,70 MINV1290
70 A(KJ)=A(KJ)/BIGA MINV1300
75 CONTINUE MINV1310
C MINV1320
C PRODUCT OF PIVOTS MINV1330
C MINV1340
D=D*BIGA MINV1350
C MINV1360
C REPLACE PIVOT BY RECIPROCAL MINV1370
C MINV1380
A(KK)=1.0/BIGA MINV1390
80 CONTINUE MINV1400
C MINV1410
C FINAL ROW AND COLUMN INTERCHANGE MINV1420
C MINV1430
K=N MINV1440
100 K=(K-1) MINV1450
IF(K) 150,150,105 MINV1460
105 I=L(K) MINV1470
IF(I-K) 120,120,108 MINV1480
108 JQ=N*(K-1) MINV1490
JR=N*(I-1) MINV1500
DO 110 J=1,N MINV1510
JK=JQ+J MINV1520
HOLD=A(JK) MINV1530
JI=JR+J MINV1540
A(JK)=-A(JI) MINV1550
110 A(JI) =HOLD MINV1560
120 J=M(K) MINV1570
IF(J-K) 100,100,125 MINV1580
125 KI=K-N MINV1590
DO 130 I=1,N MINV1600
KI=KI+N MINV1610
HOLD=A(KI) MINV1620
JI=KI-K+J MINV1630
A(KI)=-A(JI) MINV1640
130 A(JI) =HOLD MINV1650
GO TO 100 MINV1660
150 RETURN MINV1670
END MINV1680