?larft
?larft
Forms the triangular factor
T
of a block reflector H
= I
- V
*T
*V
**H
.Syntax
lapack_int
LAPACKE_slarft
(
int
matrix_layout
,
char
direct
,
char
storev
,
lapack_int
n
,
lapack_int
k
,
const
float
*
v
,
lapack_int
ldv
,
const
float
*
tau
,
float
*
t
,
lapack_int
ldt
);
lapack_int
LAPACKE_dlarft
(
int
matrix_layout
,
char
direct
,
char
storev
,
lapack_int
n
,
lapack_int
k
,
const
double
*
v
,
lapack_int
ldv
,
const
double
*
tau
,
double
*
t
,
lapack_int
ldt
);
lapack_int
LAPACKE_clarft
(
int
matrix_layout
,
char
direct
,
char
storev
,
lapack_int
n
,
lapack_int
k
,
const
lapack_complex_float
*
v
,
lapack_int
ldv
,
const
lapack_complex_float
*
tau
,
lapack_complex_float
*
t
,
lapack_int
ldt
);
lapack_int
LAPACKE_zlarft
(
int
matrix_layout
,
char
direct
,
char
storev
,
lapack_int
n
,
lapack_int
k
,
const
lapack_complex_double
*
v
,
lapack_int
ldv
,
const
lapack_complex_double
*
tau
,
lapack_complex_double
*
t
,
lapack_int
ldt
);
Include Files
- mkl.h
Description
The routine
?larft
forms the triangular factor T
of a real/complex block reflector H
of order n
, which is defined as a product of k
elementary reflectors.If , and
direct
= 'F'
H
= H
(1)*H
(2)* . . .*H
(k
)T
is upper triangular;If , and
direct
= 'B'
H
= H
(k
)*. . .*H
(2)*H
(1)T
is lower triangular.If , the vector which defines the elementary reflector H( (for real flavors) or (for complex flavors) .
storev
= 'C'
i
) is stored in the i
-th column of the array v
, and H
= I
- V
*T
*V
T
H
= I
- V
*T
*V
H
If , the vector which defines the elementary reflector H(* (for real flavors) or * (for complex flavors).
storev
= 'R'
i
) is stored in the i
-th row of the array v
, and H
= I
- V
T
T
*V
H
= I
- V
H
T
*V
Input Parameters
A
<datatype>
placeholder, if present, is used for the C interface data types in the C interface section above. See
C Interface Conventions
for the C interface principal conventions and type definitions.
- direct
- Specifies the order in which the elementary reflectors are multiplied to form the block reflector:='F':(forward)H=H(1)*H(2)*. . . *H(k)='B':(backward)H=H(k)*. . .*H(2)*H(1)
- storev
- Specifies how the vectors which define the elementary reflectors are stored(see also:Application Notesbelow)='C': column-wise='R': row-wise.
- The order of the block reflectorH..n≥0
- k
- The order of the triangular factorT(equal to the number of elementary reflectors)..k≥1
- v
- The size limitations depend on values of parametersstorevandsideas described in the following table:storev=Cstorev=RColumn majormax(1,ldv*k)max(1,ldv*n)Row majormax(1,ldv*n)max(1,ldv*k)The matrixv.SeeApplication Notesbelow.
- ldv
- The leading dimension of the arrayv.If,storev='C'ldv≥max(1,n)for column major andfor row major;ldv≥max(1,k)if,storev='R'ldv≥kfor column major and.for row majorldv≥max(1,n)
- tau
- Array, size (k).tau[must contain the scalar factor of the elementary reflectori-1]H(i).
- ldt
- The leading dimension of the output arrayt..ldt≥k
Output Parameters
- t
- Array, size. Theldt*kk-by-ktriangular factorTof the block reflector. If,direct='F'Tis upper triangular; if,direct='B'Tis lower triangular. The rest of the array is not used.
- v
- The matrixV.
Application Notes
The shape of the matrix and . The elements equal to 1 are not stored; the corresponding array elements are modified but restored on exit. The rest of the array is not
used.
V
and the storage of the vectors which define the H
(i
) is best illustrated by the following example with n
= 5k
= 3
