PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_eigen_complex_triang_svd (f02xu)
Purpose
nag_eigen_complex_triang_svd (f02xu) returns all, or part, of the singular value decomposition of a complex upper triangular matrix.
Syntax
[
a,
b,
q,
sv,
rwork,
ifail] = f02xu(
a,
b,
wantq,
wantp, 'n',
n, 'ncolb',
ncolb)
[
a,
b,
q,
sv,
rwork,
ifail] = nag_eigen_complex_triang_svd(
a,
b,
wantq,
wantp, 'n',
n, 'ncolb',
ncolb)
Description
The
by
upper triangular matrix
is factorized as
where
and
are
by
unitary matrices and
is an
by
diagonal matrix with real non-negative diagonal elements,
, ordered such that
The columns of
are the left-hand singular vectors of
, the diagonal elements of
are the singular values of
and the columns of
are the right-hand singular vectors of
.
Either or both of
and
may be requested and the matrix
given by
where
is an
by
given matrix, may also be requested.
nag_eigen_complex_triang_svd (f02xu) obtains the singular value decomposition by first reducing to bidiagonal form by means of Givens plane rotations and then using the algorithm to obtain the singular value decomposition of the bidiagonal form.
Good background descriptions to the singular value decomposition are given in
Dongarra et al. (1979),
Hammarling (1985) and
Wilkinson (1978).
Note that if
is any unitary diagonal matrix so that
then
is also a singular value decomposition of
.
References
Dongarra J J, Moler C B, Bunch J R and Stewart G W (1979) LINPACK Users' Guide SIAM, Philadelphia
Hammarling S (1985) The singular value decomposition in multivariate statistics SIGNUM Newsl. 20(3) 2–25
Wilkinson J H (1978) Singular Value Decomposition – Basic Aspects Numerical Software – Needs and Availability (ed D A H Jacobs) Academic Press
Parameters
Compulsory Input Parameters
- 1:
– complex array
-
The first dimension of the array
a must be at least
.
The second dimension of the array
a must be at least
.
The leading
by
upper triangular part of the array
a must contain the upper triangular matrix
.
- 2:
– complex array
-
The first dimension,
, of the array
b must satisfy
- if , ;
- otherwise .
The second dimension of the array
b must be at least
.
If
, the leading
by
part of the array
b must contain the matrix to be transformed.
- 3:
– logical scalar
-
Must be
true if the matrix
is required.
If
then the array
q is not referenced.
- 4:
– logical scalar
-
Must be
true if the matrix
is required, in which case
is returned in the array
a, otherwise
wantp must be
false.
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
a and the second dimension of the array
a.
, the order of the matrix
.
If , an immediate return is effected.
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the second dimension of the array
b.
, the number of columns of the matrix
.
If
, the array
b is not referenced.
Constraint:
.
Output Parameters
- 1:
– complex array
-
The first dimension of the array
a will be
.
The second dimension of the array
a will be
.
If
, the
by
part of
a will contain the
by
unitary matrix
, otherwise the
by
upper triangular part of
a is used as internal workspace, but the strictly lower triangular part of
a is not referenced.
- 2:
– complex array
-
The first dimension,
, of the array
b will be
- if , ;
- otherwise .
The second dimension of the array
b will be
.
Stores the by matrix .
- 3:
– complex array
-
The first dimension,
, of the array
q will be
- if , ;
- otherwise .
The second dimension of the array
q will be
if
and
otherwise.
If
, the leading
by
part of the array
q will contain the unitary matrix
. Otherwise the array
q is not referenced.
- 4:
– double array
-
The diagonal elements of the matrix .
- 5:
– double array
-
The dimension of the array
rwork will be
if
and
and
,
if
and
and
or
and
or
and
and
otherwise
rwork(
n) contains the total number of iterations taken by the
algorithm.
The rest of the array is used as workspace.
- 6:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Errors or warnings detected by the function:
Cases prefixed with W are classified as warnings and
do not generate an error of type NAG:error_n. See nag_issue_warnings.
-
-
On entry, | , |
or | , |
or | , |
or | and , |
or | and |
- W
-
The algorithm has failed to converge in iterations. In this case may not have been found correctly and the remaining singular values may not be the smallest. The matrix will nevertheless have been factorized as , where is a bidiagonal matrix with as the diagonal elements and as the superdiagonal elements.
This failure is not likely to occur.
-
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
The computed factors
,
and
satisfy the relation
where
is the
machine precision,
is a modest function of
and
denotes the spectral (two) norm. Note that
.
Further Comments
For given values of
ncolb,
wantq and
wantp, the number of floating-point operations required is approximately proportional to
.
>Following the use of
nag_eigen_complex_triang_svd (f02xu) the rank of
may be estimated as follows:
tol = eps;
irank = 1;
while (irank <= numel(sv) && sv(irank) >= tol*sv(1) )
irank = irank + 1;
end
returns the value
in
irank,
where
is the smallest integer for which
, where
is typically the
machine precision,
so that
irank is an estimate of the rank of
and thus also of
.
Example
This example finds the singular value decomposition of the
by
upper triangular matrix
together with the vector
for the vector
Open in the MATLAB editor:
f02xu_example
function f02xu_example
fprintf('f02xu example results\n\n');
a = [ 1, 1 + 1i, 1 + 1i;
0 + 0i, -2 + 0i, -1 - 1i;
0 + 0i, 0 + 0i, -3 + 0i];
b = [ 1 + 1i; -1 + 0i; -1 + 1i];
wantq = true;
wantp = true;
[a, b, q, sv, rwork, ifail] = f02xu( ...
a, b, wantq, wantp);
fprintf('Singular value decomposition of A\n\n');
disp('Singular values');
disp(sv');
disp('Left-hand singular vectors, by column');
disp(q);
disp('Right-hand singular vectors, by column');
disp(ctranspose(a));
disp('Vector Q^H*B');
disp(transpose(b));
f02xu example results
Singular value decomposition of A
Singular values
3.9263 2.0000 0.7641
Left-hand singular vectors, by column
-0.5005 + 0.0000i -0.4529 + 0.0000i 0.7378 + 0.0000i
0.5152 - 0.1514i 0.1132 - 0.5661i 0.4190 - 0.4502i
0.4041 - 0.5457i 0.0000 + 0.6794i 0.2741 + 0.0468i
Right-hand singular vectors, by column
-0.1275 + 0.0000i -0.2265 + 0.0000i 0.9656 + 0.0000i
-0.3899 + 0.2046i -0.3397 + 0.7926i -0.1311 + 0.2129i
-0.5289 + 0.7142i -0.0000 - 0.4529i -0.0698 - 0.0119i
Vector Q^H*B
-1.9656 - 0.7935i 0.1132 - 0.3397i 0.0915 + 0.6086i
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015