Computes the Cholesky factorization with complete pivoting of a real symmetric (complex Hermitian) positive semidefinite matrix.
FORTRAN 77:
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 )
C:
lapack_int LAPACKE_spstrf( int matrix_order, char uplo, lapack_int n, float* a, lapack_int lda, lapack_int* piv, lapack_int* rank, float tol );
lapack_int LAPACKE_dpstrf( int matrix_order, char uplo, lapack_int n, double* a, lapack_int lda, lapack_int* piv, lapack_int* rank, double tol );
lapack_int LAPACKE_cpstrf( int matrix_order, char uplo, lapack_int n, lapack_complex_float* a, lapack_int lda, lapack_int* piv, lapack_int* rank, float tol );
lapack_int LAPACKE_zpstrf( int matrix_order, char uplo, lapack_int n, lapack_complex_double* a, lapack_int lda, lapack_int* piv, lapack_int* rank, double tol );
The FORTRAN 77 interfaces are specified in the mkl_lapack.fi and mkl_lapack.h include files, the Fortran 95 interfaces are specified in the lapack.f90 include file, and the C interfaces are specified in the mkl_lapacke.h include file.
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' * A * P = U' * U, if uplo ='U' for real flavors,
conjg(P') * A * P = conjg(U') * U, if uplo ='U' for complex flavors,
P' * A * P = L * L', if uplo ='L' for real flavors,
conjg(P') * A * P = L * conjg(L'), if uplo ='L' for complex flavors,
where P is stored as vector piv, '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.
The data types are given for the Fortran interface. 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 defintions.
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.
INTEGER. The order of matrix A; n ≥ 0.
REAL for spstrf
DOUBLE PRECISION for dpstrf
COMPLEX for cpstrf
DOUBLE COMPLEX for zpstrf.
Array a, DIMENSION (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(*) is a workspace array. The dimension of work is at least max(1,2*n).
REAL for single precision flavors
DOUBLE PRECISION for double precision flavors.
User difined tolerance. If tol < 0, then n*U*max(a(k,k)) will be used. The algorithm terminates at the (k-1)-th step, if the pivot ≤ tol.
INTEGER. The first dimension of a; at least max(1, n).
If info = 0, the factor U or L from the Cholesky factorization is as described in Description.
INTEGER.
Array, DIMENSION at least max(1, n). The array piv is such that the nonzero entries are p( piv(k),k ) = 1.
INTEGER.
The rank of a given by the number of steps the algorithm completed.
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 indefinite.
Copyright © 1994 - 2010, Intel Corporation. All rights reserved.