Purpose
To overwrite the real n-by-m matrix C with Q' * C, Q * C,
C * Q', or C * Q, according to the following table
SIDE = 'L' SIDE = 'R'
TRANS = 'N': Q * C C * Q
TRANS = 'T': Q'* C C * Q'
where Q is a real orthogonal matrix defined as the product of
k elementary reflectors
Q = H(1) H(2) . . . H(k)
as returned by SLICOT Library routine MB04ID. Q is of order n
if SIDE = 'L' and of order m if SIDE = 'R'.
Specification
SUBROUTINE MB04IY( SIDE, TRANS, N, M, K, P, A, LDA, TAU, C, LDC,
$ DWORK, LDWORK, INFO )
C .. Scalar Arguments ..
INTEGER INFO, K, LDA, LDC, LDWORK, M, N, P
CHARACTER SIDE, TRANS
C .. Array Arguments ..
DOUBLE PRECISION A( LDA, * ), C( LDC, * ), DWORK( * ), TAU( * )
Arguments
Mode Parameters
SIDE CHARACTER*1
Specify if Q or Q' is applied from the left or right,
as follows:
= 'L': apply Q or Q' from the left;
= 'R': apply Q or Q' from the right.
TRANS CHARACTER*1
Specify if Q or Q' is to be applied, as follows:
= 'N': apply Q (No transpose);
= 'T': apply Q' (Transpose).
Input/Output Parameters
N (input) INTEGER
The number of rows of the matrix C. N >= 0.
M (input) INTEGER
The number of columns of the matrix C. M >= 0.
K (input) INTEGER
The number of elementary reflectors whose product defines
the matrix Q.
N >= K >= 0, if SIDE = 'L';
M >= K >= 0, if SIDE = 'R'.
P (input) INTEGER
The order of the zero triagle (or the number of rows of
the zero trapezoid) in the matrix triangularized by SLICOT
Library routine MB04ID. P >= 0.
A (input) DOUBLE PRECISION array, dimension (LDA,K)
On input, the elements in the rows i+1:min(n,n-p-1+i) of
the i-th column, and TAU(i), represent the orthogonal
reflector H(i), so that matrix Q is the product of
elementary reflectors: Q = H(1) H(2) . . . H(k).
A is modified by the routine but restored on exit.
LDA INTEGER
The leading dimension of the array A.
LDA >= max(1,N), if SIDE = 'L';
LDA >= max(1,M), if SIDE = 'R'.
TAU (input) DOUBLE PRECISION array, dimension (K)
The scalar factors of the elementary reflectors.
C (input/output) DOUBLE PRECISION array, dimension (LDC,M)
On entry, the leading N-by-M part of this array must
contain the matrix C.
On exit, the leading N-by-M part of this array contains
the updated matrix C.
LDC INTEGER
The leading dimension of the array C. LDC >= max(1,N).
Workspace
DWORK DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, DWORK(1) returns the optimal value
of LDWORK.
LDWORK INTEGER
The length of the array DWORK.
LDWORK >= MAX(1,M), if SIDE = 'L';
LDWORK >= MAX(1,N), if SIDE = 'R'.
For optimum performance LDWORK >= M*NB if SIDE = 'L',
or LDWORK >= N*NB if SIDE = 'R', where NB is the optimal
block size.
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value.
Method
If SIDE = 'L', each elementary reflector H(i) modifies n-p elements of each column of C, for i = 1:p+1, and n-i+1 elements, for i = p+2:k. If SIDE = 'R', each elementary reflector H(i) modifies m-p elements of each row of C, for i = 1:p+1, and m-i+1 elements, for i = p+2:k.Numerical Aspects
The implemented method is numerically stable.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None