1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

82 lines
5.9 KiB
Plaintext

COMMENT THIS PROCEDURE WILL FIND THE INVERSE OF A MATRIX GIVEN ITIV0010
THE ORIGINAL MATRIX AND AN APPROXIMATION TO THE DESIRED ITIV0020
INVERSE. IF THE APPROXIMATION IS NOT NEAR ENOUGH, AN ITIV0030
EXIT IS MADE TO THE NON-LOCAL LABEL E1. THE FINAL ITIV0040
INVERSE REPLACES THE APPROXIMATION IN MEMORY. ITIV0050
R.D. RODMAN, ITIV0060
(PROFESSIONAL SERVICES DIVISIONAL GROUP), ITIV0070
CARD SEQUENCE BEGINS WITH ITIV0010, ITIV0080
FIRST RELEASE 12/01/62. ; ITIV0090
PROCEDURE ITINV(N, A, B, E, K1, E1, E2) ; ITIV0100
VALUE N, E, K1 ; ITIV0110
INTEGER N, K1 ; ITIV0120
REAL E ; ITIV0130
REAL ARRAY A, B[0,0] ; ITIV0140
LABEL E1, E2 ; ITIV0150
BEGIN ITIV0160
INTEGER I, J, K, J1, L ; ITIV0170
REAL NORM, TEST, Q ; ITIV0180
REAL ARRAY C[0:N], B1[0:N, 0:N] ; ITIV0190
LABEL S3, EXIT ; ITIV0200
COMMENT "A" CONTAINS THE ORIGINAL MATRIX AND "B" AN APPROXIMATION ITIV0210
TO "A INVERSE". "NORM" IS COMPUTED IN ORDER TO DETERMINE ITIV0220
IF CONVERGENCE WILL OCCUR. ; ITIV0230
FOR I ~ 1 STEP 1 UNTIL N DO ITIV0240
FOR J ~ 1 STEP 1 UNTIL N DO ITIV0250
BEGIN ITIV0260
Q~0 ; ITIV0270
FOR K ~ 1 STEP 1 UNTIL N DO Q ~ A[I,K] | B[K,J] + Q ; ITIV0280
B1[I,J] ~ IF I=J THEN 1-Q ELSE -Q ITIV0290
END ; ITIV0300
FOR I ~ 1 STEP 1 UNTIL N DO ITIV0310
BEGIN ITIV0320
C[I] ~ 0 ; ITIV0330
FOR J ~ 1 STEP 1 UNTIL N DO ITIV0340
C[I] ~ ABS(B1[I,J]) + C[I] ITIV0350
END ; ITIV0360
NORM ~ C[1] ; ITIV0370
FOR I ~ 2 STEP 1 UNTIL N DO ITIV0380
IF NORM < C[I] THEN NORM ~ C[I] ; ITIV0390
IF NORM } 1.0 THEN GO TO E1 ; ITIV0400
J1 ~ 1 ; ITIV0410
COMMENT AN ITERATION IS PERFORMED. THE ACCURACY OF THE INVERSE ITIV0420
AND THE NUMBER OF ITERATIONS ARE TESTED AGAINST RELEVANT ITIV0430
INPUT PARAMETERS. ; ITIV0440
S3: TEST ~ 0 ; ITIV0450
FOR I ~ 1 STEP 1 UNTIL N DO ITIV0460
FOR J ~ 1 STEP 1 UNTIL N DO ITIV0470
BEGIN ITIV0480
Q~0 ; ITIV0490
FOR K ~ 1 STEP 1 UNTIL N DO Q ~ A[I,K] | B[K,J] + Q ; ITIV0500
IF I=J THEN ITIV0510
BEGIN ITIV0520
B1[I,J] ~ 2-Q ; TEST ~ ABS(1-Q) + TEST ITIV0530
END ITIV0540
ELSE ITIV0550
BEGIN ITIV0560
B1[I,J] ~-Q ; TEST ~ ABS(Q) + TEST ITIV0570
END ITIV0580
END ; ITIV0590
IF TEST < E THEN GO TO EXIT ; ITIV0600
FOR I ~ 1 STEP 1 UNTIL N DO ITIV0610
BEGIN ITIV0620
FOR J ~ 1 STEP 1 UNTIL N DO ITIV0630
BEGIN ITIV0640
Q~0 ; ITIV0650
FOR K ~ 1 STEP 1 UNTIL N DO Q ~ B[I,K] | B1[K,J] + Q ; ITIV0660
C[J] ~ Q ITIV0670
END ; ITIV0680
FOR J ~ 1 STEP 1 UNTIL N DO ITIV0690
B[I,J] ~ C[J] ITIV0700
END ; ITIV0710
IF J1 } K1 THEN GO TO E2 ; ITIV0720
J1 ~ J1 + 1 ; GO TO S3 ; ITIV0730
EXIT: END ; ITIV0740