Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?pstrf
Computes the Cholesky factorization with complete pivoting of a real symmetric (complex Hermitian) positive semidefinite matrix.
Syntax
call spstrf(uplo, n, a, lda, piv, rank, tol, work, info)
call dpstrf(uplo, n, a, lda, piv, rank, tol, work, info)
call cpstrf(uplo, n, a, lda, piv, rank, tol, work, info)
call zpstrf(uplo, n, a, lda, piv, rank, tol, work, info)
Include Files
mkl.fi , mkl_lapack.f90
Description
The routine computes the Cholesky factorization with complete pivoting of a real symmetric (complex Hermitian) positive semidefinite matrix. The form of the factorization is:
\(P^{T} * A * P = U^{T} * U\) , if uplo = ‘U’ for real flavors,
\(P^{T} * A * P = U^{H} * U\) , if uplo = ‘U’ for complex flavors,
\(P^{T} * A * P = L * L^{T}\) , if uplo = ‘L’ for real flavors,
\(P^{T} * A * P = L * L^{H}\) , if uplo = ‘L’ for complex flavors,
where \(P\) is a permutation matrix stored as vector piv , and \(U\) and \(L\) are upper and lower triangular matrices, respectively.
This algorithm does not attempt to check that \(A\) is positive semidefinite. This version of the algorithm calls level 3 BLAS.
Input Parameters
uplo
CHARACTER*1 . Must be ‘U’ or ‘L’ .
Indicates whether the upper or lower triangular part of A is stored:
If uplo = 'U' , the array a stores the upper triangular part of the matrix A , and the strictly lower triangular part of the matrix is not referenced.
If uplo = 'L' , the array a stores the lower triangular part of the matrix A , and the strictly upper triangular part of the matrix is not referenced.
- n
-
INTEGER. Specifies the order of the matrix A. The value of n must be at least zero.
a
REAL for spstrf
DOUBLE PRECISION for dpstrf
COMPLEX for cpstrf
DOUBLE COMPLEX for zpstrf .
Array a , size (lda,*) . The array a contains either the upper or the lower triangular part of the matrix A (see uplo ). The second dimension of a must be at least max(1, n) .
work
REAL for spstrf and cpstrf
DOUBLE PRECISION for dpstrf and zpstrf .
work(*) is a workspace array. The dimension of work is at least max(1,2*n) .
tol
REAL for single precision flavors
DOUBLE PRECISION for double precision flavors.
User defined tolerance. If tol < 0, then \(n * \varepsilon * max(A_{kk})\), where \(\varepsilon\) is the machine precision, will be used (see Error Analysis for the definition of machine precision). The algorithm terminates at the (k-1) -st step, if the pivot ≤ tol .
lda
INTEGER . The leading dimension of a ; at least max(1, n) .
Output Parameters
a
If info = 0 , the factor U or L from the Cholesky factorization is as described in Description .
piv
INTEGER .
Array, size at least max(1, n) . The array piv is such that the nonzero entries are \(P_{piv(k),k}\) (1 ≤ k ≤ n ).
rank
INTEGER .
The rank of a given by the number of steps the algorithm completed.
info
INTEGER .
If info = 0 , the execution is successful.
If info = -k , the k- th argument had an illegal value.
If info > 0 , the matrix A is either rank deficient with a computed rank as returned in rank , or is not positive semidefinite.
Return Values
No return value, info is an Output Parameter.