Linear Algebra (GSL Bindings)
Mitchell includes bindings to a portion of the GNU Scientific Library (GSL) for performing linear algebra computations. The provided bindings are listed below. Documentation on the behavior of these procedures can be found at the GSL documentation page.
Specific documentation for the dense linear algebra bindings can be found at
Specific documentation for the sparse linear algebra bindings can be found at
Interface
Types
type Vector
type Matrix
type VectorComplex
type EigenGenWorkspace
type EigenGenSymmvWorkspace
- Flag used for
blas_dgemv
,blas_dgemm
, andspblas_dgemv
.datatype CblasTranspose = CblasNoTrans | CblasTrans | CblasConjTrans
- Flag used for
spmatrix_alloc_nzmax
.datatype SpType = SpMatrixTriplet | SpMatrixCcs | SpMatrixCrs
Methods
Dense
val error : string * string * Int32.int * Int32.int -> unit
val stream_printf : string * string * Int32.int * string -> unit
val strerror : Int32.int -> string
val error_handler_t : string * string * Int32.int * Int32.int -> unit
val stream_handler_t : string * string * Int32.int * string -> unit
val vector_alloc : Int64.int -> Vector
val vector_calloc : Int64.int -> Vector
val vector_alloc_from_vector : Vector * Int64.int * Int64.int * Int64.int -> Vector
val vector_free : Vector -> unit
val vector_set_zero : Vector -> unit
val vector_set_all : Vector * Real64.real -> unit
val vector_set_basis : Vector * Int64.int -> Int32.int
val vector_memcpy : Vector * Vector -> Int32.int
val vector_reverse : Vector -> Int32.int
val vector_swap : Vector * Vector -> Int32.int
val vector_swap_elements : Vector * Int64.int * Int64.int -> Int32.int
val vector_max : Vector -> Real64.real
val vector_min : Vector -> Real64.real
val vector_minmax : Vector * Real64.real vector * Real64.real vector -> unit
val vector_max_index : Vector -> Int64.int
val vector_min_index : Vector -> Int64.int
val vector_add : Vector * Vector -> Int32.int
val vector_sub : Vector * Vector -> Int32.int
val vector_mul : Vector * Vector -> Int32.int
val vector_div : Vector * Vector -> Int32.int
val vector_scale : Vector * Real64.real -> Int32.int
val vector_add_constant : Vector * Real64.real -> Int32.int
val vector_equal : Vector * Vector -> Int32.int
val vector_isnull : Vector -> Int32.int
val vector_ispos : Vector -> Int32.int
val vector_isneg : Vector -> Int32.int
val vector_isnonneg : Vector -> Int32.int
val vector_get : Vector * Int64.int -> Real64.real
val vector_set : Vector * Int64.int * Real64.real -> unit
val vector_ptr : Vector * Int64.int -> Real64.real vector
val vector_const_ptr : Vector * Int64.int -> Real64.real vector
val vector_complex_alloc : Int64.int -> VectorComplex
val vector_complex_calloc : Int64.int -> VectorComplex
val vector_complex_alloc_from_vector : VectorComplex * Int64.int * Int64.int * Int64.int -> VectorComplex
val vector_complex_free : VectorComplex -> unit
val vector_complex_set_zero : VectorComplex -> unit
val vector_complex_set_basis : VectorComplex * Int64.int -> Int32.int
val vector_complex_memcpy : VectorComplex * VectorComplex -> Int32.int
val vector_complex_reverse : VectorComplex -> Int32.int
val vector_complex_swap : VectorComplex * VectorComplex -> Int32.int
val vector_complex_swap_elements : VectorComplex * Int64.int * Int64.int -> Int32.int
val vector_complex_equal : VectorComplex * VectorComplex -> Int32.int
val vector_complex_isnull : VectorComplex -> Int32.int
val vector_complex_ispos : VectorComplex -> Int32.int
val vector_complex_isneg : VectorComplex -> Int32.int
val vector_complex_isnonneg : VectorComplex -> Int32.int
val vector_complex_add : VectorComplex * VectorComplex -> Int32.int
val vector_complex_sub : VectorComplex * VectorComplex -> Int32.int
val vector_complex_mul : VectorComplex * VectorComplex -> Int32.int
val vector_complex_div : VectorComplex * VectorComplex -> Int32.int
val matrix_alloc : Int64.int * Int64.int -> Matrix
val matrix_calloc : Int64.int * Int64.int -> Matrix
val matrix_alloc_from_matrix : Matrix * Int64.int * Int64.int * Int64.int * Int64.int -> Matrix
val vector_alloc_row_from_matrix : Matrix * Int64.int -> Vector
val vector_alloc_col_from_matrix : Matrix * Int64.int -> Vector
val matrix_free : Matrix -> unit
val matrix_set_zero : Matrix -> unit
val matrix_set_identity : Matrix -> unit
val matrix_set_all : Matrix * Real64.real -> unit
val matrix_memcpy : Matrix * Matrix -> Int32.int
val matrix_swap : Matrix * Matrix -> Int32.int
val matrix_swap_rows : Matrix * Int64.int * Int64.int -> Int32.int
val matrix_swap_columns : Matrix * Int64.int * Int64.int -> Int32.int
val matrix_swap_rowcol : Matrix * Int64.int * Int64.int -> Int32.int
val matrix_transpose : Matrix -> Int32.int
val matrix_transpose_memcpy : Matrix * Matrix -> Int32.int
val matrix_max : Matrix -> Real64.real
val matrix_min : Matrix -> Real64.real
val matrix_minmax : Matrix * Real64.real vector * Real64.real vector -> unit
val matrix_equal : Matrix * Matrix -> Int32.int
val matrix_isnull : Matrix -> Int32.int
val matrix_ispos : Matrix -> Int32.int
val matrix_isneg : Matrix -> Int32.int
val matrix_isnonneg : Matrix -> Int32.int
val matrix_add : Matrix * Matrix -> Int32.int
val matrix_sub : Matrix * Matrix -> Int32.int
val matrix_mul_elements : Matrix * Matrix -> Int32.int
val matrix_div_elements : Matrix * Matrix -> Int32.int
val matrix_scale : Matrix * Real64.real -> Int32.int
val matrix_add_constant : Matrix * Real64.real -> Int32.int
val matrix_add_diagonal : Matrix * Real64.real -> Int32.int
val matrix_get_row : Vector * Matrix * Int64.int -> Int32.int
val matrix_get_col : Vector * Matrix * Int64.int -> Int32.int
val matrix_set_row : Matrix * Int64.int * Vector -> Int32.int
val matrix_set_col : Matrix * Int64.int * Vector -> Int32.int
val matrix_get : Matrix * Int64.int * Int64.int -> Real64.real
val matrix_set : Matrix * Int64.int * Int64.int * Real64.real -> unit
val matrix_ptr : Matrix * Int64.int * Int64.int -> Real64.real vector
val matrix_const_ptr : Matrix * Int64.int * Int64.int -> Real64.real vector
val log1p : Real64.real -> Real64.real
val expm1 : Real64.real -> Real64.real
val hypot : Real64.real * Real64.real -> Real64.real
val hypot3 : Real64.real * Real64.real * Real64.real -> Real64.real
val acosh : Real64.real -> Real64.real
val asinh : Real64.real -> Real64.real
val atanh : Real64.real -> Real64.real
val isnan : Real64.real -> Int32.int
val isinf : Real64.real -> Int32.int
val finite : Real64.real -> Int32.int
val nan : unit -> Real64.real
val posinf : unit -> Real64.real
val neginf : unit -> Real64.real
val fdiv : Real64.real * Real64.real -> Real64.real
val coerce_double : Real64.real -> Real64.real
val ldexp : Real64.real * Int32.int -> Real64.real
val fcmp : Real64.real * Real64.real * Real64.real -> Int32.int
val pow_2 : Real64.real -> Real64.real
val pow_3 : Real64.real -> Real64.real
val pow_4 : Real64.real -> Real64.real
val pow_5 : Real64.real -> Real64.real
val pow_6 : Real64.real -> Real64.real
val pow_7 : Real64.real -> Real64.real
val pow_8 : Real64.real -> Real64.real
val pow_9 : Real64.real -> Real64.real
val pow_int : Real64.real * Int32.int -> Real64.real
val max : Real64.real * Real64.real -> Real64.real
val min : Real64.real * Real64.real -> Real64.real
val cblas_ddot : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> Real64.real
val cblas_dnrm2 : Int32.int * Real64.real vector * Int32.int -> Real64.real
val cblas_dasum : Int32.int * Real64.real vector * Int32.int -> Real64.real
val cblas_idamax : Int32.int * Real64.real vector * Int32.int -> Int64.int
val cblas_dswap : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> unit
val cblas_dcopy : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> unit
val cblas_daxpy : Int32.int * Real64.real * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> unit
val cblas_drotg : Real64.real vector * Real64.real vector * Real64.real vector * Real64.real vector -> unit
val cblas_drotmg : Real64.real vector * Real64.real vector * Real64.real vector * Real64.real * Real64.real vector -> unit
val cblas_drot : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int * Real64.real * Real64.real -> unit
val cblas_drotm : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int * Real64.real vector -> unit
val cblas_dscal : Int32.int * Real64.real * Real64.real vector * Int32.int -> unit
val blas_ddot : Vector * Vector * Real64.real vector -> Int32.int
val blas_dnrm2 : Vector -> Real64.real
val blas_dasum : Vector -> Real64.real
val blas_dznrm2 : VectorComplex -> Real64.real
val blas_dzasum : VectorComplex -> Real64.real
val blas_dswap : Vector * Vector -> Int32.int
val blas_dcopy : Vector * Vector -> Int32.int
val blas_daxpy : Real64.real * Vector * Vector -> Int32.int
val blas_zswap : VectorComplex * VectorComplex -> Int32.int
val blas_zcopy : VectorComplex * VectorComplex -> Int32.int
val blas_drot : Vector * Vector * Real64.real * Real64.real -> Int32.int
val blas_dscal : Real64.real * Vector -> unit
val blas_zdscal : Real64.real * VectorComplex -> unit
val blas_dger : Real64.real * Vector * Vector * Matrix -> Int32.int
val linalg_matmult : Matrix * Matrix * Matrix -> Int32.int
val linalg_householder_transform : Vector -> Real64.real
val linalg_householder_hm : Real64.real * Vector * Matrix -> Int32.int
val linalg_householder_mh : Real64.real * Vector * Matrix -> Int32.int
val linalg_householder_hv : Real64.real * Vector * Vector -> Int32.int
val linalg_householder_hm1 : Real64.real * Matrix -> Int32.int
val linalg_hessenberg_decomp : Matrix * Vector -> Int32.int
val linalg_hessenberg_unpack : Matrix * Vector * Matrix -> Int32.int
val linalg_hessenberg_unpack_accum : Matrix * Vector * Matrix -> Int32.int
val linalg_hessenberg_set_zero : Matrix -> Int32.int
val linalg_hessenberg_submatrix : Matrix * Matrix * Int64.int * Vector -> Int32.int
val linalg_hesstri_decomp : Matrix * Matrix * Matrix * Matrix * Vector -> Int32.int
val linalg_SV_decomp : Matrix * Matrix * Vector * Vector -> Int32.int
val linalg_SV_decomp_mod : Matrix * Matrix * Matrix * Vector * Vector -> Int32.int
val linalg_SV_decomp_jacobi : Matrix * Matrix * Vector -> Int32.int
val linalg_SV_solve : Matrix * Matrix * Vector * Vector * Vector -> Int32.int
val linalg_SV_leverage : Matrix * Vector -> Int32.int
val linalg_LU_det : Matrix * Int32.int -> Real64.real
val linalg_LU_lndet : Matrix -> Real64.real
val linalg_LU_sgndet : Matrix * Int32.int -> Int32.int
val linalg_QR_decomp : Matrix * Vector -> Int32.int
val linalg_QR_solve : Matrix * Vector * Vector * Vector -> Int32.int
val linalg_QR_svx : Matrix * Vector * Vector -> Int32.int
val linalg_QR_lssolve : Matrix * Vector * Vector * Vector * Vector -> Int32.int
val linalg_QR_QRsolve : Matrix * Matrix * Vector * Vector -> Int32.int
val linalg_QR_Rsolve : Matrix * Vector * Vector -> Int32.int
val linalg_QR_Rsvx : Matrix * Vector -> Int32.int
val linalg_QR_update : Matrix * Matrix * Vector * Vector -> Int32.int
val linalg_QR_QTvec : Matrix * Vector * Vector -> Int32.int
val linalg_QR_Qvec : Matrix * Vector * Vector -> Int32.int
val linalg_QR_QTmat : Matrix * Vector * Matrix -> Int32.int
val linalg_QR_matQ : Matrix * Vector * Matrix -> Int32.int
val linalg_QR_unpack : Matrix * Vector * Matrix * Matrix -> Int32.int
val linalg_R_solve : Matrix * Vector * Vector -> Int32.int
val linalg_R_svx : Matrix * Vector -> Int32.int
val linalg_QRPT_rank : Matrix * Real64.real -> Int64.int
val linalg_QRPT_rcond : Matrix * Real64.real vector * Vector -> Int32.int
val linalg_COD_unpack : Matrix * Vector * Vector * Int64.int * Matrix * Matrix * Matrix -> Int32.int
val linalg_COD_matZ : Matrix * Vector * Int64.int * Matrix * Vector -> Int32.int
val linalg_LQ_decomp : Matrix * Vector -> Int32.int
val linalg_LQ_solve_T : Matrix * Vector * Vector * Vector -> Int32.int
val linalg_LQ_svx_T : Matrix * Vector * Vector -> Int32.int
val linalg_LQ_lssolve_T : Matrix * Vector * Vector * Vector * Vector -> Int32.int
val linalg_LQ_Lsolve_T : Matrix * Vector * Vector -> Int32.int
val linalg_LQ_Lsvx_T : Matrix * Vector -> Int32.int
val linalg_L_solve_T : Matrix * Vector * Vector -> Int32.int
val linalg_LQ_vecQ : Matrix * Vector * Vector -> Int32.int
val linalg_LQ_vecQT : Matrix * Vector * Vector -> Int32.int
val linalg_LQ_unpack : Matrix * Vector * Matrix * Matrix -> Int32.int
val linalg_LQ_update : Matrix * Matrix * Vector * Vector -> Int32.int
val linalg_LQ_LQsolve : Matrix * Matrix * Vector * Vector -> Int32.int
val linalg_cholesky_decomp : Matrix -> Int32.int
val linalg_cholesky_decomp1 : Matrix -> Int32.int
val linalg_cholesky_solve : Matrix * Vector * Vector -> Int32.int
val linalg_cholesky_svx : Matrix * Vector -> Int32.int
val linalg_cholesky_invert : Matrix -> Int32.int
val linalg_cholesky_decomp_unit : Matrix * Vector -> Int32.int
val linalg_cholesky_scale : Matrix * Vector -> Int32.int
val linalg_cholesky_scale_apply : Matrix * Vector -> Int32.int
val linalg_cholesky_decomp2 : Matrix * Vector -> Int32.int
val linalg_cholesky_svx2 : Matrix * Vector * Vector -> Int32.int
val linalg_cholesky_solve2 : Matrix * Vector * Vector * Vector -> Int32.int
val linalg_cholesky_rcond : Matrix * Real64.real vector * Vector -> Int32.int
val linalg_symmtd_decomp : Matrix * Vector -> Int32.int
val linalg_symmtd_unpack : Matrix * Vector * Matrix * Vector * Vector -> Int32.int
val linalg_symmtd_unpack_T : Matrix * Vector * Vector -> Int32.int
val linalg_HH_solve : Matrix * Vector * Vector -> Int32.int
val linalg_HH_svx : Matrix * Vector -> Int32.int
val linalg_solve_symm_tridiag : Vector * Vector * Vector * Vector -> Int32.int
val linalg_solve_tridiag : Vector * Vector * Vector * Vector * Vector -> Int32.int
val linalg_solve_symm_cyc_tridiag : Vector * Vector * Vector * Vector -> Int32.int
val linalg_solve_cyc_tridiag : Vector * Vector * Vector * Vector * Vector -> Int32.int
val linalg_bidiag_decomp : Matrix * Vector * Vector -> Int32.int
val linalg_bidiag_unpack : Matrix * Vector * Matrix * Vector * Matrix * Vector * Vector -> Int32.int
val linalg_bidiag_unpack2 : Matrix * Vector * Vector * Matrix -> Int32.int
val linalg_bidiag_unpack_B : Matrix * Vector * Vector -> Int32.int
val linalg_balance_matrix : Matrix * Vector -> Int32.int
val linalg_balance_accum : Matrix * Vector -> Int32.int
val linalg_balance_columns : Matrix * Vector -> Int32.int
val linalg_tri_upper_rcond : Matrix * Real64.real vector * Vector -> Int32.int
val linalg_tri_lower_rcond : Matrix * Real64.real vector * Vector -> Int32.int
val linalg_tri_upper_invert : Matrix -> Int32.int
val linalg_tri_lower_invert : Matrix -> Int32.int
val linalg_tri_upper_unit_invert : Matrix -> Int32.int
val linalg_tri_lower_unit_invert : Matrix -> Int32.int
val linalg_givens : Real64.real * Real64.real * Real64.real vector * Real64.real vector -> unit
val linalg_givens_gv : Vector * Int64.int * Int64.int * Real64.real * Real64.real -> unit
val eigen_gensymm_standardize : Matrix * Matrix -> Int32.int
val eigen_gensymmv_alloc : Int64.int -> EigenGenSymmvWorkspace
val eigen_gensymmv_free : EigenGenSymmvWorkspace -> unit
val eigen_gensymmv : Matrix * Matrix * Vector * Matrix * EigenGenSymmvWorkspace -> Int32.int
val eigen_gen_alloc : Int64.int -> EigenGenWorkspace
val eigen_gen_free : EigenGenWorkspace -> unit
val eigen_gen_params : Int32.int * Int32.int * Int32.int * EigenGenWorkspace -> unit
val eigen_gen : Matrix * Matrix * VectorComplex * Vector * EigenGenWorkspace -> Int32.int
val eigen_gen_QZ : Matrix * Matrix * VectorComplex * Vector * Matrix * Matrix * EigenGenWorkspace -> Int32.int
val schur_gen_eigvals : Matrix * Matrix * Real64.real vector * Real64.real vector * Real64.real vector * Real64.real vector * Real64.real vector -> Int32.int
val schur_solve_equation : Real64.real * Matrix * Real64.real * Real64.real * Real64.real * Vector * Vector * Real64.real vector * Real64.real vector * Real64.real -> Int32.int
val blas_dgemv : CblasTranspose * Real64.real * Matrix * Vector * Real64.real * Vector -> Int32.int
val blas_dgemm : CblasTranspose * CblasTranspose * Real64.real * Matrix * Matrix * Real64.real * Matrix -> Int32.int
Sparse
val spmatrix_alloc : Int64.int * Int64.int -> SpMatrix
val spmatrix_alloc_nzmax : Int64.int * Int64.int * Int64.int * SpType -> SpMatrix
val spmatrix_free : SpMatrix -> unit
val spmatrix_get : SpMatrix * Int64.int * Int64.int -> Real64.real
val spmatrix_set : SpMatrix * Int64.int * Int64.int * Real64.real -> Int32.int
val spmatrix_set_zero : SpMatrix -> Int32.int
val spmatrix_memcpy : SpMatrix * SpMatrix -> Int32.int
val spmatrix_transpose_memcpy : SpMatrix * SpMatrix -> Int32.int
val spmatrix_transpose : SpMatrix -> Int32.int
val spmatrix_transpose2 : SpMatrix -> Int32.int
val spmatrix_add : SpMatrix * SpMatrix * SpMatrix -> Int32.int
val spmatrix_scale : SpMatrix * Real64.real -> Int32.int
val spmatrix_nnz : SpMatrix -> Int64.int
val spmatrix_d2sp : SpMatrix * Matrix -> Int32.int
val spmatrix_sp2d : Matrix * SpMatrix -> Int32.int
val spblas_gemv : CblasTranspose * Real64.real * SpMatrix * Vector * Real64.real * Vector -> Int32.int
val spblas_dgemm : Real64.real * SpMatrix * SpMatrix * SpMatrix -> Int32.int