GIRTS

Solves a triangular (possibly singular) set of linear systems and/or compute a generalized inverse of an upper triangular matrix.

Required Arguments

R  N by N upper triangular matrix. (Input)
If R contains a zero along the diagonal, the remaining elements of the row must also be zero. Only the upper triangle of R is referenced.

B  N by NB matrix containing the right hand sides of the linear system. (Input, if NB > 0)
If NB = 0, B is not referenced and can be a vector length one.

IRANK  Rank of R. (Output)

X  N by NB matrix containing the solution matrix corresponding to the right hand side B. (Output, if NB > 0)
If B is not needed, then X and B can share the same storage locations. If NB = 0, x is not referenced and can be a vector of length one.

Optional Arguments

N  Order of the upper triangular matrix R. (Input)
Default: N = size (R,2).

LDR  Leading dimension of R exactly as specified in the dimension statement of the calling program. (Input)
Default: LDR = size (R,1).

NB  Number of columns in B. (Input)
NB must be nonnegative. If NB is zero, no linear systems are solved.
Default: NB = size (B,2).

LDB  Leading dimension of B exactly as specified in the dimension statement of the calling program. (Input)
Default: LDB = size (B,1).

IPATH  Path option. (Input)
Default: IPATH = 1.

 

IPATH

Action

1

Solve R * X = B.

2

Solve RT * X = B.

3

Solve R * X = B and compute RINV.

4

Solve RT * X = B and compute RINV.

LDX  Leading dimension of X exactly as specified in the dimension statement of the calling program. (Input)
Default: LDX = size (X,1).

RINV  N by N upper triangular matrix that is the inverse of R when R is nonsingular. (Output, if IPATH equals 3 or 4)
(When R is singular, RINV is g3 inverse. See the Algorithm section for an explanation of g3 inverses.) If IPATH = 1 or 2, RINV is not referenced and can be a 1x1 array. If IPATH = 3 or 4 and R is not needed, then R and RINV can share the same storage locations.

LDRINV  Leading dimension of RINV exactly as specified in the dimension statement of the calling program. (Input)

FORTRAN 90 Interface

Generic: CALL GIRTS (R, B, IRANK, X [])

Specific: The specific interface names are S_GIRTS and D_GIRTS.

FORTRAN 77 Interface

Single: CALL GIRTS (N, R, LDR, NB, B, LDB, IPATH, IRANK, X, LDX, RINV, LDRINV)

Double: The double precision name is DGIRTS.

Description

Routine GIRTS solves systems of linear algebraic equations with a triangular coefficient matrix. Inversion of the coefficient matrix is an option. The coefficient matrix can contain a zero diagonal element, but if so, the remaining elements in the row must be zero also. (A terminal error message is issued if a nonzero element appears in the row of the coefficient matrix where a zero diagonal element appears.)

If solution of a linear system is requested (i.e., NB > 0) and row i of the coefficient matrix contains elements all equal to zero, the following action is taken:

The i-th row of the solution X is set to zero.

If IPATH is 1 or 3, a warning error is issued when the i-th row of the right-hand side B is not zero.

If IPATH is 2 or 4, a warning error is issued when the i-th row of the reduced
right-hand side (obtained after the first i – 1 variables are eliminated from row i) is not zero within a computed tolerance.

If an inverse of the coefficient matrix is requested and row i contains elements all equal to zero, row i and column i elements of RINV are set to zero. The resulting inverse is a g3 inverse of R. For a matrix G to be g3 inverse of a matrix A, G must satisfy Conditions 1, 2, and 3 for the Moore‑Penrose inverse but generally fail Condition 4. The four conditions for G to be a Moore‑Penrose inverse of A are as follows:

1. AGA = A

2. GAG = G

3. AG is symmetric

4. GA is symmetric

For a detailed description of the algorithm, see Section 2 in Sallas and Lionti (1988).

Comments

1. Informational error

 

Type

Code

Description

3

1

The linear system of equations is inconsistent.

2. Routine GIRTS assumes that a singular R is represented by zero rows in R. No other forms of singularity in R are allowed.

Example

The following example is taken from Maindonald (1984, pp. 102‑105). A linear system Rx = B is solved, and a g3 inverse of R is computed.

 

USE GIRTS_INT

USE WRRRN_INT

 

IMPLICIT NONE

INTEGER LDB, LDR, LDRINV, LDX, N, NB, J

PARAMETER (N=4, NB=1, LDB=N, LDR=N, LDRINV=N, LDX=N)

!

INTEGER IPATH, IRANK

REAL B(LDB,NB), R(LDR,N), RINV(LDRINV,N), X(LDX,NB)

!

DATA (R(1,J),J=1,N)/6.0, 2.0, 5.0, 1.0/, B(1,1)/3.0/

DATA (R(2,J),J=1,N)/0.0, 4.0,-2.0, 2.0/, B(2,1)/4.0/

DATA (R(3,J),J=1,N)/0.0, 0.0, 0.0, 0.0/, B(3,1)/0.0/

DATA (R(4,J),J=1,N)/0.0, 0.0, 0.0, 3.0/, B(4,1)/3.0/

!

IPATH = 3

CALL GIRTS (R, B, IRANK, X, IPATH=IPATH, RINV=RINV)

!

CALL WRRRN ('RINV', RINV)

CALL WRRRN ('X', X)

END

Output

 

RINV

1 2 3 4

1 0.1667 -0.0833 0.0000 0.0000

2 0.0000 0.2500 0.0000 -0.1667

3 0.0000 0.0000 0.0000 0.0000

4 0.0000 0.0000 0.0000 0.3333

 

X

1 0.167

2 0.500

3 0.000

4 1.000