package slap
- BLAS interface
- LAPACK interface
- BLAS interface
-
LAPACK interface
- Auxiliary routines
- Linear equations (computational routines)
- Least squares (expert drivers)
- General SVD routines
- General eigenvalue problem (simple drivers)
- Symmetric-matrix eigenvalue and singular value problems (simple drivers)
- Symmetric-matrix eigenvalue and singular value problems (expert & RRR drivers)
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=9a859ca657964c0adeeb29f3ba56291bbc6305f1c88ad71a1f532b1e7acdff55
md5=e06c98c671bee929dcda3231516d8d87
doc/slap/Slap_D/index.html
Module Slap_D
type prec = Bigarray.float64_elttype (+'indim, +'outdim, +'tag) trans3 =
('indim, 'outdim, 'tag) Slap_common.trans2A type of transpose parameters (Slap_common.normal and Slap_common.trans). For complex matrices, Slap_common.conjtr is also offered, hence the name.
type (+'n, +'cnt_or_dsc) vec = ('n, num_type, prec, 'cnt_or_dsc) Slap_vec.tVectors.
type (+'m, +'n, +'cnt_or_dsc) mat =
('m, 'n, num_type, prec, 'cnt_or_dsc) Slap_mat.tMatrices.
type rprec = Bigarray.float64_elttype (+'n, +'cnt_or_dsc) rvec = ('n, float, rprec, 'cnt_or_dsc) Slap_vec.tval prec : (num_type, prec) Bigarray.kindval rprec : (float, rprec) Bigarray.kindmodule Vec : sig ... endmodule Mat : sig ... endval pp_num : Format.formatter -> num_type -> unitA pretty-printer for elements in vectors and matrices.
val pp_vec : Format.formatter -> ('n, 'cnt_or_dsc) vec -> unitA pretty-printer for column vectors.
val pp_mat : Format.formatter -> ('m, 'n, 'cnt_or_dsc) mat -> unitA pretty-printer for matrices.
BLAS interface
Level 1
scal c x multiplies all elements in x by scalar value c, and destructively assigns the result to x.
val nrm2 : ('n, 'cd) vec -> floatnrm2 x retruns the L2 norm of vector x: ||x||.
axpy ?alpha x y executes y := alpha * x + y with scalar value alpha, and vectors x and y.
val iamax : ('n, 'cd) vec -> intiamax x returns the index of the maximum value of all elements in x.
Level 2
val gemv :
?beta:num_type ->
?y:('m, 'y_cd) vec ->
trans:('a_m * 'a_n, 'm * 'n, _) trans3 ->
?alpha:num_type ->
('a_m, 'a_n, 'a_cd) mat ->
('n, 'x_cd) vec ->
('m, 'y_cd) vecgemv ?beta ?y ~trans ?alpha a x executes y := alpha * OP(a) * x + beta * y.
val gbmv :
m:'a_m Slap_size.t ->
?beta:num_type ->
?y:('m, 'y_cd) vec ->
trans:('a_m * 'a_n, 'm * 'n, _) trans3 ->
?alpha:num_type ->
(('a_m, 'a_n, 'kl, 'ku) Slap_size.geband, 'a_n, 'a_cd) mat ->
'kl Slap_size.t ->
'ku Slap_size.t ->
('n, 'x_cd) vec ->
('m, 'y_cd) vecgbmv ~m ?beta ?y ~trans ?alpha a kl ku x computes y := alpha * OP(a) * x + beta * y where a is a band matrix stored in band storage.
val symv :
?beta:num_type ->
?y:('n, 'y_cd) vec ->
?up:[< `L | `U ] Slap_common.uplo ->
?alpha:num_type ->
('n, 'n, 'a_cd) mat ->
('n, 'x_cd) vec ->
('n, 'y_cd) vecsymv ?beta ?y ?up ?alpha a x executes y := alpha * a * x + beta * y.
val trmv :
trans:('n * 'n, 'n * 'n, _) trans3 ->
?diag:Slap_common.diag ->
?up:[< `L | `U ] Slap_common.uplo ->
('n, 'n, 'a_cd) mat ->
('n, 'x_cd) vec ->
unittrmv ~trans ?diag ?up a x executes x := OP(a) * x.
val trsv :
trans:('n * 'n, 'n * 'n, _) trans3 ->
?diag:Slap_common.diag ->
?up:[< `L | `U ] Slap_common.uplo ->
('n, 'n, 'a_cd) mat ->
('n, 'b_cd) vec ->
unittrmv ~trans ?diag ?up a b solves linear system OP(a) * x = b and destructively assigns x to b.
val tpmv :
trans:('n * 'n, 'n * 'n, _) trans3 ->
?diag:Slap_common.diag ->
?up:[< `L | `U ] Slap_common.uplo ->
('n Slap_size.packed, Slap_misc.cnt) vec ->
('n, 'x_cd) vec ->
unittpmv ~trans ?diag ?up a x executes x := OP(a) * x where a is a packed triangular matrix.
val tpsv :
trans:('n * 'n, 'n * 'n, _) trans3 ->
?diag:Slap_common.diag ->
?up:[< `L | `U ] Slap_common.uplo ->
('n Slap_size.packed, Slap_misc.cnt) vec ->
('n, 'x_cd) vec ->
unittpsv ~trans ?diag ?up a b solves linear system OP(a) * x = b and destructively assigns x to b where a is a packed triangular matrix.
Level 3
val gemm :
?beta:num_type ->
?c:('m, 'n, 'c_cd) mat ->
transa:('a_m * 'a_k, 'm * 'k, _) trans3 ->
?alpha:num_type ->
('a_m, 'a_k, 'a_cd) mat ->
transb:('b_k * 'b_n, 'k * 'n, _) trans3 ->
('b_k, 'b_n, 'b_cd) mat ->
('m, 'n, 'c_cd) matgemm ?beta ?c ~transa ?alpha a ~transb b executes c := alpha * OP(a) * OP(b) + beta * c.
val symm :
side:('k, 'm, 'n) Slap_common.side ->
?up:[< `U | `L ] Slap_common.uplo ->
?beta:num_type ->
?c:('m, 'n, 'c_cd) mat ->
?alpha:num_type ->
('k, 'k, 'a_cd) mat ->
('m, 'n, 'b_cd) mat ->
('m, 'n, 'c_cd) matsymm ~side ?up ?beta ?c ?alpha a b executes
c := alpha * a * b + beta * c(ifside=Slap_common.left) orc := alpha * b * a + beta * c(ifside=Slap_common.right)
where a is a symmterix matrix, and b and c are general matrices.
val trmm :
side:('k, 'm, 'n) Slap_common.side ->
?up:[< `U | `L ] Slap_common.uplo ->
transa:('k * 'k, 'k * 'k, _) trans3 ->
?diag:Slap_common.diag ->
?alpha:num_type ->
a:('k, 'k, 'a_cd) mat ->
('m, 'n, 'b_cd) mat ->
unittrmm ~side ?up ~transa ?diag ?alpha ~a b executes
b := alpha * OP(a) * b(ifside=Slap_common.left) orb := alpha * b * OP(a)(ifside=Slap_common.right)
where a is a triangular matrix, and b is a general matrix.
val trsm :
side:('k, 'm, 'n) Slap_common.side ->
?up:[< `U | `L ] Slap_common.uplo ->
transa:('k * 'k, 'k * 'k, _) trans3 ->
?diag:Slap_common.diag ->
?alpha:num_type ->
a:('k, 'k, 'a_cd) mat ->
('m, 'n, 'b_cd) mat ->
unittrsm ~side ?up ~transa ?diag ?alpha ~a b solves a system of linear equations
OP(a) * x = alpha * b(ifside=Slap_common.left) orx * OP(a) = alpha * b(ifside=Slap_common.right)
where a is a triangular matrix, and b is a general matrix. The solution x is returned by b.
val syrk :
?up:[< `U | `L ] Slap_common.uplo ->
?beta:num_type ->
?c:('n, 'n, 'c_cd) mat ->
trans:('a_n * 'a_k, 'n * 'k, _) Slap_common.trans2 ->
?alpha:num_type ->
('a_n, 'a_k, 'a_cd) mat ->
('n, 'n, 'c_cd) matsyrk ?up ?beta ?c ~trans ?alpha a executes
c := alpha * a * a^T + beta * c(iftrans=Slap_common.normal) orc := alpha * a^T * a + beta * c(iftrans=Slap_common.trans)
where a is a general matrix and c is a symmetric matrix.
val syr2k :
?up:[< `U | `L ] Slap_common.uplo ->
?beta:num_type ->
?c:('n, 'n, 'c_cd) mat ->
trans:('p * 'q, 'n * 'k, _) Slap_common.trans2 ->
?alpha:num_type ->
('p, 'q, 'a_cd) mat ->
('p, 'q, 'b_cd) mat ->
('n, 'n, 'c_cd) matsyr2k ?up ?beta ?c ~trans ?alpha a b computes
c := alpha * a * b^T + alpha * b * a^T + beta * c(iftrans=Slap_common.normal) orc := alpha * a^T * b + alpha * b^T * a + beta * c(iftrans=Slap_common.trans)
with symmetric matrix c, and general matrices a and b.
LAPACK interface
Auxiliary routines
val lacpy :
?uplo:[< `A | `L | `U ] Slap_common.uplo ->
?b:('m, 'n, 'b_cd) mat ->
('m, 'n, 'a_cd) mat ->
('m, 'n, 'b_cd) matlacpy ?uplo ?b a copies the matrix a into the matrix b.
val lassq : ?scale:float -> ?sumsq:float -> ('n, 'cd) vec -> float * floatlassq ?scale ?sumsq x
type larnv_liseed = Slap_size.fourval larnv :
?idist:[ `Normal | `Uniform0 | `Uniform1 ] ->
?iseed:(larnv_liseed, Slap_misc.cnt) Slap_common.int32_vec ->
x:('n, Slap_misc.cnt) vec ->
unit ->
('n, 'cnt) veclarnv ?idist ?iseed ~x () generates a random vector with the random distribution specified by idist and random seed iseed.
val lange_min_lwork :
'm Slap_size.t ->
'a Slap_common.norm4 ->
('m, 'a) lange_min_lwork Slap_size.tlange_min_lwork m norm computes the minimum length of workspace for lange routine. m is the number of rows in a matrix, and norm is the sort of matrix norms.
val lange :
?norm:'a Slap_common.norm4 ->
?work:('lwork, Slap_misc.cnt) rvec ->
('m, 'n, 'cd) mat ->
floatlange ?norm ?work a
val lauum : ?up:[< `U | `L ] Slap_common.uplo -> ('n, 'n, 'cd) mat -> unitlauum ?up a computes
U * U^TwhereUis the upper triangular part of matrixaifupisSlap_common.upper.L^T * LwhereLis the lower triangular part of matrixaifupisSlap_common.lower.
The upper or lower triangular part is overwritten.
Linear equations (computational routines)
val getrf :
?ipiv:(('m, 'n) Slap_size.min, Slap_misc.cnt) Slap_common.int32_vec ->
('m, 'n, 'cd) mat ->
(('m, 'n) Slap_size.min, 'cnt) Slap_common.int32_vecgetrf ?ipiv a computes LU factorization of matrix a using partial pivoting with row interchanges: a = P * L * U where P is a permutation matrix, and L and U are lower and upper triangular matrices, respectively. the permutation matrix is returned in ipiv.
val getrs :
?ipiv:(('n, 'n) Slap_size.min, Slap_misc.cnt) Slap_common.int32_vec ->
trans:('n * 'n, 'n * 'n, _) trans3 ->
('n, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unitgetrs ?ipiv trans a b solves systems of linear equations OP(a) * x = b where a a 'n-by-'n general matrix, each column of matrix b is the r.h.s. vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
val getri_min_lwork : 'n Slap_size.t -> 'n getri_min_lwork Slap_size.tgetri_min_lwork n computes the minimum length of workspace for getri routine. n is the number of columns or rows in a matrix.
val getri_opt_lwork : ('n, 'n, 'cd) mat -> (module Slap_size.SIZE)getri_opt_lwork a computes the optimal length of workspace for getri routine.
val getri :
?ipiv:(('n, 'n) Slap_size.min, Slap_misc.cnt) Slap_common.int32_vec ->
?work:('lwork, Slap_misc.cnt) vec ->
('n, 'n, 'cd) mat ->
unitgetri ?ipiv ?work a computes the inverse of general matrix a by LU-factorization. The inverse matrix is returned in a.
val sytrf_min_lwork : unit -> sytrf_min_lwork Slap_size.tsytrf_min_lwork () computes the minimum length of workspace for sytrf routine.
val sytrf_opt_lwork :
?up:[< `U | `L ] Slap_common.uplo ->
('n, 'n, 'cd) mat ->
(module Slap_size.SIZE)sytrf_opt_lwork ?up a computes the optimal length of workspace for sytrf routine.
val sytrf :
?up:[< `U | `L ] Slap_common.uplo ->
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
?work:('lwork, Slap_misc.cnt) vec ->
('n, 'n, 'cd) mat ->
('n, 'cnt) Slap_common.int32_vecsytrf ?up ?ipiv ?work a factorizes symmetric matrix a using the Bunch-Kaufman diagonal pivoting method:
a = P * U * D * U^T * P^Tifup=true;a = P * L * D * L^T * P^Tifup=false
where P is a permutation matrix, U and L are upper and lower triangular matrices with unit diagonal, and D is a symmetric block-diagonal matrix. The permutation matrix is returned in ipiv.
val sytrs :
?up:[< `U | `L ] Slap_common.uplo ->
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
('n, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unitsytrs ?up ?ipiv a b solves systems of linear equations a * x = b where a is a symmetric matrix, each column of matrix b is the r.h.s. vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
This routine uses the Bunch-Kaufman diagonal pivoting method:
a = P * U * D * U^T * P^Tifup=true;a = P * L * D * L^T * P^Tifup=false
where P is a permutation matrix, U and L are upper and lower triangular matrices with unit diagonal, and D is a symmetric block-diagonal matrix.
val sytri_min_lwork : 'n Slap_size.t -> 'n sytri_min_lwork Slap_size.tsytri_min_lwork () computes the minimum length of workspace for sytri routine.
val sytri :
?up:[< `U | `L ] Slap_common.uplo ->
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
?work:('lwork, Slap_misc.cnt) vec ->
('n, 'n, 'cd) mat ->
unitsytri ?up ?ipiv ?work a computes the inverse of symmetric matrix a using the Bunch-Kaufman diagonal pivoting method:
a = P * U * D * U^T * P^Tifup=true;a = P * L * D * L^T * P^Tifup=false
where P is a permutation matrix, U and L are upper and lower triangular matrices with unit diagonal, and D is a symmetric block-diagonal matrix.
val potrf :
?up:[< `U | `L ] Slap_common.uplo ->
?jitter:num_type ->
('n, 'n, 'cd) mat ->
unitpotrf ?up ?jitter a computes the Cholesky factorization of symmetrix (Hermitian) positive-definite matrix a:
a = U^T * U(real) ora = U^H * U(complex) ifup=true;a = L * L^T(real) ora = L * L^H(complex) ifup=false
where U and L are upper and lower triangular matrices, respectively. Either of them is returned in the upper or lower triangular part of a, as specified by up.
val potrs :
?up:[< `U | `L ] Slap_common.uplo ->
('n, 'n, 'a_cd) mat ->
?factorize:bool ->
?jitter:num_type ->
('n, 'nrhs, 'b_cd) mat ->
unitpotrf ?up a ?jitter b solves systems of linear equations a * x = b using the Cholesky factorization of symmetrix (Hermitian) positive-definite matrix a:
a = U^T * U(real) ora = U^H * U(complex) ifup=Slap_common.upper;a = L * L^T(real) ora = L * L^H(complex) ifup=Slap_common.lower
where U and L are upper and lower triangular matrices, respectively.
val potri :
?up:[< `U | `L ] Slap_common.uplo ->
?factorize:bool ->
?jitter:num_type ->
('n, 'n, 'cd) mat ->
unitpotrf ?up ?jitter a computes the inverse of symmetrix (Hermitian) positive-definite matrix a using the Cholesky factorization:
a = U^T * U(real) ora = U^H * U(complex) ifup=Slap_common.upper;a = L * L^T(real) ora = L * L^H(complex) ifup=Slap_common.lower
where U and L are upper and lower triangular matrices, respectively.
val trtrs :
?up:[< `U | `L ] Slap_common.uplo ->
trans:('n * 'n, 'n * 'n, _) trans3 ->
?diag:Slap_common.diag ->
('n, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unittrtrs ?up trans ?diag a b solves systems of linear equations OP(a) * x = b where a is a triangular matrix of order 'n, each column of matrix b is the r.h.s vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
val tbtrs :
kd:'kd Slap_size.t ->
?up:[< `U | `L ] Slap_common.uplo ->
trans:('n * 'n, 'n * 'n, _) trans3 ->
?diag:Slap_common.diag ->
(('n, 'kd) Slap_size.syband, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unittbtrs ~kd ?up ~trans ?diag ab b solves systems of linear equations OP(A) * x = b where A is a triangular band matrix with kd subdiagonals, each column of matrix b is the r.h.s vector, and each column of matrix x is the corresponding solution. Matrix A is stored into ab in band storage format. The solution x is returned in b.
val trtri :
?up:[< `U | `L ] Slap_common.uplo ->
?diag:Slap_common.diag ->
('n, 'n, 'cd) mat ->
unittrtri ?up ?diag a computes the inverse of triangular matrix a. The inverse matrix is returned in a.
val geqrf_min_lwork : n:'n Slap_size.t -> 'n geqrf_min_lwork Slap_size.tgeqrf_min_lwork ~n computes the minimum length of workspace for geqrf routine. n is the number of columns in a matrix.
val geqrf_opt_lwork : ('m, 'n, 'cd) mat -> (module Slap_size.SIZE)geqrf_opt_lwork a computes the optimum length of workspace for geqrf routine.
val geqrf :
?work:('lwork, Slap_misc.cnt) vec ->
?tau:(('m, 'n) Slap_size.min, Slap_misc.cnt) vec ->
('m, 'n, 'cd) mat ->
(('m, 'n) Slap_size.min, 'cnt) vecgeqrf ?work ?tau a computes the QR factorization of general matrix a: a = Q * R where Q is an orthogonal (unitary) matrix and R is an upper triangular matrix. R is returned in a. This routine does not generate Q explicitly. It is generated by orgqr.
Linear equations (simple drivers)
val gesv :
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
('n, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unitgesv ?ipiv a b solves a system of linear equations a * x = b where a is a 'n-by-'n general matrix, each column of matrix b is the r.h.s. vector, and each column of matrix x is the corresponding solution.
This routine uses LU factorization: a = P * L * U with permutation matrix P, a lower triangular matrix L and an upper triangular matrix U. By this function, the upper triangular part of a is replaced by U, the lower triangular part by L, and the solution x is returned in b.
val gbsv :
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
(('n, 'n, 'kl, 'ku) Slap_size.luband, 'n, 'a_cd) mat ->
'kl Slap_size.t ->
'ku Slap_size.t ->
('n, 'nrhs, 'b_cd) mat ->
unitgbsv ?ipiv ab kl ku b solves a system of linear equations A * X = B where A is a 'n-by-'n band matrix, each column of matrix B is the r.h.s. vector, and each column of matrix X is the corresponding solution. The matrix A with kl subdiagonals and ku superdiagonals is stored into ab in band storage format for LU factorizaion.
This routine uses LU factorization: A = P * L * U with permutation matrix P, a lower triangular matrix L and an upper triangular matrix U. By this function, the upper triangular part of A is replaced by U, the lower triangular part by L, and the solution X is returned in B.
val posv :
?up:[< `U | `L ] Slap_common.uplo ->
('n, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unitposv ?up a b solves systems of linear equations a * x = b where a is a 'n-by-'n symmetric positive-definite matrix, each column of matrix b is the r.h.s vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
The Cholesky decomposition is used:
- If
up=Slap_common.upper, thena = U^T * U(real) ora = U^H * U(complex) - If
up=Slap_common.lower, thena = L^T * L(real) ora = L^H * L(complex)
where U and L are the upper and lower triangular matrices, respectively.
val ppsv :
?up:[< `U | `L ] Slap_common.uplo ->
('n Slap_size.packed, Slap_misc.cnt) vec ->
('n, 'nrhs, 'b_cd) mat ->
unitppsv ?up a b solves systems of linear equations a * x = b where a is a 'n-by-'n symmetric positive-definite matrix stored in packed format, each column of matrix b is the r.h.s vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
- If
up=Slap_common.upper, thena = U^T * U(real) ora = U^H * U(complex) - If
up=Slap_common.lower, thena = L^T * L(real) ora = L^H * L(complex)
where U and L are the upper and lower triangular matrices, respectively.
val pbsv :
?up:[< `U | `L ] Slap_common.uplo ->
kd:'kd Slap_size.t ->
(('n, 'kd) Slap_size.syband, 'n, 'ab_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unitpbsv ?up ~kd ab b solves systems of linear equations ab * x = b where ab is a 'n-by-'n symmetric positive-definite band matrix with kd subdiangonals, stored in band storage format, each column of matrix b is the r.h.s vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
This routine uses the Cholesky decomposition:
- If
up=Slap_common.upper, thena = U^T * U(real) ora = U^H * U(complex) - If
up=Slap_common.lower, thena = L^T * L(real) ora = L^H * L(complex)
where U and L are the upper and lower triangular matrices, respectively.
val ptsv :
('n, Slap_misc.cnt) vec ->
('n Slap_size.p, Slap_misc.cnt) vec ->
('n, 'nrhs, 'b_cd) mat ->
unitptsv d e b solves systems of linear equations A * x = b where A is a 'n-by-'n symmetric positive-definite tridiagonal matrix with diagonal elements d and subdiagonal elements e, each column of matrix b is the r.h.s vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
This routine uses the Cholesky decomposition: A = L^T * L (real) or A = L^H * L (complex) where L is a lower triangular matrix.
val sysv_min_lwork : unit -> sysv_min_lwork Slap_size.tsysv_min_lwork () computes the minimum length of workspace for sysv routine.
val sysv_opt_lwork :
?up:[< `U | `L ] Slap_common.uplo ->
('n, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
(module Slap_size.SIZE)sysv_opt_lwork ?up a b computes the optimal length of workspace for sysv routine.
val sysv :
?up:[< `U | `L ] Slap_common.uplo ->
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
?work:('lwork, Slap_misc.cnt) vec ->
('n, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
unitsysv ?up ?ipiv ?work a b solves systems of linear equations a * x = b where a is a 'n-by-'n symmetric matrix, each column of matrix b is the r.h.s. vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
The diagonal pivoting method is used:
- If
up=Slap_common.upper, thena = U * D * U^T - If
up=Slap_common.lower, thena = L * D * L^TwhereUandLare the upper and lower triangular matrices, respectively.
val spsv :
?up:[< `U | `L ] Slap_common.uplo ->
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
('n Slap_size.packed, Slap_misc.cnt) vec ->
('n, 'nrhs, 'b_cd) mat ->
unitspsv ?up a b solves systems of linear equations a * x = b where a is a 'n-by-'n symmetric matrix stored in packed format, each column of matrix b is the r.h.s. vector, and each column of matrix x is the corresponding solution. The solution x is returned in b.
The diagonal pivoting method is used:
- If
up=Slap_common.upper, thena = U * D * U^T - If
up=Slap_common.lower, thena = L * D * L^TwhereUandLare the upper and lower triangular matrices, respectively.
Least squares (simple drivers)
val gels_min_lwork :
m:'m Slap_size.t ->
n:'n Slap_size.t ->
nrhs:'nrhs Slap_size.t ->
('m, 'n, 'nrhs) gels_min_lwork Slap_size.tgels_min_lwork ~n computes the minimum length of workspace for gels routine.
val gels_opt_lwork :
trans:('am * 'an, 'm * 'n, _) Slap_common.trans2 ->
('am, 'an, 'a_cd) mat ->
('m, 'nrhs, 'b_cd) mat ->
(module Slap_size.SIZE)gels_opt_lwork ~trans a b computes the optimum length of workspace for gels routine.
val gels :
?work:('work, Slap_misc.cnt) vec ->
trans:('am * 'an, 'm * 'n, _) Slap_common.trans2 ->
('am, 'an, 'a_cd) mat ->
('m, 'nrhs, 'b_cd) mat ->
unitgels ?work ~trans a b solves an overdetermined or underdetermined system of linear equations using QR or LU factorization.
- If
trans=Slap_common.normaland'm >= 'n: find the least square solution to an overdetermined system by minimizing||b - A * x||^2. - If
trans=Slap_common.normaland'm < 'n: find the minimum norm solution to an underdetermined systema * x = b. - If
trans=Slap_common.trans, and'm >= 'n: find the minimum norm solution to an underdetermined systema^H * x = b. - If
trans=Slap_common.transand'm < 'n: find the least square solution to an overdetermined system by minimizing||b - A^H * x||^2.
BLAS interface
Level 1
val asum : ('n, 'x_cd) vec -> floatasum x
Level 2
val sbmv :
k:'k Slap_size.t ->
?y:('n, 'y_cd) vec ->
(('n, 'k) Slap_size.syband, 'n, 'a_cd) mat ->
?up:[< `U | `L ] Slap_common.uplo ->
?alpha:float ->
?beta:float ->
('n, 'x_cd) vec ->
('n, 'y_cd) vecsbmv ~k ?y a ?up ?alpha ?beta x computes y := alpha * a * x + beta * y where a is a 'n-by-'n symmetric band matrix with k super-(or sub-)diagonals, and x and y are 'n-dimensional vectors.
val ger :
?alpha:float ->
('m, 'x_cd) vec ->
('n, 'y_cd) vec ->
('m, 'n, 'a_cd) mat ->
('m, 'n, 'a_cd) matger ?alpha x y a computes a := alpha * x * y^T + a with the general matrix a, the vector x and the transposed vector y^T of y.
val syr :
?alpha:float ->
?up:[< `U | `L ] Slap_common.uplo ->
('n, 'x_cd) vec ->
('n, 'n, 'a_cd) mat ->
('n, 'n, 'a_cd) matsyr ?alpha x a computes a := alpha * x * x^T + a with the symmetric matrix a, the vector x and the transposed vector x^T of x.
LAPACK interface
Auxiliary routines
lansy
val lansy_min_lwork :
'n Slap_size.t ->
'a Slap_common.norm4 ->
('n, 'a) lansy_min_lwork Slap_size.tlansy_min_lwork n norm computes the minimum length of workspace for lansy routine. n is the number of rows or columns in a matrix. norm is a matrix norm.
val lansy :
?up:[< `U | `L ] Slap_common.uplo ->
?norm:'norm Slap_common.norm4 ->
?work:('lwork, Slap_misc.cnt) vec ->
('n, 'n, 'cd) mat ->
floatlansy ?up ?norm ?work a
lamch
lamch cmach see LAPACK documentation.
Linear equations (computational routines)
orgqr
val orgqr_min_lwork : n:'n Slap_size.t -> 'n orgqr_min_lwork Slap_size.torgqr_min_lwork ~n computes the minimum length of workspace for orgqr routine. n is the number of columns in a matrix.
val orgqr_opt_lwork :
tau:('k, Slap_misc.cnt) vec ->
('m, 'n, 'cd) mat ->
(module Slap_size.SIZE)orgqr_min_lwork ~tau a computes the optimum length of workspace for orgqr routine.
val orgqr_dyn :
?work:('lwork, Slap_misc.cnt) vec ->
tau:('k, Slap_misc.cnt) vec ->
('m, 'n, 'cd) mat ->
unitorgqr_dyn ?work ~tau a generates the orthogonal matrix Q of the QR factorization formed by geqrf/geqpf.
ormqr
val ormqr_min_lwork :
side:('r, 'm, 'n) Slap_common.side ->
m:'m Slap_size.t ->
n:'n Slap_size.t ->
('r, 'm, 'n) ormqr_min_lwork Slap_size.tormqr_min_lwork ~side ~m ~n computes the minimum length of workspace for ormqr routine.
val ormqr_opt_lwork :
side:('r, 'm, 'n) Slap_common.side ->
trans:('r * 'r, 'r * 'r, _) Slap_common.trans2 ->
tau:('k, Slap_misc.cnt) vec ->
('r, 'k, 'a_cd) mat ->
('m, 'n, 'c_cd) mat ->
(module Slap_size.SIZE)ormqr_opt_lwork ~side ~trans ~tau a c computes the optimum length of workspace for ormqr routine.
val ormqr_dyn :
side:('r, 'm, 'n) Slap_common.side ->
trans:('r * 'r, 'r * 'r, _) Slap_common.trans2 ->
?work:('lwork, Slap_misc.cnt) vec ->
tau:('k, Slap_misc.cnt) vec ->
('r, 'k, 'a_cd) mat ->
('m, 'n, 'c_cd) mat ->
unitormqr_dyn ~side ~trans ?work ~tau a c multiplies a matrix c by the orthogonal matrix Q of the QR factorization formed by geqrf/geqpf:
Q * cifside=Slap_common.leftandtrans=Slap_common.normal;Q^T * cifside=Slap_common.leftandtrans=Slap_common.trans;c * Qifside=Slap_common.rightandtrans=Slap_common.normal;c * Q^Tifside=Slap_common.rightandtrans=Slap_common.trans.
gecon
val gecon_min_lwork : 'n Slap_size.t -> 'n gecon_min_lwork Slap_size.tgecon_min_lwork n computes the minimum length of workspace work for gecon routine. n is the number of rows or columns in a matrix.
val gecon_min_liwork : 'n Slap_size.t -> 'n gecon_min_liwork Slap_size.tgecon_min_liwork n computes the minimum length of workspace iwork for gecon routine. n is the number of rows or columns in a matrix.
val gecon :
?norm:_ Slap_common.norm2 ->
?anorm:float ->
?work:('lwork, Slap_misc.cnt) vec ->
?iwork:('liwork, Slap_misc.cnt) Slap_common.int32_vec ->
('n, 'n, 'cd) mat ->
floatgecon ?norm ?anorm ?work ?iwork a estimates the reciprocal of the condition number of general matrix a.
sycon
val sycon_min_lwork : 'n Slap_size.t -> 'n sycon_min_lwork Slap_size.tsycon_min_lwork n computes the minimum length of workspace work for sycon routine. n is the number of rows or columns in a matrix.
val sycon_min_liwork : 'n Slap_size.t -> 'n sycon_min_liwork Slap_size.tsycon_min_liwork n computes the minimum length of workspace iwork for sycon routine. n is the number of rows or columns in a matrix.
val sycon :
?up:[< `U | `L ] Slap_common.uplo ->
?ipiv:('n, Slap_misc.cnt) Slap_common.int32_vec ->
?anorm:float ->
?work:('lwork, Slap_misc.cnt) vec ->
?iwork:('liwork, Slap_misc.cnt) Slap_common.int32_vec ->
('n, 'n, 'cd) mat ->
floatsycon ?up ?ipiv ?anorm ?work ?iwork a estimates the reciprocal of the condition number of symmetric matrix a. Since a is symmetric, the 1-norm is equal to the infinity norm.
pocon
val pocon_min_lwork : 'n Slap_size.t -> 'n pocon_min_lwork Slap_size.tpocon_min_lwork n computes the minimum length of workspace work for pocon routine. n is the number of rows or columns in a matrix.
val pocon_min_liwork : 'n Slap_size.t -> 'n pocon_min_liwork Slap_size.tpocon_min_liwork n computes the minimum length of workspace iwork for pocon routine. n is the number of rows or columns in a matrix.
val pocon :
?up:[< `U | `L ] Slap_common.uplo ->
?anorm:float ->
?work:('lwork, Slap_misc.cnt) vec ->
?iwork:('liwork, Slap_misc.cnt) Slap_common.int32_vec ->
('n, 'n, 'cd) mat ->
floatpocon ?up ?anorm ?work ?iwork a estimates the reciprocal of the condition number of symmetric positive-definite matrix a. Since a is symmetric, the 1-norm is equal to the infinity norm.
Least squares (expert drivers)
gelsy
val gelsy_min_lwork :
m:'m Slap_size.t ->
n:'n Slap_size.t ->
nrhs:'nrhs Slap_size.t ->
('m, 'n, 'nrhs) gelsy_min_lwork Slap_size.tgelsy_min_lwork ~m ~n ~nrhs computes the minimum length of workspace for gelsy routine.
val gelsy_opt_lwork :
('m, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
(module Slap_size.SIZE)gelsy_opt_lwork a b computes the optimum length of workspace for gelsy routine.
val gelsy :
('m, 'n, 'a_cd) mat ->
?rcond:float ->
?jpvt:('n, Slap_misc.cnt) Slap_common.int32_vec ->
?work:('lwork, Slap_misc.cnt) vec ->
('n, 'nrhs, 'b_cd) mat ->
intgelsy a ?rcond ?jpvt ?work b computes the minimum-norm solution to a linear least square problem (minimize ||b - a * x||) using a complete orthogonal factorization of a.
gelsd
val gelsd_min_lwork :
m:'m Slap_size.t ->
n:'n Slap_size.t ->
nrhs:'nrhs Slap_size.t ->
('m, 'n, 'nrhs) gelsd_min_lwork Slap_size.tgelsd_min_lwork ~m ~n ~nrhs computes the minimum length of workspace for gelsd routine.
val gelsd_opt_lwork :
('m, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
(module Slap_size.SIZE)gelsd_opt_lwork a b computes the optimum length of workspace for gelsd routine.
val gelsd_min_iwork :
'm Slap_size.t ->
'n Slap_size.t ->
('m, 'n, 'nrhs) gelsd_min_iwork Slap_size.tgelsd_min_iwork ~m ~n ~nrhs computes the minimum length of workspace iwork for gelsd routine.
val gelsd :
('m, 'n, 'a_cd) mat ->
?rcond:float ->
?s:(('m, 'n) Slap_size.min, Slap_misc.cnt) vec ->
?work:('lwork, Slap_misc.cnt) vec ->
?iwork:('liwork, Slap_misc.cnt) vec ->
('n, 'nrhs, 'b_cd) mat ->
intgelsd a ?rcond ?jpvt ?work b computes the minimum-norm solution to a linear least square problem (minimize ||b - a * x||) using the singular value decomposition (SVD) of a and a divide and conquer method.
gelss
val gelss_min_lwork :
m:'m Slap_size.t ->
n:'n Slap_size.t ->
nrhs:'nrhs Slap_size.t ->
('m, 'n, 'nrhs) gelss_min_lwork Slap_size.tgelss_min_lwork ~m ~n ~nrhs computes the minimum length of workspace for gelss routine.
val gelss_opt_lwork :
('m, 'n, 'a_cd) mat ->
('n, 'nrhs, 'b_cd) mat ->
(module Slap_size.SIZE)gelss_min_lwork a b computes the optimum length of workspace for gelss routine.
val gelss :
('m, 'n, 'a_cd) mat ->
?rcond:float ->
?s:(('m, 'n) Slap_size.min, Slap_misc.cnt) vec ->
?work:('lwork, Slap_misc.cnt) vec ->
('n, 'nrhs, 'b_cd) mat ->
intgelss a ?rcond ?work b computes the minimum-norm solution to a linear least square problem (minimize ||b - a * x||) using the singular value decomposition (SVD) of a.
General SVD routines
gesvd
val gesvd_min_lwork :
m:'m Slap_size.t ->
n:'n Slap_size.t ->
('m, 'n) gesvd_min_lwork Slap_size.tgesvd_min_lwork ~m ~n computes the minimum length of workspace for gesvd routine.
val gesvd_opt_lwork :
jobu:
('u_cols, 'm, ('m, 'n) Slap_size.min, Slap_size.z, Slap_size.z)
Slap_common.svd_job ->
jobvt:
('vt_rows, 'n, ('m, 'n) Slap_size.min, Slap_size.z, Slap_size.z)
Slap_common.svd_job ->
?s:(('m, 'n) Slap_size.min, Slap_misc.cnt) vec ->
?u:('m, 'u_cols, 'u_cd) mat ->
?vt:('vt_rows, 'n, 'vt_cd) mat ->
('m, 'n, 'a_cd) mat ->
(module Slap_size.SIZE)gesvd_opt_lwork ~jobu ~jobvt ?s ?u ?vt computes the optimum length of workspace for gesvd routine.
val gesvd :
jobu:
('u_cols, 'm, ('m, 'n) Slap_size.min, Slap_size.z, Slap_size.z)
Slap_common.svd_job ->
jobvt:
('vt_rows, 'n, ('m, 'n) Slap_size.min, Slap_size.z, Slap_size.z)
Slap_common.svd_job ->
?s:(('m, 'n) Slap_size.min, Slap_misc.cnt) vec ->
?u:('m, 'u_cols, 'u_cd) mat ->
?vt:('vt_rows, 'n, 'vt_cd) mat ->
?work:('lwork, Slap_misc.cnt) vec ->
('m, 'n, 'a_cd) mat ->
(('m, 'n) Slap_size.min, 'cnt) vec
* ('m, 'u_cols, 'cnt) mat
* ('vt_rows, 'n, 'cnt) matgesvd ?jobu ?jobvt ?s ?u ?vt ?work a computes the singular value decomposition (SVD) of 'm-by-'n general rectangular matrix a: a = U * D * V^T where
Dis an'm-by-'nmatrix (the diagonal elements inDare singular values in descreasing order, and other elements are zeros),Uis an'm-by-'morthogonal matrix (the columns inUare left singular vectors), andVis an'n-by-'northogonal matrix (the columns inVare right singular vectors).
(Note: jobu and jobvt cannot both be Slap_common.svd_overwrite.)
gesdd
val gesdd_liwork :
m:'m Slap_size.t ->
n:'n Slap_size.t ->
('m, 'n) gesdd_liwork Slap_size.tgesdd_liwork ~m ~n computes the length of workspace iwork for gesdd routine.
val gesdd_min_lwork :
jobz:
('u_cols * 'vt_rows,
'm * 'n,
('m, 'n) Slap_size.min * ('m, 'n) Slap_size.min,
'm * 'n,
Slap_size.z * Slap_size.z)
Slap_common.svd_job ->
m:'m Slap_size.t ->
n:'n Slap_size.t ->
unit ->
('m, 'n, 'u_cols * 'vt_rows) gesdd_min_lwork Slap_size.tgesdd_min_lwork ~m ~n computes the minimum length of workspace work for gesdd routine.
val gesdd_opt_lwork :
jobz:
('u_cols * 'vt_rows,
'm * 'n,
('m, 'n) Slap_size.min * ('m, 'n) Slap_size.min,
'm * 'n,
Slap_size.z * Slap_size.z)
Slap_common.svd_job ->
?s:(('m, 'n) Slap_size.min, Slap_misc.cnt) vec ->
?u:('m, 'u_cols, 'u_cd) mat ->
?vt:('vt_rows, 'n, 'vt_cd) mat ->
?iwork:('liwork, Slap_misc.cnt) Slap_common.int32_vec ->
('m, 'n, 'a_cd) mat ->
(module Slap_size.SIZE)gesdd_opt_lwork ~jobz ?s ?u ?vt ?iwork a computes the optimum length of workspace work for gesdd routine.
val gesdd :
jobz:
('u_cols * 'vt_rows,
'm * 'n,
('m, 'n) Slap_size.min * ('m, 'n) Slap_size.min,
'm * 'n,
Slap_size.z * Slap_size.z)
Slap_common.svd_job ->
?s:(('m, 'n) Slap_size.min, Slap_misc.cnt) vec ->
?u:('m, 'u_cols, 'u_cd) mat ->
?vt:('vt_rows, 'n, 'vt_cd) mat ->
?work:('lwork, Slap_misc.cnt) vec ->
?iwork:('liwork, Slap_misc.cnt) Slap_common.int32_vec ->
('m, 'n, 'a_cd) mat ->
(('m, 'n) Slap_size.min, 'cnt) vec
* ('m, 'u_cols, 'u_cd) mat option
* ('vt_rows, 'n, 'vt_cd) mat optiongesdd ~jobz ?s ?u ?vt ?work ?iwork a computes the singular value decomposition (SVD) of general rectangular matrix a using a divide and conquer method: a = U * D * V^T where
Dis an'm-by-'nmatrix (the diagonal elements inDare singular values in descreasing order, and other elements are zeros),Uis an'm-by-'morthogonal matrix (the columns inUare left singular vectors), andVis an'n-by-'northogonal matrix (the columns inVare right singular vectors).
General eigenvalue problem (simple drivers)
geev
val geev_min_lwork : ?vectors:bool -> 'n Slap_size.t -> (module Slap_size.SIZE)geev_min_lwork ?vectors n computes the minimum length of workspace for geev routine. n is the number of rows or columns of a matrix.
val geev_opt_lwork :
?vl:('n, 'n, 'vl_cd) mat option ->
?vr:('n, 'n, 'vr_cd) mat option ->
?wr:('n, Slap_misc.cnt) vec ->
?wi:('n, Slap_misc.cnt) vec ->
('n, 'n, 'a_cd) mat ->
(module Slap_size.SIZE)geev_opt_lwork ?vl ?vr ?wr ?vi a computes the optimum length of workspace for geev routine.
val geev :
?work:('lwork, Slap_misc.cnt) vec ->
?vl:('n, 'n, 'vl_cd) mat option ->
?vr:('n, 'n, 'vr_cd) mat option ->
?wr:('n, Slap_misc.cnt) vec ->
?wi:('n, Slap_misc.cnt) vec ->
('n, 'n, 'a_cd) mat ->
('n, 'n, 'vl_cd) mat option
* ('n, Slap_misc.cnt) vec
* ('n, Slap_misc.cnt) vec
* ('n, 'n, 'vr_cd) mat optiongeev ?work ?vl ?vr ?wr ?wi a computes the eigenvalues and the left and right eigenvectors of 'n-by-'n nonsymmetric matrix a:
Let w(j) is the j-th eigenvalue of a. The j-th right eigenvector vr(j) satisfies a * vr(j) = w(j) * vr(j), and the j-th left eigenvector vl(j) satisfies vl(j)^H * a = vl(j)^H * w(j) where vl(j)^H denotes the conjugate transpose of vl(j). The computed eigenvalues are normalized by Euclidian norm.
Symmetric-matrix eigenvalue and singular value problems (simple drivers)
syev
val syev_min_lwork : 'n Slap_size.t -> 'n syev_min_lwork Slap_size.tsyev_min_lwork n computes the minimum length of workspace for syev routine. n is the number of rows or columns of a matrix.
val syev_opt_lwork :
?vectors:bool ->
?up:bool ->
('n, 'n, 'cd) mat ->
(module Slap_size.SIZE)syev_opt_lwork ?vectors ?up a computes the optimum length of workspace for syev routine.
val syev :
?vectors:bool ->
?up:bool ->
?work:('lwork, Slap_misc.cnt) vec ->
?w:('n, Slap_misc.cnt) vec ->
('n, 'n, 'cd) mat ->
('n, 'cnt) vecsyev ?vectors ?up ?work ?w a computes the eigenvalues and the eigenvectors of 'n-by-'n symmetric matrix a.
syevd
val syevd_min_lwork : vectors:bool -> 'n Slap_size.t -> (module Slap_size.SIZE)syevd_min_lwork ?vectors n computes the minimum length of workspace work for syevd routine. n is the number of rows or columns of a matrix.
val syevd_min_liwork :
vectors:bool ->
'n Slap_size.t ->
(module Slap_size.SIZE)syevd_min_liwork ?vectors n computes the minimum length of workspace iwork for syevd routine. n is the number of rows or columns of a matrix.
val syevd_opt_lwork :
?vectors:bool ->
?up:bool ->
('n, 'n, 'cd) mat ->
(module Slap_size.SIZE)syevd_opt_lwork ?vectors ?up a computes the optimum length of workspace work for syevd routine.
val syevd_opt_liwork :
?vectors:bool ->
?up:bool ->
('n, 'n, 'cd) mat ->
(module Slap_size.SIZE)syevd_opt_liwork ?vectors ?up a computes the optimum length of workspace iwork for syevd routine.
val syevd :
?vectors:bool ->
?up:bool ->
?work:('lwork, Slap_misc.cnt) vec ->
?iwork:('liwork, Slap_misc.cnt) Slap_common.int32_vec ->
?w:('n, Slap_misc.cnt) vec ->
('n, 'n, 'a_cd) mat ->
('n, 'w_cd) vecsyev ?vectors ?up ?w a computes the eigenvalues and the eigenvectors of 'n-by-'n symmetric matrix a using divide and conquer method.
sbev
val sbev_min_lwork : 'n Slap_size.t -> 'n sbev_min_lwork Slap_size.tsbev_min_lwork n computes the minimum length of workspace work for sbev routine. n is the number of rows or columns of a matrix.
val sbev :
kd:'kd Slap_size.t ->
?z:('n, 'n, 'z_cd) mat ->
?up:bool ->
?work:('lwork, Slap_misc.cnt) vec ->
?w:('n, Slap_misc.cnt) vec ->
(('n, 'kd) Slap_size.syband, 'n, 'a_cd) mat ->
('n, 'cnt) vecsbev ~kd ?z ?up ?work ?w ab computes all eigenvalues and, optionally, eigenvectors of real symmetric band matrix ab store in band storage format.
Symmetric-matrix eigenvalue and singular value problems (expert & RRR drivers)
syevr
val syevr_min_lwork : 'n Slap_size.t -> 'n syevr_min_lwork Slap_size.tsbevr_min_lwork n computes the minimum length of workspace work for syevr routine. n is the number of rows or columns of a matrix.
val syevr_min_liwork : 'n Slap_size.t -> 'n syevr_min_liwork Slap_size.tsbevr_min_liwork n computes the minimum length of workspace iwork for syevr routine. n is the number of rows or columns of a matrix.
val syevr_opt_lwork :
?vectors:bool ->
?range:[ `A | `I of int * int | `V of float * float ] ->
?up:bool ->
?abstol:float ->
('n, 'n, 'a_cd) mat ->
(module Slap_size.SIZE)sbevr_opt_lwork ?vectors ?range ?up ?abstol a computes the optimum length of workspace work for syevr routine.
val syevr_opt_liwork :
?vectors:bool ->
?range:[ `A | `I of int * int | `V of float * float ] ->
?up:bool ->
?abstol:float ->
('n, 'n, 'a_cd) mat ->
(module Slap_size.SIZE)sbevr_opt_liwork ?vectors ?range ?up ?abstol a computes the optimum length of workspace iwork for sbevr routine.
module type SYEVR_RESULT = sig ... endThe signature of returned modules of syevr_dyn.
val syevr_dyn :
?vectors:bool ->
?range:[ `A | `I of int * int | `V of float * float ] ->
?up:bool ->
?abstol:float ->
?work:('lwork, Slap_misc.cnt) vec ->
?iwork:('liwork, Slap_misc.cnt) Slap_common.int32_vec ->
?w:('n, Slap_misc.cnt) vec ->
?z:('n, 'k, 'z_cd) mat ->
?isuppz:(('k, 'k) Slap_size.add, Slap_misc.cnt) Slap_common.int32_vec ->
('n, 'n, 'a_cd) mat ->
(module SYEVR_RESULT
with type n = 'n)syevr_dyn ?vectors ?range ?up ?abstol ?work ?iwork ?w ?z ?isuppz a computes selected eigenvalues w and, optionally, eigenvectors z of a real symmetric matrix a using the Relatively Robust Representations.
Usage:
let f (type nn) ... =
...
let (a : (nn, nn, _) mat) = ... in
let module X = (val syevr_dyn ?vectors ?range ?up ?abstol
?work ?iwork ?w ?z ?isuppz a
: SYEVR_RESULT with type n = nn) in
let (m, w, z, isuppz) = X.value in
...where type nn is the size of symmetric matrix a. The returned module X contains tuple X.value = (m, w, z, isuppz) and type X.m for representation of the number of computed eigenvalues:
- Size
m : X.m Slap_size.tis the number of eigenvalues. - Vector
w : (X.n, _) veccontains themeigenvalues in ascending order. - Matrix
z : (X.n, X.m, _) matcontains themeigenvectors of dimensionnin the same order. 2*m-dimensional vectorisuppz : ((m, m) Slap.Slap_size.add, _) Slap_common.int32_vecindicates the nonzero elements inz.
sygv
val sygv_opt_lwork :
?vectors:bool ->
?up:bool ->
?itype:[ `AB | `A_B | `BA ] ->
('n, 'n, 'a_cd) mat ->
('n, 'n, 'b_cd) mat ->
(module Slap_size.SIZE)sygv_opt_lwork ?vectors ?up ?itype a b computes the optimum length of workspace work for sbevr routine.
val sygv :
?vectors:bool ->
?up:bool ->
?work:('lwork, Slap_misc.cnt) vec ->
?w:('n, Slap_misc.cnt) vec ->
?itype:[ `AB | `A_B | `BA ] ->
('n, 'n, 'a_cd) mat ->
('n, 'n, 'b_cd) mat ->
('n, 'cnt) vecsygv ?vectors ?up ?work ?w ?itype a b solves a real generalized symmetric definite eigenproblem:
a * x = lambda * b * xifitypeis`A_B;a * b * x = lambda * xifitypeis`AB;b * a * x = lambda * xifitypeis`BA
where a is a 'n-by-'n symmetric matrix, and b is a 'n-by-'n symmetric positive definite matrix.
sbgv
val sbgv :
ka:'ka Slap_size.t ->
kb:'kb Slap_size.t ->
?z:('n, 'n, 'z_cd) mat ->
?up:bool ->
?work:('lwork, Slap_misc.cnt) vec ->
?w:('n, Slap_misc.cnt) vec ->
(('n, 'ka) Slap_size.syband, 'n, 'ab_cd) mat ->
(('n, 'kb) Slap_size.syband, 'n, 'bb_cd) mat ->
('n, 'cnt) vecsbgv ~ka ~kb ?z ?up ?work ?w ab bb solves a general eigenvalue problem ab * z = (lambda) * bb * z where ab is a 'n-by-'n symmetric band matrix with ka subdiagonals, and bb is a 'n-by-'n symmetric positive-definite band matrix with kb subdiagonals. Both ab and bb are stored in band storage format.
- BLAS interface
- LAPACK interface
- BLAS interface
-
LAPACK interface
- Auxiliary routines
- Linear equations (computational routines)
- Least squares (expert drivers)
- General SVD routines
- General eigenvalue problem (simple drivers)
- Symmetric-matrix eigenvalue and singular value problems (simple drivers)
- Symmetric-matrix eigenvalue and singular value problems (expert & RRR drivers)