package slap
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=2ce8d745226da6da67041c205bdd671531a830715c1b5f449671d3c96d8279f9
md5=bfe00288f862f3cb5c8e39e2d89e90f8
doc/slap/Slap_D/index.html
Module Slap_D
type prec = Bigarray.float64_elt
type (+'indim, +'outdim, +'tag) trans3 =
('indim, 'outdim, 'tag) Slap_common.trans2
A 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.t
Vectors.
type (+'m, +'n, +'cnt_or_dsc) mat =
('m, 'n, num_type, prec, 'cnt_or_dsc) Slap_mat.t
Matrices.
type rprec = Bigarray.float64_elt
type (+'n, +'cnt_or_dsc) rvec = ('n, float, rprec, 'cnt_or_dsc) Slap_vec.t
val prec : (num_type, prec) Bigarray.kind
val rprec : (float, rprec) Bigarray.kind
module Vec : sig ... end
module Mat : sig ... end
val pp_num : Format.formatter -> num_type -> unit
A pretty-printer for elements in vectors and matrices.
val pp_vec : Format.formatter -> ('n, 'cnt_or_dsc) vec -> unit
A pretty-printer for column vectors.
val pp_mat : Format.formatter -> ('m, 'n, 'cnt_or_dsc) mat -> unit
A 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 -> float
nrm2 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 -> int
iamax 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) vec
gemv ?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) vec
gbmv ~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) vec
symv ?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 ->
unit
trmv ~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 ->
unit
trmv ~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 ->
unit
tpmv ~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 ->
unit
tpsv ~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) mat
gemm ?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) mat
symm ~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 ->
unit
trmm ~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 ->
unit
trsm ~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) mat
syrk ?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) mat
syr2k ?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) mat
lacpy ?uplo ?b a
copies the matrix a
into the matrix b
.
val lassq : ?scale:float -> ?sumsq:float -> ('n, 'cd) vec -> float * float
lassq ?scale ?sumsq x
type larnv_liseed = Slap_size.four
val larnv :
?idist:[ `Normal | `Uniform0 | `Uniform1 ] ->
?iseed:(larnv_liseed, Slap_misc.cnt) Slap_common.int32_vec ->
x:('n, Slap_misc.cnt) vec ->
unit ->
('n, 'cnt) vec
larnv ?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.t
lange_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 ->
float
lange ?norm ?work a
val lauum : ?up:[< `U | `L ] Slap_common.uplo -> ('n, 'n, 'cd) mat -> unit
lauum ?up a
computes
U * U^T
whereU
is the upper triangular part of matrixa
ifup
isSlap_common.upper
.L^T * L
whereL
is the lower triangular part of matrixa
ifup
isSlap_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_vec
getrf ?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, 'n, 'b_cd) mat ->
unit
getrs ?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.t
getri_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 ->
unit
getri ?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.t
sytrf_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_vec
sytrf ?up ?ipiv ?work a
factorizes symmetric matrix a
using the Bunch-Kaufman diagonal pivoting method:
a = P * U * D * U^T * P^T
ifup
=true
;a = P * L * D * L^T * P^T
ifup
=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 ->
unit
sytrs ?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^T
ifup
=true
;a = P * L * D * L^T * P^T
ifup
=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.t
sytri_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 ->
unit
sytri ?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^T
ifup
=true
;a = P * L * D * L^T * P^T
ifup
=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 ->
unit
potrf ?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 ->
unit
potrf ?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 ->
unit
potrf ?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 ->
unit
trtrs ?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 ->
unit
tbtrs ~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 ->
unit
trtri ?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.t
geqrf_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) vec
geqrf ?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 ->
unit
gesv ?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 ->
unit
gbsv ?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 ->
unit
posv ?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 ->
unit
ppsv ?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 ->
unit
pbsv ?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 ->
unit
ptsv 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.t
sysv_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 ->
unit
sysv ?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^T
whereU
andL
are 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 ->
unit
spsv ?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^T
whereU
andL
are 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.t
gels_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 ->
unit
gels ?work ~trans a b
solves an overdetermined or underdetermined system of linear equations using QR or LU factorization.
- If
trans
=Slap_common.normal
and'm >= 'n
: find the least square solution to an overdetermined system by minimizing||b - A * x||^2
. - If
trans
=Slap_common.normal
and'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.trans
and'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 -> float
asum 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) vec
sbmv ~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) mat
ger ?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) mat
syr ?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.t
lansy_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 ->
float
lansy ?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.t
orgqr_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 ->
unit
orgqr_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.t
ormqr_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 ->
unit
ormqr_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 * c
ifside
=Slap_common.left
andtrans
=Slap_common.normal
;Q^T * c
ifside
=Slap_common.left
andtrans
=Slap_common.trans
;c * Q
ifside
=Slap_common.right
andtrans
=Slap_common.normal
;c * Q^T
ifside
=Slap_common.right
andtrans
=Slap_common.trans
.
gecon
val gecon_min_lwork : 'n Slap_size.t -> 'n gecon_min_lwork Slap_size.t
gecon_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.t
gecon_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 ->
float
gecon ?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.t
sycon_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.t
sycon_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 ->
float
sycon ?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.t
pocon_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.t
pocon_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 ->
float
pocon ?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.t
gelsy_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 ->
int
gelsy 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.t
gelsd_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.t
gelsd_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 ->
int
gelsd 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.t
gelss_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 ->
int
gelss 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.t
gesvd_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) mat
gesvd ?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
D
is an'm
-by-'n
matrix (the diagonal elements inD
are singular values in descreasing order, and other elements are zeros),U
is an'm
-by-'m
orthogonal matrix (the columns inU
are left singular vectors), andV
is an'n
-by-'n
orthogonal matrix (the columns inV
are 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.t
gesdd_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.t
gesdd_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 option
gesdd ~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
D
is an'm
-by-'n
matrix (the diagonal elements inD
are singular values in descreasing order, and other elements are zeros),U
is an'm
-by-'m
orthogonal matrix (the columns inU
are left singular vectors), andV
is an'n
-by-'n
orthogonal matrix (the columns inV
are 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 option
geev ?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.t
syev_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) vec
syev ?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) vec
syev ?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.t
sbev_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) vec
sbev ~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.t
sbevr_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.t
sbevr_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 ... end
The 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.t
is the number of eigenvalues. - Vector
w : (X.n, _) vec
contains them
eigenvalues in ascending order. - Matrix
z : (X.n, X.m, _) mat
contains them
eigenvectors of dimensionn
in the same order. 2*m
-dimensional vectorisuppz : ((m, m) Slap.Slap_size.add, _) Slap_common.int32_vec
indicates 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) vec
sygv ?vectors ?up ?work ?w ?itype a b
solves a real generalized symmetric definite eigenproblem:
a * x = lambda * b * x
ifitype
is`A_B
;a * b * x = lambda * x
ifitype
is`AB
;b * a * x = lambda * x
ifitype
is`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) vec
sbgv ~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)