PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_lapack_ztgsja (f08ys)
Purpose
nag_lapack_ztgsja (f08ys) computes the generalized singular value decomposition (GSVD) of two complex upper trapezoidal matrices and , where is an by matrix and is a by matrix.
and
are assumed to be in the form returned by
nag_lapack_zggsvp (f08vs).
Syntax
[
a,
b,
alpha,
beta,
u,
v,
q,
ncycle,
info] = f08ys(
jobu,
jobv,
jobq,
k,
l,
a,
b,
tola,
tolb,
u,
v,
q, 'm',
m, 'p',
p, 'n',
n)
[
a,
b,
alpha,
beta,
u,
v,
q,
ncycle,
info] = nag_lapack_ztgsja(
jobu,
jobv,
jobq,
k,
l,
a,
b,
tola,
tolb,
u,
v,
q, 'm',
m, 'p',
p, 'n',
n)
Description
nag_lapack_ztgsja (f08ys) computes the GSVD of the matrices
and
which are assumed to have the form as returned by
nag_lapack_zggsvp (f08vs)
where the
by
matrix
and the
by
matrix
are nonsingular upper triangular,
is
by
upper triangular if
and is
by
upper trapezoidal otherwise.
nag_lapack_ztgsja (f08ys) computes unitary matrices
,
and
, diagonal matrices
and
, and an upper triangular matrix
such that
Optionally , and may or may not be computed, or they may be premultiplied by matrices , and respectively.
If
then
,
and
have the form
where
.
If
then
,
and
have the form
where
.
In both cases the diagonal matrix
has real non-negative diagonal elements, the diagonal matrix
has real positive diagonal elements, so that
is nonsingular, and
. See Section 2.3.5.3 of
Anderson et al. (1999) for further information.
References
Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999)
LAPACK Users' Guide (3rd Edition) SIAM, Philadelphia
http://www.netlib.org/lapack/lug
Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore
Parameters
Compulsory Input Parameters
- 1:
– string (length ≥ 1)
-
If
,
u must contain a unitary matrix
on entry, and the product
is returned.
If
,
u is initialized to the unit matrix, and the unitary matrix
is returned.
If , is not computed.
Constraint:
, or .
- 2:
– string (length ≥ 1)
-
If
,
v must contain a unitary matrix
on entry, and the product
is returned.
If
,
v is initialized to the unit matrix, and the unitary matrix
is returned.
If , is not computed.
Constraint:
, or .
- 3:
– string (length ≥ 1)
-
If
,
q must contain a unitary matrix
on entry, and the product
is returned.
If
,
q is initialized to the unit matrix, and the unitary matrix
is returned.
If , is not computed.
Constraint:
, or .
- 4:
– int64int32nag_int scalar
- 5:
– int64int32nag_int scalar
-
k and
l specify the sizes,
and
, of the subblocks of
and
, whose GSVD is to be computed by
nag_lapack_ztgsja (f08ys).
- 6:
– 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 by matrix .
- 7:
– complex array
-
The first dimension of the array
b must be at least
.
The second dimension of the array
b must be at least
.
The by matrix .
- 8:
– double scalar
- 9:
– double scalar
-
tola and
tolb are the convergence criteria for the Jacobi–Kogbetliantz iteration procedure. Generally, they should be the same as used in the preprocessing step performed by
nag_lapack_zggsvp (f08vs), say
where
is the
machine precision.
- 10:
– complex array
-
The first dimension,
, of the array
u must satisfy
- if or , ;
- otherwise .
The second dimension of the array
u must be at least
if
or
, and at least
otherwise.
If
,
u must contain an
by
matrix
(usually the unitary matrix returned by
nag_lapack_zggsvp (f08vs)).
- 11:
– complex array
-
The first dimension,
, of the array
v must satisfy
- if or , ;
- otherwise .
The second dimension of the array
v must be at least
if
or
, and at least
otherwise.
If
,
v must contain an
by
matrix
(usually the unitary matrix returned by
nag_lapack_zggsvp (f08vs)).
- 12:
– complex array
-
The first dimension,
, of the array
q must satisfy
- if or , ;
- otherwise .
The second dimension of the array
q must be at least
if
or
, and at least
otherwise.
If
,
q must contain an
by
matrix
(usually the unitary matrix returned by
nag_lapack_zggsvp (f08vs)).
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
a.
, the number of rows of the matrix .
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
b.
, the number of rows of the matrix .
Constraint:
.
- 3:
– int64int32nag_int scalar
-
Default:
the second dimension of the array
a.
, the number of columns of the matrices and .
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
,
contains the
by
upper triangular matrix
.
If , contains the first rows of the by upper triangular matrix , and the submatrix is returned in .
- 2:
– complex array
-
The first dimension of the array
b will be
.
The second dimension of the array
b will be
.
If , contains the submatrix of .
- 3:
– double array
-
See the description of
beta.
- 4:
– double array
-
alpha and
beta contain the generalized singular value pairs of
and
;
- , , for , and
- if ,
, , for , or
- if ,
, , for and
, , for .
Furthermore, if ,
, for .
- 5:
– complex array
-
The first dimension,
, of the array
u will be
- if or , ;
- otherwise .
The second dimension of the array
u will be
if
or
and
otherwise.
If
,
u contains the product
.
If
,
u contains the unitary matrix
.
If
,
u is not referenced.
- 6:
– complex array
-
The first dimension,
, of the array
v will be
- if or , ;
- otherwise .
The second dimension of the array
v will be
if
or
and
otherwise.
If
,
v contains the unitary matrix
.
If
,
v contains the product
.
If
,
v is not referenced.
- 7:
– complex array
-
The first dimension,
, of the array
q will be
- if or , ;
- otherwise .
The second dimension of the array
q will be
if
or
and
otherwise.
If
,
q contains the unitary matrix
.
If
,
q contains the product
.
If
,
q is not referenced.
- 8:
– int64int32nag_int scalar
-
The number of cycles required for convergence.
- 9:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
-
If , parameter had an illegal value on entry. The parameters are numbered as follows:
1:
jobu, 2:
jobv, 3:
jobq, 4:
m, 5:
p, 6:
n, 7:
k, 8:
l, 9:
a, 10:
lda, 11:
b, 12:
ldb, 13:
tola, 14:
tolb, 15:
alpha, 16:
beta, 17:
u, 18:
ldu, 19:
v, 20:
ldv, 21:
q, 22:
ldq, 23:
work, 24:
ncycle, 25:
info.
It is possible that
info refers to a parameter that is omitted from the MATLAB interface. This usually indicates that an error in one of the other input parameters has caused an incorrect value to be inferred.
-
-
The procedure does not converge after cycles.
Accuracy
The computed generalized singular value decomposition is nearly the exact generalized singular value decomposition for nearby matrices
and
, where
and
is the
machine precision. See Section 4.12 of
Anderson et al. (1999) for further details.
Further Comments
The real analogue of this function is
nag_lapack_dtgsja (f08ye).
Example
This example finds the generalized singular value decomposition
of the matrix pair
, where
and
Open in the MATLAB editor:
f08ys_example
function f08ys_example
fprintf('f08ys example results\n\n');
A = [ 0.96-0.81i -0.03+0.96i -0.91+2.06i -0.05+0.41i;
-0.98+1.98i -1.20+0.19i -0.66+0.42i -0.81+0.56i;
0.62-0.46i 1.01+0.02i 0.63-0.17i -1.11+0.60i;
0.37+0.38i 0.19-0.54i -0.98-0.36i 0.22-0.20i;
0.83+0.51i 0.20+0.01i -0.17-0.46i 1.47+1.59i;
1.08-0.28i 0.20-0.12i -0.07+1.23i 0.26+0.26i];
B = complex([ 1 0 -1 0;
0 1 0 -1]);
[m, n] = size(A);
p = size(B,1);
tola = max(m,n)*norm(A,1)*x02aj;
tolb = max(p,n)*norm(B,1)*x02aj;
[S, T, k, l, U, V, Q, info] = ...
f08vs(...
'U', 'V', 'Q', A, B, tola, tolb);
[S, T, alpha, beta, U, V, Q, ncycle, info] = ...
f08ys('U', 'V', 'Q', k, l, S, T, tola, tolb, U, V, Q);
fprintf('Number of infinite generalized singular values = %3d\n',k);
fprintf('Number of finite generalized singular values = %3d\n',l);
fprintf('Effective rank of the matrix pair (A^T B^T)^T = %3d\n',k+l);
fprintf('Number of cycles of the Kogbetliantz method = %3d\n\n',ncycle);
disp('Finite generalized singular values');
disp(alpha(k+1:k+l)./beta(k+1:k+l));
f08ys example results
Number of infinite generalized singular values = 2
Number of finite generalized singular values = 2
Effective rank of the matrix pair (A^T B^T)^T = 4
Number of cycles of the Kogbetliantz method = 2
Finite generalized singular values
2.0720
1.1058
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015