Page
Library
Module
Module type
Parameter
Class
Class type
Source
Lacaml.ZSourceDouble-precision complex BLAS and LAPACK functions.
This module Lacaml.Z contains linear algebra routines for complex numbers (precision: complex64). It is recommended to use this module by writing
open Lacaml.Zat the top of your file.
Complex vectors (precision: complex64).
Vectors of reals (precision: float64).
Complex matrices (precision: complex64).
Transpose parameter (conjugate transposed, normal, or transposed).
Precision for this submodule Z. Allows to write precision independent code.
pp_num ppf el is equivalent to fprintf ppf "(%G, %Gi)" el.re el.im.
val dotu :
?n:int ->
?ofsx:int ->
?incx:int ->
vec ->
?ofsy:int ->
?incy:int ->
vec ->
Complex.tdotu ?n ?ofsx ?incx x ?ofsy ?incy y see BLAS documentation!
val dotc :
?n:int ->
?ofsx:int ->
?incx:int ->
vec ->
?ofsy:int ->
?incy:int ->
vec ->
Complex.tdotc ?n ?ofsx ?incx x ?ofsy ?incy y see BLAS documentation!
lansy_min_lwork m norm
val lansy :
?n:int ->
?up:bool ->
?norm:Common.norm4 ->
?work:rvec ->
?ar:int ->
?ac:int ->
mat ->
floatlansy ?n ?up ?norm ?work ?ar ?ac a see LAPACK documentation!
gecon_min_lwork n
gecon_min_lrwork n
val gecon :
?n:int ->
?norm:Common.norm2 ->
?anorm:float ->
?work:vec ->
?rwork:rvec ->
?ar:int ->
?ac:int ->
mat ->
floatgecon ?n ?norm ?anorm ?work ?rwork ?ar ?ac a
sycon_min_lwork n
val sycon :
?n:int ->
?up:bool ->
?ipiv:Common.int32_vec ->
?anorm:float ->
?work:vec ->
?ar:int ->
?ac:int ->
mat ->
floatsycon ?n ?up ?ipiv ?anorm ?work ?ar ?ac a
pocon_min_lwork n
pocon_min_lrwork n
val pocon :
?n:int ->
?up:bool ->
?anorm:float ->
?work:vec ->
?rwork:rvec ->
?ar:int ->
?ac:int ->
mat ->
floatpocon ?n ?up ?anorm ?work ?rwork ?ar ?ac a
val gees :
?n:int ->
?jobvs:Common.schur_vectors ->
?sort:Common.eigen_value_sort ->
?w:vec ->
?vsr:int ->
?vsc:int ->
?vs:mat ->
?work:vec ->
?ar:int ->
?ac:int ->
mat ->
int * vec * matgees ?n ?jobvs ?sort ?w ?vsr ?vsc ?vs ?work ?ar ?ac a See gees-function for details about arguments.
gesvd_min_lwork ~m ~n
gesvd_lrwork m n
val gesvd_opt_lwork :
?m:int ->
?n:int ->
?jobu:Common.svd_job ->
?jobvt:Common.svd_job ->
?s:rvec ->
?ur:int ->
?uc:int ->
?u:mat ->
?vtr:int ->
?vtc:int ->
?vt:mat ->
?ar:int ->
?ac:int ->
mat ->
intgeev_min_lwork n
geev_min_lrwork n
val geev_opt_lwork :
?n:int ->
?vlr:int ->
?vlc:int ->
?vl:mat option ->
?vrr:int ->
?vrc:int ->
?vr:mat option ->
?ofsw:int ->
?w:vec ->
?ar:int ->
?ac:int ->
mat ->
intgeev ?work ?rwork ?n ?vlr ?vlc ?vl ?vrr ?vrc ?vr ?ofsw w ?ar ?ac a See geev-function for details about arguments.
val geev :
?n:int ->
?work:vec ->
?rwork:vec ->
?vlr:int ->
?vlc:int ->
?vl:mat option ->
?vrr:int ->
?vrc:int ->
?vr:mat option ->
?ofsw:int ->
?w:vec ->
?ar:int ->
?ac:int ->
mat ->
mat * vec * matgeev ?work ?rwork ?n ?vlr ?vlc ?vl ?vrr ?vrc ?vr ?ofsw w ?ar ?ac a
swap ?n ?ofsx ?incx x ?ofsy ?incy y see BLAS documentation!
scal ?n alpha ?ofsx ?incx x see BLAS documentation!
copy ?n ?ofsy ?incy ?y ?ofsx ?incx x see BLAS documentation!
nrm2 ?n ?ofsx ?incx x see BLAS documentation!
val axpy :
?alpha:Complex.t ->
?n:int ->
?ofsx:int ->
?incx:int ->
vec ->
?ofsy:int ->
?incy:int ->
vec ->
unitaxpy ?alpha ?n ?ofsx ?incx x ?ofsy ?incy y see BLAS documentation!
iamax ?n ?ofsx ?incx x see BLAS documentation!
val gemv :
?m:int ->
?n:int ->
?beta:Complex.t ->
?ofsy:int ->
?incy:int ->
?y:vec ->
?trans:trans3 ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
?ofsx:int ->
?incx:int ->
vec ->
vecgemv ?m ?n ?beta ?ofsy ?incy ?y ?trans ?alpha ?ar ?ac a ?ofsx ?incx x performs the operation y := alpha * op(a) * x + beta * y where op(a) = a or aᵀ according to the value of trans. See BLAS documentation for more information. BEWARE that the 1988 BLAS-2 specification mandates that this function has no effect when n=0 while the mathematically expected behavior is y ← beta * y.
val gbmv :
?m:int ->
?n:int ->
?beta:Complex.t ->
?ofsy:int ->
?incy:int ->
?y:vec ->
?trans:trans3 ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
int ->
int ->
?ofsx:int ->
?incx:int ->
vec ->
vecgbmv ?m ?n ?beta ?ofsy ?incy ?y ?trans ?alpha ?ar ?ac a kl ku ?ofsx ?incx x see BLAS documentation!
val symv :
?n:int ->
?beta:Complex.t ->
?ofsy:int ->
?incy:int ->
?y:vec ->
?up:bool ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
?ofsx:int ->
?incx:int ->
vec ->
vecsymv ?n ?beta ?ofsy ?incy ?y ?up ?alpha ?ar ?ac a ?ofsx ?incx x see BLAS documentation!
val trmv :
?n:int ->
?trans:trans3 ->
?diag:Common.diag ->
?up:bool ->
?ar:int ->
?ac:int ->
mat ->
?ofsx:int ->
?incx:int ->
vec ->
unittrmv ?n ?trans ?diag ?up ?ar ?ac a ?ofsx ?incx x see BLAS documentation!
val trsv :
?n:int ->
?trans:trans3 ->
?diag:Common.diag ->
?up:bool ->
?ar:int ->
?ac:int ->
mat ->
?ofsx:int ->
?incx:int ->
vec ->
unittrsv ?n ?trans ?diag ?up ?ar ?ac a ?ofsx ?incx x see BLAS documentation!
val tpmv :
?n:int ->
?trans:trans3 ->
?diag:Common.diag ->
?up:bool ->
?ofsap:int ->
vec ->
?ofsx:int ->
?incx:int ->
vec ->
unittpmv ?n ?trans ?diag ?up ?ofsap ap ?ofsx ?incx x see BLAS documentation!
val tpsv :
?n:int ->
?trans:trans3 ->
?diag:Common.diag ->
?up:bool ->
?ofsap:int ->
vec ->
?ofsx:int ->
?incx:int ->
vec ->
unittpsv ?n ?trans ?diag ?up ?ofsap ap ?ofsx ?incx x see BLAS documentation!
val gemm :
?m:int ->
?n:int ->
?k:int ->
?beta:Complex.t ->
?cr:int ->
?cc:int ->
?c:mat ->
?transa:trans3 ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
?transb:trans3 ->
?br:int ->
?bc:int ->
mat ->
matgemm ?m ?n ?k ?beta ?cr ?cc ?c ?transa ?alpha ?ar ?ac a ?transb ?br ?bc b performs the operation c := alpha * op(a) * op(b) + beta * c where op(x) = x or xᵀ depending on transx. See BLAS documentation for more information.
val symm :
?m:int ->
?n:int ->
?side:Common.side ->
?up:bool ->
?beta:Complex.t ->
?cr:int ->
?cc:int ->
?c:mat ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
?br:int ->
?bc:int ->
mat ->
matsymm ?m ?n ?side ?up ?beta ?cr ?cc ?c ?alpha ?ar ?ac a ?br ?bc b see BLAS documentation!
val trmm :
?m:int ->
?n:int ->
?side:Common.side ->
?up:bool ->
?transa:trans3 ->
?diag:Common.diag ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
?br:int ->
?bc:int ->
mat ->
unittrmm ?m ?n ?side ?up ?transa ?diag ?alpha ?ar ?ac a ?br ?bc b see BLAS documentation!
val trsm :
?m:int ->
?n:int ->
?side:Common.side ->
?up:bool ->
?transa:trans3 ->
?diag:Common.diag ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
?br:int ->
?bc:int ->
mat ->
unittrsm ?m ?n ?side ?up ?transa ?diag ?alpha ?ar ?ac ~a ?br ?bc b see BLAS documentation!
val syrk :
?n:int ->
?k:int ->
?up:bool ->
?beta:Complex.t ->
?cr:int ->
?cc:int ->
?c:mat ->
?trans:Common.trans2 ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
matsyrk ?n ?k ?up ?beta ?cr ?cc ?c ?trans ?alpha ?ar ?ac a see BLAS documentation!
val syr2k :
?n:int ->
?k:int ->
?up:bool ->
?beta:Complex.t ->
?cr:int ->
?cc:int ->
?c:mat ->
?trans:Common.trans2 ->
?alpha:Complex.t ->
?ar:int ->
?ac:int ->
mat ->
?br:int ->
?bc:int ->
mat ->
matsyr2k ?n ?k ?up ?beta ?cr ?cc ?c ?trans ?alpha ?ar ?ac a ?br ?bc b see BLAS documentation!
val lacpy :
?uplo:[ `U | `L ] ->
?patt:Common.Types.Mat.patt ->
?m:int ->
?n:int ->
?br:int ->
?bc:int ->
?b:mat ->
?ar:int ->
?ac:int ->
mat ->
matlacpy ?patt ?uplo ?m ?n ?br ?bc ?b ?ar ?ac a copy the (triangular) (sub-)matrix a (to an optional (sub-)matrix b) and return it. patt is more general than uplo and should be used in its place whenever strict BLAS conformance is not required. Only one of patt and uplo can be specified at a time.
val laswp :
?n:int ->
?ar:int ->
?ac:int ->
mat ->
?k1:int ->
?k2:int ->
?incx:int ->
Common.int32_vec ->
unitlaswp ?n ?ar ?ac a ?k1 ?k2 ?incx ipiv swap rows of a according to ipiv. See LAPACK-documentation for details!
val lapmt :
?forward:bool ->
?m:int ->
?n:int ->
?ar:int ->
?ac:int ->
mat ->
Common.int32_vec ->
unitlapmt ?forward ?n ?m ?ar ?ac a k swap columns of a according to the permutations in k. See LAPACK-documentation for details!
val lassq :
?n:int ->
?scale:float ->
?sumsq:float ->
?ofsx:int ->
?incx:int ->
vec ->
float * floatlassq ?n ?ofsx ?incx ?scale ?sumsq
val larnv :
?idist:[ `Uniform0 | `Uniform1 | `Normal ] ->
?iseed:Common.int32_vec ->
?n:int ->
?ofsx:int ->
?x:vec ->
unit ->
veclarnv ?idist ?iseed ?n ?ofsx ?x ()
lange_min_lwork m norm
val lange :
?m:int ->
?n:int ->
?norm:Common.norm4 ->
?work:rvec ->
?ar:int ->
?ac:int ->
mat ->
floatlange ?m ?n ?norm ?work ?ar ?ac a
lauum ?n ?up ?ar ?ac a computes the product U * U**T or L**T * L, where the triangular factor U or L is stored in the upper or lower triangular part of the array a. The upper or lower part of a is overwritten.
val getrf :
?m:int ->
?n:int ->
?ipiv:Common.int32_vec ->
?ar:int ->
?ac:int ->
mat ->
Common.int32_vecgetrf ?m ?n ?ipiv ?ar ?ac a computes an LU factorization of a general m-by-n matrix a using partial pivoting with row interchanges. See LAPACK documentation.
val getrs :
?n:int ->
?ipiv:Common.int32_vec ->
?trans:trans3 ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitgetri_min_lwork n
val getri :
?n:int ->
?ipiv:Common.int32_vec ->
?work:vec ->
?ar:int ->
?ac:int ->
mat ->
unitsytrf_min_lwork ()
sytrf_opt_lwork ?n ?up ?ar ?ac a
val sytrf :
?n:int ->
?up:bool ->
?ipiv:Common.int32_vec ->
?work:vec ->
?ar:int ->
?ac:int ->
mat ->
Common.int32_vecsytrf ?n ?up ?ipiv ?work ?ar ?ac a computes the factorization of the real symmetric matrix a using the Bunch-Kaufman diagonal pivoting method.
val sytrs :
?n:int ->
?up:bool ->
?ipiv:Common.int32_vec ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitsytri_min_lwork n
val sytri :
?n:int ->
?up:bool ->
?ipiv:Common.int32_vec ->
?work:vec ->
?ar:int ->
?ac:int ->
mat ->
unitpotrf ?n ?up ?ar ?ac a factorizes symmetric positive definite matrix a (or the designated submatrix) using Cholesky factorization.
val potrs :
?n:int ->
?up:bool ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitpotrs ?n ?up ?ar ?ac a ?nrhs ?br ?bc b solves a system of linear equations a*X = b, where a is symmetric positive definite matrix, using the Cholesky factorization a = U**T*U or a = L*L**T computed by potrf.
potri ?n ?up ?ar ?ac a computes the inverse of the real symmetric positive definite matrix a using the Cholesky factorization a = U**T*U or a = L*L**T computed by potrf.
val trtrs :
?n:int ->
?up:bool ->
?trans:trans3 ->
?diag:Common.diag ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unittrtrs ?n ?up ?trans ?diag ?ar ?ac a ?nrhs ?br ?bc b solves a triangular system of the form a * X = b or a**T * X = n, where a is a triangular matrix of order n, and b is an n-by-nrhs matrix.
val tbtrs :
?n:int ->
?kd:int ->
?up:bool ->
?trans:trans3 ->
?diag:Common.diag ->
?abr:int ->
?abc:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unittbtrs ?n ?kd ?up ?trans ?diag ?abr ?abc ab ?nrhs ?br ?bc b solves a triangular system of the form a * X = b or a**T * X = b, where a is a triangular band matrix of order n, and b is an n-by-nrhs matrix.
trtri ?n ?up ?diag ?ar ?ac a computes the inverse of a real upper or lower triangular matrix a.
geqrf_opt_lwork ?m ?n ?ar ?ac a
geqrf_min_lwork ~n
geqrf ?m ?n ?work ?tau ?ar ?ac a computes a QR factorization of a real m-by-n matrix a. See LAPACK documentation.
val gesv :
?n:int ->
?ipiv:Common.int32_vec ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitgesv ?n ?ipiv ?ar ?ac a ?nrhs ?br ?bc b computes the solution to a real system of linear equations a * X = b, where a is an n-by-n matrix and X and b are n-by-nrhs matrices. The LU decomposition with partial pivoting and row interchanges is used to factor a as a = P * L * U, where P is a permutation matrix, L is unit lower triangular, and U is upper triangular. The factored form of a is then used to solve the system of equations a * X = b. On exit, b contains the solution matrix X.
val gbsv :
?n:int ->
?ipiv:Common.int32_vec ->
?abr:int ->
?abc:int ->
mat ->
int ->
int ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitgbsv ?n ?ipiv ?abr ?abc ab kl ku ?nrhs ?br ?bc b computes the solution to a real system of linear equations a * X = b, where a is a band matrix of order n with kl subdiagonals and ku superdiagonals, and X and b are n-by-nrhs matrices. The LU decomposition with partial pivoting and row interchanges is used to factor a as a = L * U, where L is a product of permutation and unit lower triangular matrices with kl subdiagonals, and U is upper triangular with kl+ku superdiagonals. The factored form of a is then used to solve the system of equations a * X = b.
val gtsv :
?n:int ->
?ofsdl:int ->
vec ->
?ofsd:int ->
vec ->
?ofsdu:int ->
vec ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitgtsv ?n ?ofsdl dl ?ofsd d ?ofsdu du ?nrhs ?br ?bc b solves the equation a * X = b where a is an n-by-n tridiagonal matrix, by Gaussian elimination with partial pivoting. Note that the equation A'*X = b may be solved by interchanging the order of the arguments du and dl.
val posv :
?n:int ->
?up:bool ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitposv ?n ?up ?ar ?ac a ?nrhs ?br ?bc b computes the solution to a real system of linear equations a * X = b, where a is an n-by-n symmetric positive definite matrix and X and b are n-by-nrhs matrices. The Cholesky decomposition is used to factor a as a = U**T * U, if up = true, or a = L * L**T, if up = false, where U is an upper triangular matrix and L is a lower triangular matrix. The factored form of a is then used to solve the system of equations a * X = b.
val ppsv :
?n:int ->
?up:bool ->
?ofsap:int ->
vec ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitppsv ?n ?up ?ofsap ap ?nrhs ?br ?bc b computes the solution to the real system of linear equations a * X = b, where a is an n-by-n symmetric positive definite matrix stored in packed format and X and b are n-by-nrhs matrices. The Cholesky decomposition is used to factor a as a = U**T * U, if up = true, or a = L * L**T, if up = false, where U is an upper triangular matrix and L is a lower triangular matrix. The factored form of a is then used to solve the system of equations a * X = b.
val pbsv :
?n:int ->
?up:bool ->
?kd:int ->
?abr:int ->
?abc:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitpbsv ?n ?up ?kd ?abr ?abc ab ?nrhs ?br ?bc b computes the solution to a real system of linear equations a * X = b, where a is an n-by-n symmetric positive definite band matrix and X and b are n-by-nrhs matrices. The Cholesky decomposition is used to factor a as a = U**T * U, if up = true, or a = L * L**T, if up = false, where U is an upper triangular band matrix, and L is a lower triangular band matrix, with the same number of superdiagonals or subdiagonals as a. The factored form of a is then used to solve the system of equations a * X = b.
val ptsv :
?n:int ->
?ofsd:int ->
rvec ->
?ofse:int ->
vec ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitptsv ?n ?ofsd d ?ofse e ?nrhs ?br ?bc b computes the solution to the real system of linear equations a*X = b, where a is an n-by-n symmetric positive definite tridiagonal matrix, and X and b are n-by-nrhs matrices. A is factored as a = L*D*L**T, and the factored form of a is then used to solve the system of equations.
val sysv_opt_lwork :
?n:int ->
?up:bool ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
intsysv_opt_lwork ?n ?up ?ar ?ac a ?nrhs ?br ?bc b
val sysv :
?n:int ->
?up:bool ->
?ipiv:Common.int32_vec ->
?work:vec ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitsysv ?n ?up ?ipiv ?work ?ar ?ac a ?nrhs ?br ?bc b 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 up = true, or a = L * D * L**T, if up = false, 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.
val spsv :
?n:int ->
?up:bool ->
?ipiv:Common.int32_vec ->
?ofsap:int ->
vec ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitspsv ?n ?up ?ipiv ?ofsap ap ?nrhs ?br ?bc b computes the solution to the real system of linear equations a * X = b, where a is an n-by-n symmetric matrix stored in packed format 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 up = true, or a = L * D * L**T, if up = false, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, 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.
gels_min_lwork ~m ~n ~nrhs
val gels_opt_lwork :
?m:int ->
?n:int ->
?trans:Common.trans2 ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
intgels_opt_lwork ?m ?n ?trans ?ar ?ac a ?nrhs ?br ?bc b
val gels :
?m:int ->
?n:int ->
?work:vec ->
?trans:Common.trans2 ->
?ar:int ->
?ac:int ->
mat ->
?nrhs:int ->
?br:int ->
?bc:int ->
mat ->
unitgels ?m ?n ?work ?trans ?ar ?ac a ?nrhs ?br ?bc b see LAPACK documentation!