?orm2l/?unm2l

Multiplies a general matrix by the orthogonal/unitary matrix from a QL factorization determined by ?geqlf (unblocked algorithm).

Syntax

call sorm2l( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

call dorm2l( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

call cunm2l( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

call zunm2l( side, trans, m, n, k, a, lda, tau, c, ldc, work, info )

Include Files

The FORTRAN 77 interfaces are specified in the mkl_lapack.fi include file (to be used in Fortran programs) and in the mkl_lapack.h include file (to be used in C programs).

Description

The routine ?orm2l/?unm2l overwrites the general real/complex m-by-n matrix C with

Q*C if side = 'L' and trans = 'N', or

QT*C / QH*C if side = 'L' and trans = 'T' (for real flavors) or trans = 'C' (for complex flavors), or

C*Q if side = 'R' and trans = 'N', or

C*QT / C*QH if side = 'R' and trans = 'T' (for real flavors) or trans = 'C' (for complex flavors).

Here Q is a real orthogonal or complex unitary matrix defined as the product of k elementary reflectors

Q = H(k)*...*H(2)*H(1) as returned by ?geqlf.

Q is of order m if side = 'L' and of order n if side = 'R'.

Input Parameters

side

CHARACTER*1.

= 'L': apply Q or QT / QH from the left

= 'R': apply Q or QT / QH from the right

trans

CHARACTER*1.

= 'N': apply Q (no transpose)

= 'T': apply QT (transpose, for real flavors)

= 'C': apply QH (conjugate transpose, for complex flavors)

m

INTEGER. The number of rows of the matrix C. m 0.

n

INTEGER. The number of columns of the matrix C. n 0.

k

INTEGER. The number of elementary reflectors whose product defines the matrix Q.

If side = 'L', m k 0;

if side = 'R', n k 0.

a

REAL for sorm2l

DOUBLE PRECISION for dorm2l

COMPLEX for cunm2l

COMPLEX*16 for zunm2l.

Array, DIMENSION (lda,k).

The i-th column must contain the vector which defines the elementary reflector H(i), for i = 1,2,..., k, as returned by ?geqlf in the last k columns of its array argument a. The array a is modified by the routine but restored on exit.

lda

INTEGER. The leading dimension of the array a.

If side = 'L', lda max(1, m)

if side = 'R', lda max(1, n).

tau

REAL for sorm2l

DOUBLE PRECISION for dorm2l

COMPLEX for cunm2l

COMPLEX*16 for zunm2l.

Array, DIMENSION (k). tau(i) must contain the scalar factor of the elementary reflector H(i), as returned by ?geqlf.

c

REAL for sorm2l

DOUBLE PRECISION for dorm2l

COMPLEX for cunm2l

COMPLEX*16 for zunm2l.

Array, DIMENSION (ldc, n).

On entry, the m-by-n matrix C.

ldc

INTEGER. The leading dimension of the array C. ldc max(1,m).

work

REAL for sorm2l

DOUBLE PRECISION for dorm2l

COMPLEX for cunm2l

COMPLEX*16 for zunm2l.

Workspace array, DIMENSION:

(n) if side = 'L',

(m) if side = 'R'.

Output Parameters

c

On exit, c is overwritten by Q*C or QT*C / QH*C, or C*Q, or C*QT / C*QH.

info

INTEGER.

= 0: successful exit

< 0: if info = -i, the i-th argument had an illegal value


Submit feedback on this help topic

Copyright © 1994 - 2010, Intel Corporation. All rights reserved.