# ?larz

Applies an elementary reflector (as returned by ?tzrzf) to a general matrix.

## Syntax

call slarz( side, m, n, l, v, incv, tau, c, ldc, work )

call dlarz( side, m, n, l, v, incv, tau, c, ldc, work )

call clarz( side, m, n, l, v, incv, tau, c, ldc, work )

call zlarz( side, m, n, l, v, incv, tau, c, ldc, work )

## Description

The routine ?larz applies a real/complex elementary reflector H to a real/complex m-by-n matrix C, from either the left or the right. H is represented in the form

`H = I-tau*v*v'`,

where tau is a real/complex scalar and v is a real/complex vector.

If `tau = 0`, then H is taken to be the unit matrix.

For complex flavors, to apply HH (the conjugate transpose of H), supply conjg(tau) instead of tau.

H is a product of k elementary reflectors as returned by ?tzrzf.

## Input Parameters

side

  CHARACTER*1.

  If `side = 'L'`: form H*C

  If `side = 'R'`: form C*H

m

  INTEGER. The number of rows of the matrix C.

n

  INTEGER. The number of columns of the matrix C.

l

  INTEGER. The number of entries of the vector v containing the meaningful part of the Householder vectors.

  If `side = 'L'`, `m ≥ L ≥ 0`,

  if `side = 'R'`, `n ≥ L ≥ 0`.

v

  REAL for slarz

  DOUBLE PRECISION for dlarz

  COMPLEX for clarz

  COMPLEX*16 for zlarz

  Array, DIMENSION (1+(l-1)*abs(incv)).

  The vector v in the representation of H as returned by ?tzrzf.

  v is not used if `tau = 0`.

incv

  INTEGER. The increment between elements of v.

  `incv ≠ 0`.

tau

  REAL for slarz

  DOUBLE PRECISION for dlarz

  COMPLEX for clarz

  COMPLEX*16 for zlarz

  The value tau in the representation of H.

c

  REAL for slarz

  DOUBLE PRECISION for dlarz

  COMPLEX for clarz

  COMPLEX*16 for zlarz

  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 slarz

  DOUBLE PRECISION for dlarz

  COMPLEX for clarz

  COMPLEX*16 for zlarz

  Workspace array, DIMENSION

  (n) if `side = 'L'` or

  (m) if `side = 'R'`.

## Output Parameters

c

  On exit, C is overwritten by the matrix H*C if `side = 'L'`, or C*H if `side = 'R'`.

Parent topic: Auxiliary Routines