sysv#
Functions
-
void ssysv(const char *uplo, const INT n, const INT nrhs, f32 *restrict A, const INT lda, INT *restrict ipiv, f32 *restrict B, const INT ldb, f32 *restrict work, const INT lwork, INT *info)#
SSYSV computes the solution to a real system of linear equations A * X = B, where A is an N-by-N symmetric matrix and X and B are N-by-NRHS matrices.
The diagonal pivoting method is used to factor A as A = U * D * U**T, if UPLO = ‘U’, or A = L * D * L**T, if UPLO = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. The factored form of A is then used to solve the system of equations A * X = B.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the order of the matrix A.
n>=0.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=0.inoutAArray of dimension
(lda,n). On entry, the symmetric matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, ifinfo=0, the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed byssytrf.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. Pivot indices (0-based). Ifipiv[k]>=0: rows/columnskandipiv[k]were interchanged,D(k,k)is a 1-by-1 block. Ifipiv[k]<0(upper): rows/columnsk-1and-ipiv[k]-1were interchanged,D(k-1:k,k-1:k)is a 2-by-2 block, andipiv[k-1]=ipiv[k]. Ifipiv[k]<0(lower): rows/columnsk+1and-ipiv[k]-1were interchanged,D(k:k+1,k:k+1)is a 2-by-2 block, andipiv[k+1]=ipiv[k].inoutBArray of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1, and for best performancelwork>=n*nb, wherenbis the optimal block size forssytrf. Forlwork<n, TRS will be done with Level BLAS 2; forlwork>=n, TRS will be done with Level BLAS 3. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related tolworkis issued.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, so the solution could not be computed.
void ssysv(
const char* uplo,
const INT n,
const INT nrhs,
f32* restrict A,
const INT lda,
INT* restrict ipiv,
f32* restrict B,
const INT ldb,
f32* restrict work,
const INT lwork,
INT* info
);
Functions
-
void dsysv(const char *uplo, const INT n, const INT nrhs, f64 *restrict A, const INT lda, INT *restrict ipiv, f64 *restrict B, const INT ldb, f64 *restrict work, const INT lwork, INT *info)#
DSYSV computes the solution to a real system of linear equations A * X = B, where A is an N-by-N symmetric matrix and X and B are N-by-NRHS matrices.
The diagonal pivoting method is used to factor A as A = U * D * U**T, if UPLO = ‘U’, or A = L * D * L**T, if UPLO = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. The factored form of A is then used to solve the system of equations A * X = B.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the order of the matrix A.
n>=0.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=0.inoutAArray of dimension
(lda,n). On entry, the symmetric matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, ifinfo=0, the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed bydsytrf.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. Pivot indices (0-based). Ifipiv[k]>=0: rows/columnskandipiv[k]were interchanged,D(k,k)is a 1-by-1 block. Ifipiv[k]<0(upper): rows/columnsk-1and-ipiv[k]-1were interchanged,D(k-1:k,k-1:k)is a 2-by-2 block, andipiv[k-1]=ipiv[k]. Ifipiv[k]<0(lower): rows/columnsk+1and-ipiv[k]-1were interchanged,D(k:k+1,k:k+1)is a 2-by-2 block, andipiv[k+1]=ipiv[k].inoutBArray of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1, and for best performancelwork>=n*nb, wherenbis the optimal block size fordsytrf. Forlwork<n, TRS will be done with Level BLAS 2; forlwork>=n, TRS will be done with Level BLAS 3. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related tolworkis issued.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, so the solution could not be computed.
void dsysv(
const char* uplo,
const INT n,
const INT nrhs,
f64* restrict A,
const INT lda,
INT* restrict ipiv,
f64* restrict B,
const INT ldb,
f64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void csysv(const char *uplo, const INT n, const INT nrhs, c64 *restrict A, const INT lda, INT *restrict ipiv, c64 *restrict B, const INT ldb, c64 *restrict work, const INT lwork, INT *info)#
CSYSV computes the solution to a complex system of linear equations A * X = B, where A is an N-by-N symmetric matrix and X and B are N-by-NRHS matrices.
The diagonal pivoting method is used to factor A as A = U * D * U**T, if UPLO = ‘U’, or A = L * D * L**T, if UPLO = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. The factored form of A is then used to solve the system of equations A * X = B.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the order of the matrix A.
n>=0.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=0.inoutAComplex array of dimension
(lda,n). On entry, the symmetric matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, ifinfo=0, the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed bycsytrf.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. Pivot indices (0-based). Ifipiv[k]>=0: rows/columnskandipiv[k]were interchanged,D(k,k)is a 1-by-1 block. Ifipiv[k]<0(upper): rows/columnsk-1and-ipiv[k]-1were interchanged,D(k-1:k,k-1:k)is a 2-by-2 block, andipiv[k-1]=ipiv[k]. Ifipiv[k]<0(lower): rows/columnsk+1and-ipiv[k]-1were interchanged,D(k:k+1,k:k+1)is a 2-by-2 block, andipiv[k+1]=ipiv[k].inoutBComplex array of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkComplex array of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1, and for best performancelwork>=n*nb, wherenbis the optimal block size forcsytrf. Forlwork<n, TRS will be done with Level BLAS 2; forlwork>=n, TRS will be done with Level BLAS 3. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related to lwork is issued by XERBLA.outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
> 0: if info = i, D(i,i) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, so the solution could not be computed.
void csysv(
const char* uplo,
const INT n,
const INT nrhs,
c64* restrict A,
const INT lda,
INT* restrict ipiv,
c64* restrict B,
const INT ldb,
c64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void zsysv(const char *uplo, const INT n, const INT nrhs, c128 *restrict A, const INT lda, INT *restrict ipiv, c128 *restrict B, const INT ldb, c128 *restrict work, const INT lwork, INT *info)#
ZSYSV computes the solution to a complex system of linear equations A * X = B, where A is an N-by-N symmetric matrix and X and B are N-by-NRHS matrices.
The diagonal pivoting method is used to factor A as A = U * D * U**T, if UPLO = ‘U’, or A = L * D * L**T, if UPLO = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. The factored form of A is then used to solve the system of equations A * X = B.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the order of the matrix A.
n>=0.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=0.inoutAComplex array of dimension
(lda,n). On entry, the symmetric matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, ifinfo=0, the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**T or A = L*D*L**T as computed byzsytrf.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. Pivot indices (0-based). Ifipiv[k]>=0: rows/columnskandipiv[k]were interchanged,D(k,k)is a 1-by-1 block. Ifipiv[k]<0(upper): rows/columnsk-1and-ipiv[k]-1were interchanged,D(k-1:k,k-1:k)is a 2-by-2 block, andipiv[k-1]=ipiv[k]. Ifipiv[k]<0(lower): rows/columnsk+1and-ipiv[k]-1were interchanged,D(k:k+1,k:k+1)is a 2-by-2 block, andipiv[k+1]=ipiv[k].inoutBComplex array of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkComplex array of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1, and for best performancelwork>=n*nb, wherenbis the optimal block size forzsytrf. Forlwork<n, TRS will be done with Level BLAS 2; forlwork>=n, TRS will be done with Level BLAS 3. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related to lwork is issued by XERBLA.outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
> 0: if info = i, D(i,i) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, so the solution could not be computed.
void zsysv(
const char* uplo,
const INT n,
const INT nrhs,
c128* restrict A,
const INT lda,
INT* restrict ipiv,
c128* restrict B,
const INT ldb,
c128* restrict work,
const INT lwork,
INT* info
);