Web pdp-10.trailing-edge.com

Trailing-Edge - PDP-10 Archives - decus_20tap2_198111 - decus/20-0026/dmtds.doc
There are 2 other files named dmtds.doc in the archive. Click here to see a list.
```SUBROUTINE DMTDS

PURPOSE
MULTIPLY A GENERAL MATRIX A ON THE LEFT OR RIGHT BY
INVERSE(T),INVERSE(TRANSPOSE(T)) OR INVERSE(TRANSPOSE(T*T))
THE TRIANGULAR MATRIX T IS STORED COLUMNWISE IN COMPRESSED
FORM, I.E. UPPER TRIANGULAR PART ONLY.

USAGE
CALL DMTDS(A,M,N,T,IOP,IER)

DESCRIPTION OF PARAMETERS
A	 - GIVEN GENERAL MATRIX WITH  M ROWS AND N COLUMNS.
A MUST BE OF DOUBLE PRECISION
M	 - NUMBER OF ROWS OF MATRIX A
N	 - NUMBER OF COLUMNS OF MATRIX A
T	 - GIVEN TRIANGULAR MATRIX STORED COLUMNWISE UPPER
TRIANGULAR PART ONLY. ITS NUMBER OF ROWS AND
COLUMNS K IS IMPLIED BY COMPATIBILITY.
K = M IF IOP IS POSITIVE,
K = N IF IOP IS NEGATIVE.
T OCCUPIES K*(K+1)/2 STORAGE POSITIONS.
T MUST BE OF DOUBLE PRECISION
IOP	 - INPUT VARIABLE FOR SELECTION OF OPERATION
IOP = 1 - A IS REPLACED BY INVERSE(T)*A
IOP =-1 - A IS REPLACED BY A*INVERSE(T)
IOP = 2 - A IS REPLACED BY INVERSE(TRANSPOSE(T))*A
IOP =-2 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T))
IOP = 3 - A IS REPLACED BY INVERSE(TRANSPOSE(T)*T)*A
IOP =-3 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T)*T)
IER	 - RESULTING ERROR PARAMETER
IER =-1 MEANS M AND N ARE NOT BOTH POSITIVE
AND/OR IOP IS ILLEGAL
IER = 0 MEANS OPERATION WAS SUCCESSFUL
IER = 1 MEANS TRIANGULAR MATRIX T IS SINGULAR

REMARKS
SUBROUTINE DMTDS MAY BE USED TO CALCULATE THE SOLUTION OF
A SYSTEM OF EQUATIONS WITH SYMMETRIC POSITIVE DEFINITE
COEFFICIENT MATRIX. THE FIRST STEP TOWARDS THE SOLUTION
IS TRIANGULAR FACTORIZATION BY MEANS OF DMFSD, THE SECOND
STEP IS APPLICATION OF DMTDS.
SUBROUTINES DMFSD AND DMTDS MAY BE USED IN ORDER TO
CACULATE THE PRODUCT TRANSPOSE(A)*INVERSE(B)*A WITH GIVEN
SYMMETRIC POSITIVE DEFINITE B AND GIVEN A IN THREE STEPS
1) TRIANGULAR FACTORIZATION OF B (B=TRANSPOSE(T)*T)
2) MULTIPLICATION OF A ON THE LEFT BY INVERSE(TRANSPOSE(T))
A IS REPLACED BY C=INVERSE(TRANSPOSE(T))*A
3) CALCULATION OF THE RESULT FORMING TRANSPOSE(C)*C

SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
NONE

METHOD
CALCULATION OF X = INVERSE(T)*A IS DONE USING BACKWARD
SUBSTITUTION TO OBTAIN X FROM T*X = A.
CALCULATION OF Y = INVERSE(TRANSPOSE(T))*A IS DONE USING
FORWARD SUBSTITUTION TO OBTAIN Y FROM TRANSPOSE(T)*Y = A.
CALCULATION OF Z = INVERSE(TRANSPOSE(T)*T)*A IS DONE
SOLVING FIRST TRANSPOSE(T)*Y = A AND THEN T*Z = Y, IE.
USING THE ABOVE TWO STEPS IN REVERSE ORDER

```