?hetrf
?hetrf
Computes the Bunch-Kaufman factorization of a complex Hermitian matrix.
Syntax
lapack_int
LAPACKE_chetrf
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
lapack_complex_float
*
a
,
lapack_int
lda
,
lapack_int
*
ipiv
);
lapack_int
LAPACKE_zhetrf
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
lapack_complex_double
*
a
,
lapack_int
lda
,
lapack_int
*
ipiv
);
Include Files
- mkl.h
Description
The routine computes the factorization of a complex Hermitian matrix
A
using the Bunch-Kaufman diagonal pivoting method:- if,uplo='U'A=U*D*UH
- if,uplo='L'A=L*D*LH,
where
A
is the input matrix, U
and L
are products of permutation and triangular matrices with unit diagonal (upper triangular for U
and lower triangular for L
), and D
is a Hermitian block-diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks. U
and L
have 2-by-2 unit diagonal blocks corresponding to the 2-by-2 blocks of D
. This routine supports the Progress Routine feature.
See Progress Routine for details.
Input Parameters
- matrix_layout
- Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
- uplo
- Must be'U'or'L'.Indicates whether the upper or lower triangular part ofAis stored and howAis factored:If, the arrayuplo='U'astores the upper triangular part of the matrixA, andAis factored as.U*D*UHIf, the arrayuplo='L'astores the lower triangular part of the matrixA, andAis factored as.L*D*LH
- n
- The order of matrixA;n≥0.
- a
- Array, sizemax(1,.lda*n)The arrayacontains the upper or the lower triangular part of the matrixA(seeuplo).
- lda
- The leading dimension ofa; at leastmax(1,.n)
Output Parameters
- a
- The upper or lower triangular part ofais overwritten by details of the block-diagonal matrixDand the multipliers used to obtain the factorU(orL).
- ipiv
- Array, size at leastmax(1,. Contains details of the interchanges and the block structure ofn)D. If, thenipiv[i-1] =k>0is a 1-by-1 block, and thediii-th row and column ofAwas interchanged with thek-th row and column.Ifuplo='U'andipiv[i] =ipiv[i-1] = -m< 0, thenDhas a 2-by-2 block in rows/columnsiand, andi+1i-th row and column ofAwas interchanged with them-th row and column.Ifuplo='L'andipiv[i] =ipiv[i-1] = -m< 0, thenDhas a 2-by-2 block in rows/columnsiandi+1, and (i+1)-th row and column ofAwas interchanged with them-th row and column.
Return Values
This function returns a value
info
.If , the execution is successful.
info
= 0If , parameter
info
= -i
i
had an illegal value. If , is 0. The factorization has been completed, but
info
= i
d
i
i
D
is exactly singular. Division by 0 will occur if you use D
for solving a system of linear equations.Application Notes
This routine is suitable for Hermitian matrices that are not known to be positive-definite. If
A
is in fact positive-definite, the routine does not perform interchanges, and no 2-by-2 diagonal blocks occur in D
.The 2-by-2 unit diagonal blocks and the unit diagonal elements of
U
and L
are not stored. The remaining elements of U
and L
are stored in the corresponding columns of the array a
, but additional row interchanges are required to recover U
or L
explicitly (which is seldom necessary).If = , then all off-diagonal elements of
ipiv
[i
-1]i
for all i
=1...n
U
(L
) are stored explicitly in the corresponding elements of the array a
.If , the computed factors , where
uplo
= 'U'
U
and D
are the exact factors of a perturbed matrix A
+ E
|E| ≤ c(n)ε P|U||D||UT|PT
c
(n
)n
, and ε
is
the machine precision. A similar estimate holds for the computed .
L
and D
when uplo
= 'L'
The total number of floating-point operations is approximately
(4/3)
.n
3
After calling this routine, you can call the following routines: