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 Vectortype Matrixtype VectorComplextype EigenGenWorkspacetype 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 -> unitval stream_printf : string * string * Int32.int * string -> unitval strerror : Int32.int -> stringval error_handler_t : string * string * Int32.int * Int32.int -> unitval stream_handler_t : string * string * Int32.int * string -> unitval vector_alloc : Int64.int -> Vectorval vector_calloc : Int64.int -> Vectorval vector_alloc_from_vector : Vector * Int64.int * Int64.int * Int64.int -> Vectorval vector_free : Vector -> unitval vector_set_zero : Vector -> unitval vector_set_all : Vector * Real64.real -> unitval vector_set_basis : Vector * Int64.int -> Int32.intval vector_memcpy : Vector * Vector -> Int32.intval vector_reverse : Vector -> Int32.intval vector_swap : Vector * Vector -> Int32.intval vector_swap_elements : Vector * Int64.int * Int64.int -> Int32.intval vector_max : Vector -> Real64.realval vector_min : Vector -> Real64.realval vector_minmax : Vector * Real64.real vector * Real64.real vector -> unitval vector_max_index : Vector -> Int64.intval vector_min_index : Vector -> Int64.intval vector_add : Vector * Vector -> Int32.intval vector_sub : Vector * Vector -> Int32.intval vector_mul : Vector * Vector -> Int32.intval vector_div : Vector * Vector -> Int32.intval vector_scale : Vector * Real64.real -> Int32.intval vector_add_constant : Vector * Real64.real -> Int32.intval vector_equal : Vector * Vector -> Int32.intval vector_isnull : Vector -> Int32.intval vector_ispos : Vector -> Int32.intval vector_isneg : Vector -> Int32.intval vector_isnonneg : Vector -> Int32.intval vector_get : Vector * Int64.int -> Real64.realval vector_set : Vector * Int64.int * Real64.real -> unitval vector_ptr : Vector * Int64.int -> Real64.real vectorval vector_const_ptr : Vector * Int64.int -> Real64.real vectorval vector_complex_alloc : Int64.int -> VectorComplexval vector_complex_calloc : Int64.int -> VectorComplexval vector_complex_alloc_from_vector : VectorComplex * Int64.int * Int64.int * Int64.int -> VectorComplexval vector_complex_free : VectorComplex -> unitval vector_complex_set_zero : VectorComplex -> unitval vector_complex_set_basis : VectorComplex * Int64.int -> Int32.intval vector_complex_memcpy : VectorComplex * VectorComplex -> Int32.intval vector_complex_reverse : VectorComplex -> Int32.intval vector_complex_swap : VectorComplex * VectorComplex -> Int32.intval vector_complex_swap_elements : VectorComplex * Int64.int * Int64.int -> Int32.intval vector_complex_equal : VectorComplex * VectorComplex -> Int32.intval vector_complex_isnull : VectorComplex -> Int32.intval vector_complex_ispos : VectorComplex -> Int32.intval vector_complex_isneg : VectorComplex -> Int32.intval vector_complex_isnonneg : VectorComplex -> Int32.intval vector_complex_add : VectorComplex * VectorComplex -> Int32.intval vector_complex_sub : VectorComplex * VectorComplex -> Int32.intval vector_complex_mul : VectorComplex * VectorComplex -> Int32.intval vector_complex_div : VectorComplex * VectorComplex -> Int32.intval matrix_alloc : Int64.int * Int64.int -> Matrixval matrix_calloc : Int64.int * Int64.int -> Matrixval matrix_alloc_from_matrix : Matrix * Int64.int * Int64.int * Int64.int * Int64.int -> Matrixval vector_alloc_row_from_matrix : Matrix * Int64.int -> Vectorval vector_alloc_col_from_matrix : Matrix * Int64.int -> Vectorval matrix_free : Matrix -> unitval matrix_set_zero : Matrix -> unitval matrix_set_identity : Matrix -> unitval matrix_set_all : Matrix * Real64.real -> unitval matrix_memcpy : Matrix * Matrix -> Int32.intval matrix_swap : Matrix * Matrix -> Int32.intval matrix_swap_rows : Matrix * Int64.int * Int64.int -> Int32.intval matrix_swap_columns : Matrix * Int64.int * Int64.int -> Int32.intval matrix_swap_rowcol : Matrix * Int64.int * Int64.int -> Int32.intval matrix_transpose : Matrix -> Int32.intval matrix_transpose_memcpy : Matrix * Matrix -> Int32.intval matrix_max : Matrix -> Real64.realval matrix_min : Matrix -> Real64.realval matrix_minmax : Matrix * Real64.real vector * Real64.real vector -> unitval matrix_equal : Matrix * Matrix -> Int32.intval matrix_isnull : Matrix -> Int32.intval matrix_ispos : Matrix -> Int32.intval matrix_isneg : Matrix -> Int32.intval matrix_isnonneg : Matrix -> Int32.intval matrix_add : Matrix * Matrix -> Int32.intval matrix_sub : Matrix * Matrix -> Int32.intval matrix_mul_elements : Matrix * Matrix -> Int32.intval matrix_div_elements : Matrix * Matrix -> Int32.intval matrix_scale : Matrix * Real64.real -> Int32.intval matrix_add_constant : Matrix * Real64.real -> Int32.intval matrix_add_diagonal : Matrix * Real64.real -> Int32.intval matrix_get_row : Vector * Matrix * Int64.int -> Int32.intval matrix_get_col : Vector * Matrix * Int64.int -> Int32.intval matrix_set_row : Matrix * Int64.int * Vector -> Int32.intval matrix_set_col : Matrix * Int64.int * Vector -> Int32.intval matrix_get : Matrix * Int64.int * Int64.int -> Real64.realval matrix_set : Matrix * Int64.int * Int64.int * Real64.real -> unitval matrix_ptr : Matrix * Int64.int * Int64.int -> Real64.real vectorval matrix_const_ptr : Matrix * Int64.int * Int64.int -> Real64.real vectorval log1p : Real64.real -> Real64.realval expm1 : Real64.real -> Real64.realval hypot : Real64.real * Real64.real -> Real64.realval hypot3 : Real64.real * Real64.real * Real64.real -> Real64.realval acosh : Real64.real -> Real64.realval asinh : Real64.real -> Real64.realval atanh : Real64.real -> Real64.realval isnan : Real64.real -> Int32.intval isinf : Real64.real -> Int32.intval finite : Real64.real -> Int32.intval nan : unit -> Real64.realval posinf : unit -> Real64.realval neginf : unit -> Real64.realval fdiv : Real64.real * Real64.real -> Real64.realval coerce_double : Real64.real -> Real64.realval ldexp : Real64.real * Int32.int -> Real64.realval fcmp : Real64.real * Real64.real * Real64.real -> Int32.intval pow_2 : Real64.real -> Real64.realval pow_3 : Real64.real -> Real64.realval pow_4 : Real64.real -> Real64.realval pow_5 : Real64.real -> Real64.realval pow_6 : Real64.real -> Real64.realval pow_7 : Real64.real -> Real64.realval pow_8 : Real64.real -> Real64.realval pow_9 : Real64.real -> Real64.realval pow_int : Real64.real * Int32.int -> Real64.realval max : Real64.real * Real64.real -> Real64.realval min : Real64.real * Real64.real -> Real64.realval cblas_ddot : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> Real64.realval cblas_dnrm2 : Int32.int * Real64.real vector * Int32.int -> Real64.realval cblas_dasum : Int32.int * Real64.real vector * Int32.int -> Real64.realval cblas_idamax : Int32.int * Real64.real vector * Int32.int -> Int64.intval cblas_dswap : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> unitval cblas_dcopy : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> unitval cblas_daxpy : Int32.int * Real64.real * Real64.real vector * Int32.int * Real64.real vector * Int32.int -> unitval cblas_drotg : Real64.real vector * Real64.real vector * Real64.real vector * Real64.real vector -> unitval cblas_drotmg : Real64.real vector * Real64.real vector * Real64.real vector * Real64.real * Real64.real vector -> unitval cblas_drot : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int * Real64.real * Real64.real -> unitval cblas_drotm : Int32.int * Real64.real vector * Int32.int * Real64.real vector * Int32.int * Real64.real vector -> unitval cblas_dscal : Int32.int * Real64.real * Real64.real vector * Int32.int -> unitval blas_ddot : Vector * Vector * Real64.real vector -> Int32.intval blas_dnrm2 : Vector -> Real64.realval blas_dasum : Vector -> Real64.realval blas_dznrm2 : VectorComplex -> Real64.realval blas_dzasum : VectorComplex -> Real64.realval blas_dswap : Vector * Vector -> Int32.intval blas_dcopy : Vector * Vector -> Int32.intval blas_daxpy : Real64.real * Vector * Vector -> Int32.intval blas_zswap : VectorComplex * VectorComplex -> Int32.intval blas_zcopy : VectorComplex * VectorComplex -> Int32.intval blas_drot : Vector * Vector * Real64.real * Real64.real -> Int32.intval blas_dscal : Real64.real * Vector -> unitval blas_zdscal : Real64.real * VectorComplex -> unitval blas_dger : Real64.real * Vector * Vector * Matrix -> Int32.intval linalg_matmult : Matrix * Matrix * Matrix -> Int32.intval linalg_householder_transform : Vector -> Real64.realval linalg_householder_hm : Real64.real * Vector * Matrix -> Int32.intval linalg_householder_mh : Real64.real * Vector * Matrix -> Int32.intval linalg_householder_hv : Real64.real * Vector * Vector -> Int32.intval linalg_householder_hm1 : Real64.real * Matrix -> Int32.intval linalg_hessenberg_decomp : Matrix * Vector -> Int32.intval linalg_hessenberg_unpack : Matrix * Vector * Matrix -> Int32.intval linalg_hessenberg_unpack_accum : Matrix * Vector * Matrix -> Int32.intval linalg_hessenberg_set_zero : Matrix -> Int32.intval linalg_hessenberg_submatrix : Matrix * Matrix * Int64.int * Vector -> Int32.intval linalg_hesstri_decomp : Matrix * Matrix * Matrix * Matrix * Vector -> Int32.intval linalg_SV_decomp : Matrix * Matrix * Vector * Vector -> Int32.intval linalg_SV_decomp_mod : Matrix * Matrix * Matrix * Vector * Vector -> Int32.intval linalg_SV_decomp_jacobi : Matrix * Matrix * Vector -> Int32.intval linalg_SV_solve : Matrix * Matrix * Vector * Vector * Vector -> Int32.intval linalg_SV_leverage : Matrix * Vector -> Int32.intval linalg_LU_det : Matrix * Int32.int -> Real64.realval linalg_LU_lndet : Matrix -> Real64.realval linalg_LU_sgndet : Matrix * Int32.int -> Int32.intval linalg_QR_decomp : Matrix * Vector -> Int32.intval linalg_QR_solve : Matrix * Vector * Vector * Vector -> Int32.intval linalg_QR_svx : Matrix * Vector * Vector -> Int32.intval linalg_QR_lssolve : Matrix * Vector * Vector * Vector * Vector -> Int32.intval linalg_QR_QRsolve : Matrix * Matrix * Vector * Vector -> Int32.intval linalg_QR_Rsolve : Matrix * Vector * Vector -> Int32.intval linalg_QR_Rsvx : Matrix * Vector -> Int32.intval linalg_QR_update : Matrix * Matrix * Vector * Vector -> Int32.intval linalg_QR_QTvec : Matrix * Vector * Vector -> Int32.intval linalg_QR_Qvec : Matrix * Vector * Vector -> Int32.intval linalg_QR_QTmat : Matrix * Vector * Matrix -> Int32.intval linalg_QR_matQ : Matrix * Vector * Matrix -> Int32.intval linalg_QR_unpack : Matrix * Vector * Matrix * Matrix -> Int32.intval linalg_R_solve : Matrix * Vector * Vector -> Int32.intval linalg_R_svx : Matrix * Vector -> Int32.intval linalg_QRPT_rank : Matrix * Real64.real -> Int64.intval linalg_QRPT_rcond : Matrix * Real64.real vector * Vector -> Int32.intval linalg_COD_unpack : Matrix * Vector * Vector * Int64.int * Matrix * Matrix * Matrix -> Int32.intval linalg_COD_matZ : Matrix * Vector * Int64.int * Matrix * Vector -> Int32.intval linalg_LQ_decomp : Matrix * Vector -> Int32.intval linalg_LQ_solve_T : Matrix * Vector * Vector * Vector -> Int32.intval linalg_LQ_svx_T : Matrix * Vector * Vector -> Int32.intval linalg_LQ_lssolve_T : Matrix * Vector * Vector * Vector * Vector -> Int32.intval linalg_LQ_Lsolve_T : Matrix * Vector * Vector -> Int32.intval linalg_LQ_Lsvx_T : Matrix * Vector -> Int32.intval linalg_L_solve_T : Matrix * Vector * Vector -> Int32.intval linalg_LQ_vecQ : Matrix * Vector * Vector -> Int32.intval linalg_LQ_vecQT : Matrix * Vector * Vector -> Int32.intval linalg_LQ_unpack : Matrix * Vector * Matrix * Matrix -> Int32.intval linalg_LQ_update : Matrix * Matrix * Vector * Vector -> Int32.intval linalg_LQ_LQsolve : Matrix * Matrix * Vector * Vector -> Int32.intval linalg_cholesky_decomp : Matrix -> Int32.intval linalg_cholesky_decomp1 : Matrix -> Int32.intval linalg_cholesky_solve : Matrix * Vector * Vector -> Int32.intval linalg_cholesky_svx : Matrix * Vector -> Int32.intval linalg_cholesky_invert : Matrix -> Int32.intval linalg_cholesky_decomp_unit : Matrix * Vector -> Int32.intval linalg_cholesky_scale : Matrix * Vector -> Int32.intval linalg_cholesky_scale_apply : Matrix * Vector -> Int32.intval linalg_cholesky_decomp2 : Matrix * Vector -> Int32.intval linalg_cholesky_svx2 : Matrix * Vector * Vector -> Int32.intval linalg_cholesky_solve2 : Matrix * Vector * Vector * Vector -> Int32.intval linalg_cholesky_rcond : Matrix * Real64.real vector * Vector -> Int32.intval linalg_symmtd_decomp : Matrix * Vector -> Int32.intval linalg_symmtd_unpack : Matrix * Vector * Matrix * Vector * Vector -> Int32.intval linalg_symmtd_unpack_T : Matrix * Vector * Vector -> Int32.intval linalg_HH_solve : Matrix * Vector * Vector -> Int32.intval linalg_HH_svx : Matrix * Vector -> Int32.intval linalg_solve_symm_tridiag : Vector * Vector * Vector * Vector -> Int32.intval linalg_solve_tridiag : Vector * Vector * Vector * Vector * Vector -> Int32.intval linalg_solve_symm_cyc_tridiag : Vector * Vector * Vector * Vector -> Int32.intval linalg_solve_cyc_tridiag : Vector * Vector * Vector * Vector * Vector -> Int32.intval linalg_bidiag_decomp : Matrix * Vector * Vector -> Int32.intval linalg_bidiag_unpack : Matrix * Vector * Matrix * Vector * Matrix * Vector * Vector -> Int32.intval linalg_bidiag_unpack2 : Matrix * Vector * Vector * Matrix -> Int32.intval linalg_bidiag_unpack_B : Matrix * Vector * Vector -> Int32.intval linalg_balance_matrix : Matrix * Vector -> Int32.intval linalg_balance_accum : Matrix * Vector -> Int32.intval linalg_balance_columns : Matrix * Vector -> Int32.intval linalg_tri_upper_rcond : Matrix * Real64.real vector * Vector -> Int32.intval linalg_tri_lower_rcond : Matrix * Real64.real vector * Vector -> Int32.intval linalg_tri_upper_invert : Matrix -> Int32.intval linalg_tri_lower_invert : Matrix -> Int32.intval linalg_tri_upper_unit_invert : Matrix -> Int32.intval linalg_tri_lower_unit_invert : Matrix -> Int32.intval linalg_givens : Real64.real * Real64.real * Real64.real vector * Real64.real vector -> unitval linalg_givens_gv : Vector * Int64.int * Int64.int * Real64.real * Real64.real -> unitval eigen_gensymm_standardize : Matrix * Matrix -> Int32.intval eigen_gensymmv_alloc : Int64.int -> EigenGenSymmvWorkspaceval eigen_gensymmv_free : EigenGenSymmvWorkspace -> unitval eigen_gensymmv : Matrix * Matrix * Vector * Matrix * EigenGenSymmvWorkspace -> Int32.intval eigen_gen_alloc : Int64.int -> EigenGenWorkspaceval eigen_gen_free : EigenGenWorkspace -> unitval eigen_gen_params : Int32.int * Int32.int * Int32.int * EigenGenWorkspace -> unitval eigen_gen : Matrix * Matrix * VectorComplex * Vector * EigenGenWorkspace -> Int32.intval eigen_gen_QZ : Matrix * Matrix * VectorComplex * Vector * Matrix * Matrix * EigenGenWorkspace -> Int32.intval schur_gen_eigvals : Matrix * Matrix * Real64.real vector * Real64.real vector * Real64.real vector * Real64.real vector * Real64.real vector -> Int32.intval schur_solve_equation : Real64.real * Matrix * Real64.real * Real64.real * Real64.real * Vector * Vector * Real64.real vector * Real64.real vector * Real64.real -> Int32.intval blas_dgemv : CblasTranspose * Real64.real * Matrix * Vector * Real64.real * Vector -> Int32.intval blas_dgemm : CblasTranspose * CblasTranspose * Real64.real * Matrix * Matrix * Real64.real * Matrix -> Int32.int
Sparse
val spmatrix_alloc : Int64.int * Int64.int -> SpMatrixval spmatrix_alloc_nzmax : Int64.int * Int64.int * Int64.int * SpType -> SpMatrixval spmatrix_free : SpMatrix -> unitval spmatrix_get : SpMatrix * Int64.int * Int64.int -> Real64.realval spmatrix_set : SpMatrix * Int64.int * Int64.int * Real64.real -> Int32.intval spmatrix_set_zero : SpMatrix -> Int32.intval spmatrix_memcpy : SpMatrix * SpMatrix -> Int32.intval spmatrix_transpose_memcpy : SpMatrix * SpMatrix -> Int32.intval spmatrix_transpose : SpMatrix -> Int32.intval spmatrix_transpose2 : SpMatrix -> Int32.intval spmatrix_add : SpMatrix * SpMatrix * SpMatrix -> Int32.intval spmatrix_scale : SpMatrix * Real64.real -> Int32.intval spmatrix_nnz : SpMatrix -> Int64.intval spmatrix_d2sp : SpMatrix * Matrix -> Int32.intval spmatrix_sp2d : Matrix * SpMatrix -> Int32.intval spblas_gemv : CblasTranspose * Real64.real * SpMatrix * Vector * Real64.real * Vector -> Int32.intval spblas_dgemm : Real64.real * SpMatrix * SpMatrix * SpMatrix -> Int32.int