PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_linsys_real_gen_norm_rcomm (f04yd)
Purpose
nag_linsys_real_gen_norm_rcomm (f04yd) estimates the -norm of a real 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.
Syntax
[
irevcm,
x,
y,
estnrm,
work,
iwork,
ifail] = f04yd(
irevcm,
x,
y,
estnrm,
seed,
work,
iwork, 'm',
m, 'n',
n, 't',
t)
[
irevcm,
x,
y,
estnrm,
work,
iwork,
ifail] = nag_linsys_real_gen_norm_rcomm(
irevcm,
x,
y,
estnrm,
seed,
work,
iwork, 'm',
m, 'n',
n, 't',
t)
Description
nag_linsys_real_gen_norm_rcomm (f04yd) computes an estimate (a lower bound) for the
-norm
of an
by
real 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
. 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 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_real_gen_norm_rcomm (f04yd) 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 by
Higham (1988).
Since , nag_linsys_real_gen_norm_rcomm (f04yd) can be used to estimate the -norm of by working with instead of .
The algorithm used is described in
Higham and Tisseur (2000).
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
Parameters
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.
Compulsory Input Parameters
- 1:
– int64int32nag_int scalar
-
On initial entry: must be set to .
On intermediate re-entry:
irevcm must be unchanged.
- 2:
– double array
-
The first dimension of the array
x must be at least
.
The second dimension of the array
x must be at least
.
On initial entry: need not be set.
On intermediate re-entry: if , must contain .
- 3:
– double array
-
The first dimension of the array
y must be at least
.
The second dimension of the array
y must be at least
.
On initial entry: need not be set.
On intermediate re-entry: if , must contain .
- 4:
– double scalar
-
On initial entry: need not be set.
On intermediate re-entry: must not be changed.
- 5:
– int64int32nag_int scalar
-
The seed used for random number generation.
If
,
seed is not used.
Constraint:
if , .
- 6:
– double array
- 7:
– int64int32nag_int array
-
On initial entry: need not be set.
On intermediate re-entry: must not be changed.
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the arrays
y,
work. (An error is raised if these dimensions are not equal.)
The number of rows of the matrix .
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
x and the dimension of the array
iwork. (An error is raised if these dimensions are not equal.)
, the number of columns of the matrix .
Constraint:
.
- 3:
– int64int32nag_int scalar
Suggested value:
.
Default:
the second dimension of the arrays
x,
y. (An error is raised if these dimensions are not equal.)
The number of columns
of the matrices
and
. This is a 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.
Constraint:
.
Output Parameters
- 1:
– int64int32nag_int scalar
-
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, |
(b) |
call nag_linsys_real_gen_norm_rcomm (f04yd) once again, with all the other arguments unchanged. |
On final exit: .
- 2:
– double array
-
The first dimension of the array
x will be
.
The second dimension of the array
x will be
.
On intermediate exit:
if , contains the current matrix .
On final exit: the array is undefined.
- 3:
– double array
-
The first dimension of the array
y will be
.
The second dimension of the array
y will be
.
On intermediate exit:
if , contains the current matrix .
On final exit: the array is undefined.
- 4:
– double scalar
-
On final exit: an estimate (a lower bound) for .
- 5:
– double array
- 6:
– int64int32nag_int array
-
- 7:
– int64int32nag_int scalar
On final exit:
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Errors or warnings detected by the function:
-
-
Internal error; please contact
NAG.
-
-
Constraint: , or .
On initial entry, .
Constraint: .
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: if , .
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
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.
Further Comments
Timing
For most problems the time taken during calls to nag_linsys_real_gen_norm_rcomm (f04yd) will be negligible compared with the time spent evaluating matrix products between calls to nag_linsys_real_gen_norm_rcomm (f04yd).
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 .
Overflow
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_real_gen_norm_rcomm (f04yd) should not be called if one of the factors is exactly singular – otherwise division by zero may occur in the substitutions.
Choice of t
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.
Use in Conjunction with NAG Library Routines
To estimate the
-norm of the inverse of a matrix
, the following skeleton code can normally be used:
... code to factorize A ...
if (A is not singular)
icase = 0;
[icase, x, estnrm, work, iwork, ifail] = f04yd(icase, x, estnrm, work, iwork);
while (icase ~= 0)
if (icase == 1)
... code to compute inv(A)*x ...
else
... code to compute inv(transpose(A))*x ...
end
[icase, x, estnrm, work, iwork, ifail] = f04yd(icase, x, estnrm, work, iwork);
end
end
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 factorization will normally have been performed by a suitable function from
Chapters F01,
F03 or
F07. Note also that many of the ‘Black Box’ functions in
Chapter F04 for solving systems of equations also return a factorization of the matrix. The example program in
Example illustrates how
nag_linsys_real_gen_norm_rcomm (f04yd) can be used in conjunction with NAG Toolbox functions for
factorization of a real matrix
nag_lapack_dgetrf (f07ad).
It is straightforward to use
nag_linsys_real_gen_norm_rcomm (f04yd) for the following other types of matrix, using the named functions for factorization and solution:
Example
For this function two examples are provided. There is a single example program for nag_linsys_real_gen_norm_rcomm (f04yd), with a main program and the code to solve the two example problems is given in Example 1 (EX1) and Example 2 (EX2).
Example 1 (EX1)
This example estimates the condition number
of the matrix
given by
Example 2 (EX2)
This example estimates the condition number of the sparse matrix
(stored in symmetric coordinate storage format) given by
Open in the MATLAB editor:
f04yd_example
function f04yd_example
fprintf('f04yd example results\n\n');
fprintf('\nExample 1\n');
a = [0.7, -0.2, 1.0, 0.0, 2.0, 0.1;
0.3, 0.7, 0.0, 1.0, 0.9, 0.2;
0.0, 0.0, 0.2, 0.7, 0.0, -1.1;
0.0, 3.4, -0.7, 0.2, 0.1, 0.1;
0.0, -4.0, 0.0, 1.0, 9.0, 0.0;
0.4, 1.2, 4.3, 0.0, 6.2, 5.9];
t = int64(2);
m = 6;
n = 6;
x = zeros(n, t);
y = zeros(m, t);
estnrm = 0;
seed = int64(354);
irevcm = int64(0);
work = zeros(n*t, 1);
iwork = zeros(2*n+5*t+20, 1, 'int64');
nrma = norm(a, 1);
fprintf('\nThe norm of a is %6.2f\n', nrma);
[a, ipiv, info] = f07ad(a);
first = true;
while first || (irevcm ~= 0)
first = false;
[irevcm, x, y, estnrm, work, iwork, ifail] = ...
f04yd( ...
irevcm, x, y, estnrm, seed, work, iwork);
switch irevcm
case 1
[y, info] = f07ae('n', a, ipiv, x);
case 2
[x, info] = f07ae('t', a, ipiv, y);
otherwise
end
end
fprintf('The estimated norm of inverse(a) is: %6.2f\n', estnrm);
fprintf('\nEstimated condition number of a: %6.2f\n', estnrm*nrma);
fprintf('\nExample 2\n');
t = int64(2);
n = int64(5);
nz = int64(10);
a = zeros(4*nz, 1);
icn = zeros(4*nz, 1, 'int64');
irn = zeros(4*nz, 1, 'int64');
a(1:nz) = [3; 2; 1; 2; 1; 4; 2; 1; 2; 5];
irn(1:nz) = [2; 4; 2; 3; 5; 4; 5; 1; 3; 4];
icn(1:nz) = [1; 1; 2; 2; 2; 3; 3; 4; 4; 5];
x = zeros(n, t);
y = zeros(n, t);
estnrm = 0;
seed = int64(412);
irevcm = int64(0);
work = zeros(n*t, 1);
iwork = zeros(2*n+5*t+20, 1, 'int64');
nrma = 0;
for i = 1:n
asum = 0;
for j = 1:nz
if (icn(j)==i)
asum = asum + abs(a(j));
end
end
nrma = max(nrma,asum);
end
fprintf('\nThe norm of a is %6.2f\n', nrma);
abort = [true; true; false; false];
[a, irn, icn, ikeep, w, idisp, ifail] = ...
f01br(n, nz, a, irn, icn, abort);
first = true;
while first || (irevcm ~= 0)
first = false;
[irevcm, x, y, estnrm, work, iwork, ifail] = ...
f04yd( ...
irevcm, x, y, estnrm, seed, work, iwork);
switch irevcm
case 1
for i=1:2
[y(:, i), resid] = f04ax( ...
a, icn, ikeep, x(:, i), irevcm, idisp);
end
case 2
for i=1:2
[x(:, i), resid] = f04ax( ...
a, icn, ikeep, y(:, i), irevcm, idisp);
end
otherwise
end
end
fprintf('The estimated norm of inverse(a) is: %6.2f\n', estnrm);
fprintf('\nEstimated condition number of a: %6.2f\n', estnrm*nrma);
f04yd example results
Example 1
The norm of a is 18.20
The estimated norm of inverse(a) is: 2.97
Estimated condition number of a: 54.14
Example 2
The norm of a is 6.00
The estimated norm of inverse(a) is: 3.37
Estimated condition number of a: 20.20
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015