?sptrf
?sptrf
Computes the Bunch-Kaufman factorization of a symmetric matrix using packed storage.
Syntax
lapack_int
LAPACKE_ssptrf
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
float
*
ap
,
lapack_int
*
ipiv
);
lapack_int
LAPACKE_dsptrf
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
double
*
ap
,
lapack_int
*
ipiv
);
lapack_int
LAPACKE_csptrf
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
lapack_complex_float
*
ap
,
lapack_int
*
ipiv
);
lapack_int
LAPACKE_zsptrf
(
int
matrix_layout
,
char
uplo
,
lapack_int
n
,
lapack_complex_double
*
ap
,
lapack_int
*
ipiv
);
Include Files
- mkl.h
Description
The routine computes the
factorization of a real/complex
symmetric matrix
A
stored in the packed format using
the Bunch-Kaufman diagonal pivoting method. The form of the
factorization is:- if,uplo='U'A=U*D*UT
- if,uplo='L'A=L*D*LT,
where
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 symmetric 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 Function 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 packed in the arrayapand howAis factored:If, the arrayuplo='U'apstores the upper triangular part of the matrixA, andAis factored as.U*D*UTIf, the arrayuplo='L'apstores the lower triangular part of the matrixA, andAis factored as.L*D*LT
- n
- The order of matrixA;n≥0.
- ap
- Array, size at least max(1,n(n+1)/2). The arrayapcontains the upper or the lower triangular part of the matrixA(as specified byuplo) in packed storage(see Matrix Storage Schemes).
Output Parameters
- ap
- The upper or lower triangle ofA(as specified byuplo) is 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
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
overwrite elements of the corresponding columns of the array ap
, 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
) = i
for all i
= 1...n
U
(L
) are stored explicitly in packed form.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
(1/3)
for real flavors or n
3
(4/3)
for complex flavors.n
3
After calling this routine, you can call the following routines: