NAG Library Function Document
nag_linsys_complex_gen_norm_rcomm (f04zdc)
1
Purpose
nag_linsys_complex_gen_norm_rcomm (f04zdc) estimates the -norm of a complex rectangular matrix without accessing the matrix explicitly. It uses reverse communication for evaluating matrix products. The function may be used for estimating condition numbers of square matrices.
2
Specification
#include <nag.h> |
#include <nagf04.h> |
void |
nag_linsys_complex_gen_norm_rcomm (Integer *irevcm,
Integer m,
Integer n,
Complex x[],
Integer pdx,
Complex y[],
Integer pdy,
double *estnrm,
Integer t,
Integer seed,
Complex work[],
double rwork[],
Integer iwork[],
NagError *fail) |
|
3
Description
nag_linsys_complex_gen_norm_rcomm (f04zdc) computes an estimate (a lower bound) for the
-norm
of an
by
complex matrix
. The function regards the matrix
as being defined by a user-supplied ‘Black Box’ which, given an
matrix
(with
) or an
matrix
, can return
or
, where
is the complex conjugate transpose. A reverse communication interface is used; thus control is returned to the calling program whenever a matrix product is required.
Note: this function is
not
recommended for use when the elements of
are known explicitly; it is then more efficient to compute the
-norm directly from the formula
(1) above.
The main use of the function is for estimating for a square matrix , and hence the condition number
, without forming explicitly ( above).
If, for example, an factorization of is available, the matrix products and required by nag_linsys_complex_gen_norm_rcomm (f04zdc) may be computed by back- and forward-substitutions, without computing .
The function can also be used to estimate
-norms of matrix products such as
and
, without forming the products explicitly. Further applications are described in
Higham (1988).
Since , nag_linsys_complex_gen_norm_rcomm (f04zdc) can be used to estimate the -norm of by working with instead of .
The algorithm used is described in
Higham and Tisseur (2000).
4
References
Higham N J (1988) FORTRAN codes for estimating the one-norm of a real or complex matrix, with applications to condition estimation ACM Trans. Math. Software 14 381–396
Higham N J and Tisseur F (2000) A block algorithm for matrix -norm estimation, with an application to -norm pseudospectra SIAM J. Matrix. Anal. Appl. 21 1185–1201
5
Arguments
Note: this function uses
reverse communication. Its use involves an initial entry, intermediate exits and re-entries, and a final exit, as indicated by the argument
irevcm. Between intermediate exits and re-entries,
all arguments other than x and y must remain unchanged.
- 1:
– Integer *Input/Output
-
On initial entry: must be set to .
On intermediate exit:
or
, and
x contains the
matrix
and
y contains the
matrix
. The calling program must
(a) |
if , evaluate and store the result in y
or
if , evaluate and store the result in x, where is the complex conjugate transpose; |
(b) |
call nag_linsys_complex_gen_norm_rcomm (f04zdc) once again, with all the arguments unchanged. |
On intermediate re-entry:
irevcm must be unchanged.
On final exit: .
Note: any values you return to nag_linsys_complex_gen_norm_rcomm (f04zdc) as part of the reverse communication procedure should not include floating-point NaN (Not a Number) or infinity values, since these are not handled by nag_linsys_complex_gen_norm_rcomm (f04zdc). If your code inadvertently does return any NaNs or infinities, nag_linsys_complex_gen_norm_rcomm (f04zdc) is likely to produce unexpected results.
- 2:
– IntegerInput
-
On entry: the number of rows of the matrix .
Constraint:
.
- 3:
– IntegerInput
-
On initial entry: , the number of columns of the matrix .
Constraint:
.
- 4:
– ComplexInput/Output
-
Note: the dimension,
dim, of the array
x
must be at least
.
The th element of the matrix is stored in .
On initial entry: need not be set.
On intermediate exit:
if , contains the current matrix .
On intermediate re-entry: if , must contain .
On final exit: the array is undefined.
- 5:
– IntegerInput
-
On entry: the stride separating matrix row elements in the array
x.
Constraint:
.
- 6:
– ComplexInput/Output
-
Note: the dimension,
dim, of the array
y
must be at least
.
The th element of the matrix is stored in .
On initial entry: need not be set.
On intermediate exit:
if , contains the current matrix .
On intermediate re-entry: if , must contain .
On final exit: the array is undefined.
- 7:
– IntegerInput
-
On entry: the stride separating matrix row elements in the array
y.
Constraint:
.
- 8:
– double *Input/Output
-
On initial entry: need not be set.
On intermediate re-entry: must not be changed.
On final exit: an estimate (a lower bound) for .
- 9:
– IntegerInput
-
On entry: the number of columns
of the matrices
and
. This is an argument that can be used to control the accuracy and reliability of the estimate and corresponds roughly to the number of columns of
that are visited during each iteration of the algorithm.
If then a partly random starting matrix is used in the algorithm.
Suggested value:
.
Constraint:
.
- 10:
– IntegerInput
-
On entry: the seed used for random number generation.
If
,
seed is not used.
Constraint:
if , .
- 11:
– ComplexCommunication Array
- 12:
– doubleCommunication Array
- 13:
– IntegerCommunication Array
-
On initial entry: need not be set.
On intermediate re-entry: must not be changed.
- 14:
– NagError *Input/Output
-
The NAG error argument (see
Section 3.7 in How to Use the NAG Library and its Documentation).
6
Error Indicators and Warnings
- NE_ALLOC_FAIL
-
Dynamic memory allocation failed.
See
Section 2.3.1.2 in How to Use the NAG Library and its Documentation for further information.
- NE_BAD_PARAM
-
On entry, argument had an illegal value.
- NE_INT
-
On entry, .
Constraint: , or .
On entry, .
Constraint: .
On entry, .
Constraint: .
On initial entry, .
Constraint: .
- NE_INT_2
-
On entry, and .
Constraint: .
On entry, and .
Constraint: .
On entry, and .
Constraint: .
On entry, and .
Constraint: if , .
- NE_INTERNAL_ERROR
-
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact
NAG for assistance.
See
Section 2.7.6 in How to Use the NAG Library and its Documentation for further information.
- NE_NO_LICENCE
-
Your licence key may have expired or may not have been installed correctly.
See
Section 2.7.5 in How to Use the NAG Library and its Documentation for further information.
7
Accuracy
In extensive tests on
random matrices of size up to
the estimate
estnrm has been found always to be within a factor two of
; often the estimate has many correct figures. However, matrices exist for which the estimate is smaller than
by an arbitrary factor; such matrices are very unlikely to arise in practice. See
Higham and Tisseur (2000) for further details.
8
Parallelism and Performance
nag_linsys_complex_gen_norm_rcomm (f04zdc) is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
Please consult the
x06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this function. Please also consult the
Users' Note for your implementation for any additional implementation-specific information.
For most problems the time taken during calls to nag_linsys_complex_gen_norm_rcomm (f04zdc) will be negligible compared with the time spent evaluating matrix products between calls to nag_linsys_complex_gen_norm_rcomm (f04zdc).
The number of matrix products required depends on the matrix . At most six products of the form and five products of the form will be required. The number of iterations is independent of the choice of .
It is your responsibility to guard against potential overflows during evaluation of the matrix products. In particular, when estimating using a triangular factorization of , nag_linsys_complex_gen_norm_rcomm (f04zdc) should not be called if one of the factors is exactly singular – otherwise division by zero may occur in the substitutions.
9.3
Choice of
The argument controls the accuracy and reliability of the estimate. For , the algorithm behaves similarly to the LAPACK estimator xLACON. Increasing typically improves the estimate, without increasing the number of iterations required.
For
, random matrices are used in the algorithm, so for repeatable results the same value of
seed should be used each time.
A value of is recommended for new users.
To estimate the
-norm of the inverse of a matrix
, the following skeleton code can normally be used:
do {
f04zdc(&irevcm,m,n,x,pdx,y,pdy,&estnrm,t,seed,work,rwork,iwork,&fail);
if (irevcm == 1){
.. Code to compute y = A^(-1) x ..
}
else if (irevcm == 2){
.. Code to compute x = A^(-H) y ..
}
} (while irevcm != 0)
To compute
or
, solve the equation
or
storing the result in
y or
x respectively. The code will vary, depending on the type of the matrix
, and the NAG function used to factorize
.
The example program in
Section 10 illustrates how
nag_linsys_complex_gen_norm_rcomm (f04zdc) can be used in conjunction with NAG C Library function for
factorization of complex matrices
nag_zgetrf (f07arc)).
It is also straightforward to use
nag_linsys_complex_gen_norm_rcomm (f04zdc) for Hermitian positive definite matrices, using
nag_zge_copy (f16tfc),
nag_zpotrf (f07frc) and
nag_zpotrs (f07fsc) for factorization and solution.
For upper or lower triangular square matrices, no factorization function is needed:
and
may be computed by calls to
nag_ztrsv (f16sjc) (or
nag_ztbsv (f16skc) if the matrix is banded, or
nag_ztpsv (f16slc) if the matrix is stored in packed form).
10
Example
This example estimates the condition number
of the matrix
given by
10.1
Program Text
Program Text (f04zdce.c)
10.2
Program Data
Program Data (f04zdce.d)
10.3
Program Results
Program Results (f04zdce.r)