Purpose
To generate an orthogonal symplectic matrix U, which is defined as
a product of symplectic reflectors and Givens rotators
U = diag( H(1),H(1) ) G(1) diag( F(1),F(1) )
diag( H(2),H(2) ) G(2) diag( F(2),F(2) )
....
diag( H(n-1),H(n-1) ) G(n-1) diag( F(n-1),F(n-1) ).
as returned by MB04PU. The matrix U is returned in terms of its
first N rows
[ U1 U2 ]
U = [ ].
[ -U2 U1 ]
Specification
SUBROUTINE MB04WP( N, ILO, U1, LDU1, U2, LDU2, CS, TAU, DWORK,
$ LDWORK, INFO )
C .. Scalar Arguments ..
INTEGER ILO, INFO, LDU1, LDU2, LDWORK, N
C .. Array Arguments ..
DOUBLE PRECISION CS(*), DWORK(*), U1(LDU1,*), U2(LDU2,*), TAU(*)
Arguments
Input/Output Parameters
N (input) INTEGER
The order of the matrices U1 and U2. N >= 0.
ILO (input) INTEGER
ILO must have the same value as in the previous call of
MB04PU. U is equal to the unit matrix except in the
submatrix
U([ilo+1:n n+ilo+1:2*n], [ilo+1:n n+ilo+1:2*n]).
1 <= ILO <= N, if N > 0; ILO = 1, if N = 0.
U1 (input/output) DOUBLE PRECISION array, dimension (LDU1,N)
On entry, the leading N-by-N part of this array must
contain in its i-th column the vector which defines the
elementary reflector F(i).
On exit, the leading N-by-N part of this array contains
the matrix U1.
LDU1 INTEGER
The leading dimension of the array U1. LDU1 >= MAX(1,N).
U2 (input/output) DOUBLE PRECISION array, dimension (LDU2,N)
On entry, the leading N-by-N part of this array must
contain in its i-th column the vector which defines the
elementary reflector H(i) and, on the subdiagonal, the
scalar factor of H(i).
On exit, the leading N-by-N part of this array contains
the matrix U2.
LDU2 INTEGER
The leading dimension of the array U2. LDU2 >= MAX(1,N).
CS (input) DOUBLE PRECISION array, dimension (2N-2)
On entry, the first 2N-2 elements of this array must
contain the cosines and sines of the symplectic Givens
rotators G(i).
TAU (input) DOUBLE PRECISION array, dimension (N-1)
On entry, the first N-1 elements of this array must
contain the scalar factors of the elementary reflectors
F(i).
Workspace
DWORK DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, DWORK(1) returns the optimal
value of LDWORK.
On exit, if INFO = -10, DWORK(1) returns the minimum
value of LDWORK.
LDWORK INTEGER
The length of the array DWORK. LDWORK >= MAX(1,2*(N-ILO)).
For optimum performance LDWORK should be larger. (See
SLICOT Library routine MB04WD).
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value.
Numerical Aspects
The algorithm requires O(N**3) floating point operations and is strongly backward stable.References
[1] C. F. VAN LOAN:
A symplectic method for approximating all the eigenvalues of
a Hamiltonian matrix.
Linear Algebra and its Applications, 61, pp. 233-251, 1984.
[2] D. KRESSNER:
Block algorithms for orthogonal symplectic factorizations.
BIT, 43 (4), pp. 775-790, 2003.
Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None