Purpose
To solve (if well-conditioned) one of the matrix equations
op( A )*X = alpha*B, or X*op( A ) = alpha*B,
where alpha is a scalar, X and B are m-by-n matrices, A is a unit,
or non-unit, upper or lower triangular matrix and op( A ) is one
of
op( A ) = A or op( A ) = A'.
An estimate of the reciprocal of the condition number of the
triangular matrix A, in either the 1-norm or the infinity-norm, is
also computed as
RCOND = 1 / ( norm(A) * norm(inv(A)) ).
and the specified matrix equation is solved only if RCOND is
larger than a given tolerance TOL. In that case, the matrix X is
overwritten on B.
Specification
SUBROUTINE MB02OD( SIDE, UPLO, TRANS, DIAG, NORM, M, N, ALPHA, A,
$ LDA, B, LDB, RCOND, TOL, IWORK, DWORK, INFO )
C .. Scalar Arguments ..
CHARACTER DIAG, NORM, SIDE, TRANS, UPLO
INTEGER INFO, LDA, LDB, M, N
DOUBLE PRECISION ALPHA, RCOND, TOL
C .. Array Arguments ..
INTEGER IWORK(*)
DOUBLE PRECISION A(LDA,*), B(LDB,*), DWORK(*)
Arguments
Mode Parameters
SIDE CHARACTER*1
Specifies whether op( A ) appears on the left or right
of X as follows:
= 'L': op( A )*X = alpha*B;
= 'R': X*op( A ) = alpha*B.
UPLO CHARACTER*1
Specifies whether the matrix A is an upper or lower
triangular matrix as follows:
= 'U': A is an upper triangular matrix;
= 'L': A is a lower triangular matrix.
TRANS CHARACTER*1
Specifies the form of op( A ) to be used in the matrix
multiplication as follows:
= 'N': op( A ) = A;
= 'T': op( A ) = A';
= 'C': op( A ) = A'.
DIAG CHARACTER*1
Specifies whether or not A is unit triangular as follows:
= 'U': A is assumed to be unit triangular;
= 'N': A is not assumed to be unit triangular.
NORM CHARACTER*1
Specifies whether the 1-norm condition number or the
infinity-norm condition number is required:
= '1' or 'O': 1-norm;
= 'I': Infinity-norm.
Input/Output Parameters
M (input) INTEGER
The number of rows of B. M >= 0.
N (input) INTEGER
The number of columns of B. N >= 0.
ALPHA (input) DOUBLE PRECISION
The scalar alpha. When alpha is zero then A is not
referenced and B need not be set before entry.
A (input) DOUBLE PRECISION array, dimension (LDA,k),
where k is M when SIDE = 'L' and is N when SIDE = 'R'.
On entry with UPLO = 'U', the leading k-by-k upper
triangular part of this array must contain the upper
triangular matrix and the strictly lower triangular part
of A is not referenced.
On entry with UPLO = 'L', the leading k-by-k lower
triangular part of this array must contain the lower
triangular matrix and the strictly upper triangular part
of A is not referenced.
Note that when DIAG = 'U', the diagonal elements of A are
not referenced either, but are assumed to be unity.
LDA INTEGER
The leading dimension of array A.
LDA >= max(1,M) when SIDE = 'L';
LDA >= max(1,N) when SIDE = 'R'.
B (input/output) DOUBLE PRECISION array, dimension (LDB,N)
On entry, the leading M-by-N part of this array must
contain the right-hand side matrix B.
On exit, if INFO = 0, the leading M-by-N part of this
array contains the solution matrix X.
Otherwise, this array is not modified by the routine.
LDB INTEGER
The leading dimension of array B. LDB >= max(1,M).
RCOND (output) DOUBLE PRECISION
The reciprocal of the condition number of the matrix A,
computed as RCOND = 1/(norm(A) * norm(inv(A))).
Tolerances
TOL DOUBLE PRECISION
The tolerance to be used to test for near singularity of
the matrix A. If the user sets TOL > 0, then the given
value of TOL is used as a lower bound for the reciprocal
condition number of that matrix; a matrix whose estimated
condition number is less than 1/TOL is considered to be
nonsingular. If the user sets TOL <= 0, then an implicitly
computed, default tolerance, defined by TOLDEF = k*k*EPS,
is used instead, where EPS is the machine precision (see
LAPACK Library routine DLAMCH).
Workspace
IWORK INTEGER array, dimension (k) DWORK DOUBLE PRECISION array, dimension (3*k)Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
= 1: the matrix A is numerically singular, i.e. the
condition number estimate of A (in the specified
norm) exceeds 1/TOL.
Method
An estimate of the reciprocal of the condition number of the triangular matrix A (in the specified norm) is computed, and if this estimate is larger then the given (or default) tolerance, the specified matrix equation is solved using Level 3 BLAS routine DTRSM.References
None.Numerical Aspects
2 The algorithm requires k N/2 operations.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None