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