1 /** D bindings for GSL. 2 Authors: Chibisi Chima-Okereke 3 Copyright: Copyright (c) 2016, Chibisi Chima-Okereke. All rights reserved. 4 License: Boost License 1.0 5 */ 6 7 module gsl.linalg; 8 //import core.stdc.complex; 9 import gsl.mode; 10 import gsl.permutation; 11 import gsl.vector; 12 import gsl.matrix; 13 import gsl.math; 14 import gsl.complex; 15 16 extern (C): 17 18 enum gsl_linalg_matrix_mod_t 19 { 20 GSL_LINALG_MOD_NONE = 0, 21 GSL_LINALG_MOD_TRANSPOSE = 1, 22 GSL_LINALG_MOD_CONJUGATE = 2 23 } 24 25 int gsl_linalg_matmult (const(gsl_matrix)* A, const(gsl_matrix)* B, gsl_matrix* C); 26 int gsl_linalg_matmult_mod (const(gsl_matrix)* A, gsl_linalg_matrix_mod_t modA, const(gsl_matrix)* B, gsl_linalg_matrix_mod_t modB, gsl_matrix* C); 27 int gsl_linalg_exponential_ss (const(gsl_matrix)* A, gsl_matrix* eA, gsl_mode_t mode); 28 double gsl_linalg_householder_transform (gsl_vector* v); 29 gsl_complex gsl_linalg_complex_householder_transform (gsl_vector_complex* v); 30 int gsl_linalg_householder_hm (double tau, const(gsl_vector)* v, gsl_matrix* A); 31 int gsl_linalg_householder_mh (double tau, const(gsl_vector)* v, gsl_matrix* A); 32 int gsl_linalg_householder_hv (double tau, const(gsl_vector)* v, gsl_vector* w); 33 int gsl_linalg_householder_hm1 (double tau, gsl_matrix* A); 34 int gsl_linalg_complex_householder_hm (gsl_complex tau, const(gsl_vector_complex)* v, gsl_matrix_complex* A); 35 int gsl_linalg_complex_householder_mh (gsl_complex tau, const(gsl_vector_complex)* v, gsl_matrix_complex* A); 36 int gsl_linalg_complex_householder_hv (gsl_complex tau, const(gsl_vector_complex)* v, gsl_vector_complex* w); 37 int gsl_linalg_hessenberg_decomp (gsl_matrix* A, gsl_vector* tau); 38 int gsl_linalg_hessenberg_unpack (gsl_matrix* H, gsl_vector* tau, gsl_matrix* U); 39 int gsl_linalg_hessenberg_unpack_accum (gsl_matrix* H, gsl_vector* tau, gsl_matrix* U); 40 int gsl_linalg_hessenberg_set_zero (gsl_matrix* H); 41 int gsl_linalg_hessenberg_submatrix (gsl_matrix* M, gsl_matrix* A, size_t top, gsl_vector* tau); 42 int gsl_linalg_hessenberg (gsl_matrix* A, gsl_vector* tau); 43 int gsl_linalg_hesstri_decomp (gsl_matrix* A, gsl_matrix* B, gsl_matrix* U, gsl_matrix* V, gsl_vector* work); 44 int gsl_linalg_SV_decomp (gsl_matrix* A, gsl_matrix* V, gsl_vector* S, gsl_vector* work); 45 int gsl_linalg_SV_decomp_mod (gsl_matrix* A, gsl_matrix* X, gsl_matrix* V, gsl_vector* S, gsl_vector* work); 46 int gsl_linalg_SV_decomp_jacobi (gsl_matrix* A, gsl_matrix* Q, gsl_vector* S); 47 int gsl_linalg_SV_solve (const(gsl_matrix)* U, const(gsl_matrix)* Q, const(gsl_vector)* S, const(gsl_vector)* b, gsl_vector* x); 48 int gsl_linalg_SV_leverage (const(gsl_matrix)* U, gsl_vector* h); 49 int gsl_linalg_LU_decomp (gsl_matrix* A, gsl_permutation* p, int* signum); 50 int gsl_linalg_LU_solve (const(gsl_matrix)* LU, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x); 51 int gsl_linalg_LU_svx (const(gsl_matrix)* LU, const(gsl_permutation)* p, gsl_vector* x); 52 int gsl_linalg_LU_refine (const(gsl_matrix)* A, const(gsl_matrix)* LU, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x, gsl_vector* residual); 53 int gsl_linalg_LU_invert (const(gsl_matrix)* LU, const(gsl_permutation)* p, gsl_matrix* inverse); 54 double gsl_linalg_LU_det (gsl_matrix* LU, int signum); 55 double gsl_linalg_LU_lndet (gsl_matrix* LU); 56 int gsl_linalg_LU_sgndet (gsl_matrix* lu, int signum); 57 int gsl_linalg_complex_LU_decomp (gsl_matrix_complex* A, gsl_permutation* p, int* signum); 58 int gsl_linalg_complex_LU_solve (const(gsl_matrix_complex)* LU, const(gsl_permutation)* p, const(gsl_vector_complex)* b, gsl_vector_complex* x); 59 int gsl_linalg_complex_LU_svx (const(gsl_matrix_complex)* LU, const(gsl_permutation)* p, gsl_vector_complex* x); 60 int gsl_linalg_complex_LU_refine (const(gsl_matrix_complex)* A, const(gsl_matrix_complex)* LU, const(gsl_permutation)* p, const(gsl_vector_complex)* b, gsl_vector_complex* x, gsl_vector_complex* residual); 61 int gsl_linalg_complex_LU_invert (const(gsl_matrix_complex)* LU, const(gsl_permutation)* p, gsl_matrix_complex* inverse); 62 gsl_complex gsl_linalg_complex_LU_det (gsl_matrix_complex* LU, int signum); 63 double gsl_linalg_complex_LU_lndet (gsl_matrix_complex* LU); 64 gsl_complex gsl_linalg_complex_LU_sgndet (gsl_matrix_complex* LU, int signum); 65 int gsl_linalg_QR_decomp (gsl_matrix* A, gsl_vector* tau); 66 int gsl_linalg_QR_solve (const(gsl_matrix)* QR, const(gsl_vector)* tau, const(gsl_vector)* b, gsl_vector* x); 67 int gsl_linalg_QR_svx (const(gsl_matrix)* QR, const(gsl_vector)* tau, gsl_vector* x); 68 int gsl_linalg_QR_lssolve (const(gsl_matrix)* QR, const(gsl_vector)* tau, const(gsl_vector)* b, gsl_vector* x, gsl_vector* residual); 69 int gsl_linalg_QR_QRsolve (gsl_matrix* Q, gsl_matrix* R, const(gsl_vector)* b, gsl_vector* x); 70 int gsl_linalg_QR_Rsolve (const(gsl_matrix)* QR, const(gsl_vector)* b, gsl_vector* x); 71 int gsl_linalg_QR_Rsvx (const(gsl_matrix)* QR, gsl_vector* x); 72 int gsl_linalg_QR_update (gsl_matrix* Q, gsl_matrix* R, gsl_vector* w, const(gsl_vector)* v); 73 int gsl_linalg_QR_QTvec (const(gsl_matrix)* QR, const(gsl_vector)* tau, gsl_vector* v); 74 int gsl_linalg_QR_Qvec (const(gsl_matrix)* QR, const(gsl_vector)* tau, gsl_vector* v); 75 int gsl_linalg_QR_QTmat (const(gsl_matrix)* QR, const(gsl_vector)* tau, gsl_matrix* A); 76 int gsl_linalg_QR_matQ (const(gsl_matrix)* QR, const(gsl_vector)* tau, gsl_matrix* A); 77 int gsl_linalg_QR_unpack (const(gsl_matrix)* QR, const(gsl_vector)* tau, gsl_matrix* Q, gsl_matrix* R); 78 int gsl_linalg_R_solve (const(gsl_matrix)* R, const(gsl_vector)* b, gsl_vector* x); 79 int gsl_linalg_R_svx (const(gsl_matrix)* R, gsl_vector* x); 80 int gsl_linalg_QRPT_decomp (gsl_matrix* A, gsl_vector* tau, gsl_permutation* p, int* signum, gsl_vector* norm); 81 int gsl_linalg_QRPT_decomp2 (const(gsl_matrix)* A, gsl_matrix* q, gsl_matrix* r, gsl_vector* tau, gsl_permutation* p, int* signum, gsl_vector* norm); 82 int gsl_linalg_QRPT_solve (const(gsl_matrix)* QR, const(gsl_vector)* tau, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x); 83 int gsl_linalg_QRPT_svx (const(gsl_matrix)* QR, const(gsl_vector)* tau, const(gsl_permutation)* p, gsl_vector* x); 84 int gsl_linalg_QRPT_QRsolve (const(gsl_matrix)* Q, const(gsl_matrix)* R, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x); 85 int gsl_linalg_QRPT_Rsolve (const(gsl_matrix)* QR, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x); 86 int gsl_linalg_QRPT_Rsvx (const(gsl_matrix)* QR, const(gsl_permutation)* p, gsl_vector* x); 87 int gsl_linalg_QRPT_update (gsl_matrix* Q, gsl_matrix* R, const(gsl_permutation)* p, gsl_vector* u, const(gsl_vector)* v); 88 int gsl_linalg_LQ_decomp (gsl_matrix* A, gsl_vector* tau); 89 int gsl_linalg_LQ_solve_T (const(gsl_matrix)* LQ, const(gsl_vector)* tau, const(gsl_vector)* b, gsl_vector* x); 90 int gsl_linalg_LQ_svx_T (const(gsl_matrix)* LQ, const(gsl_vector)* tau, gsl_vector* x); 91 int gsl_linalg_LQ_lssolve_T (const(gsl_matrix)* LQ, const(gsl_vector)* tau, const(gsl_vector)* b, gsl_vector* x, gsl_vector* residual); 92 int gsl_linalg_LQ_Lsolve_T (const(gsl_matrix)* LQ, const(gsl_vector)* b, gsl_vector* x); 93 int gsl_linalg_LQ_Lsvx_T (const(gsl_matrix)* LQ, gsl_vector* x); 94 int gsl_linalg_L_solve_T (const(gsl_matrix)* L, const(gsl_vector)* b, gsl_vector* x); 95 int gsl_linalg_LQ_vecQ (const(gsl_matrix)* LQ, const(gsl_vector)* tau, gsl_vector* v); 96 int gsl_linalg_LQ_vecQT (const(gsl_matrix)* LQ, const(gsl_vector)* tau, gsl_vector* v); 97 int gsl_linalg_LQ_unpack (const(gsl_matrix)* LQ, const(gsl_vector)* tau, gsl_matrix* Q, gsl_matrix* L); 98 int gsl_linalg_LQ_update (gsl_matrix* Q, gsl_matrix* R, const(gsl_vector)* v, gsl_vector* w); 99 int gsl_linalg_LQ_LQsolve (gsl_matrix* Q, gsl_matrix* L, const(gsl_vector)* b, gsl_vector* x); 100 int gsl_linalg_PTLQ_decomp (gsl_matrix* A, gsl_vector* tau, gsl_permutation* p, int* signum, gsl_vector* norm); 101 int gsl_linalg_PTLQ_decomp2 (const(gsl_matrix)* A, gsl_matrix* q, gsl_matrix* r, gsl_vector* tau, gsl_permutation* p, int* signum, gsl_vector* norm); 102 int gsl_linalg_PTLQ_solve_T (const(gsl_matrix)* QR, const(gsl_vector)* tau, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x); 103 int gsl_linalg_PTLQ_svx_T (const(gsl_matrix)* LQ, const(gsl_vector)* tau, const(gsl_permutation)* p, gsl_vector* x); 104 int gsl_linalg_PTLQ_LQsolve_T (const(gsl_matrix)* Q, const(gsl_matrix)* L, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x); 105 int gsl_linalg_PTLQ_Lsolve_T (const(gsl_matrix)* LQ, const(gsl_permutation)* p, const(gsl_vector)* b, gsl_vector* x); 106 int gsl_linalg_PTLQ_Lsvx_T (const(gsl_matrix)* LQ, const(gsl_permutation)* p, gsl_vector* x); 107 int gsl_linalg_PTLQ_update (gsl_matrix* Q, gsl_matrix* L, const(gsl_permutation)* p, const(gsl_vector)* v, gsl_vector* w); 108 int gsl_linalg_cholesky_decomp (gsl_matrix* A); 109 int gsl_linalg_cholesky_solve (const(gsl_matrix)* cholesky, const(gsl_vector)* b, gsl_vector* x); 110 int gsl_linalg_cholesky_svx (const(gsl_matrix)* cholesky, gsl_vector* x); 111 int gsl_linalg_cholesky_invert (gsl_matrix* cholesky); 112 int gsl_linalg_cholesky_decomp_unit (gsl_matrix* A, gsl_vector* D); 113 int gsl_linalg_complex_cholesky_decomp (gsl_matrix_complex* A); 114 int gsl_linalg_complex_cholesky_solve (const(gsl_matrix_complex)* cholesky, const(gsl_vector_complex)* b, gsl_vector_complex* x); 115 int gsl_linalg_complex_cholesky_svx (const(gsl_matrix_complex)* cholesky, gsl_vector_complex* x); 116 int gsl_linalg_complex_cholesky_invert (gsl_matrix_complex* cholesky); 117 int gsl_linalg_symmtd_decomp (gsl_matrix* A, gsl_vector* tau); 118 int gsl_linalg_symmtd_unpack (const(gsl_matrix)* A, const(gsl_vector)* tau, gsl_matrix* Q, gsl_vector* diag, gsl_vector* subdiag); 119 int gsl_linalg_symmtd_unpack_T (const(gsl_matrix)* A, gsl_vector* diag, gsl_vector* subdiag); 120 int gsl_linalg_hermtd_decomp (gsl_matrix_complex* A, gsl_vector_complex* tau); 121 int gsl_linalg_hermtd_unpack (const(gsl_matrix_complex)* A, const(gsl_vector_complex)* tau, gsl_matrix_complex* U, gsl_vector* diag, gsl_vector* sudiag); 122 int gsl_linalg_hermtd_unpack_T (const(gsl_matrix_complex)* A, gsl_vector* diag, gsl_vector* subdiag); 123 int gsl_linalg_HH_solve (gsl_matrix* A, const(gsl_vector)* b, gsl_vector* x); 124 int gsl_linalg_HH_svx (gsl_matrix* A, gsl_vector* x); 125 int gsl_linalg_solve_symm_tridiag (const(gsl_vector)* diag, const(gsl_vector)* offdiag, const(gsl_vector)* b, gsl_vector* x); 126 int gsl_linalg_solve_tridiag (const(gsl_vector)* diag, const(gsl_vector)* abovediag, const(gsl_vector)* belowdiag, const(gsl_vector)* b, gsl_vector* x); 127 int gsl_linalg_solve_symm_cyc_tridiag (const(gsl_vector)* diag, const(gsl_vector)* offdiag, const(gsl_vector)* b, gsl_vector* x); 128 int gsl_linalg_solve_cyc_tridiag (const(gsl_vector)* diag, const(gsl_vector)* abovediag, const(gsl_vector)* belowdiag, const(gsl_vector)* b, gsl_vector* x); 129 int gsl_linalg_bidiag_decomp (gsl_matrix* A, gsl_vector* tau_U, gsl_vector* tau_V); 130 int gsl_linalg_bidiag_unpack (const(gsl_matrix)* A, const(gsl_vector)* tau_U, gsl_matrix* U, const(gsl_vector)* tau_V, gsl_matrix* V, gsl_vector* diag, gsl_vector* superdiag); 131 int gsl_linalg_bidiag_unpack2 (gsl_matrix* A, gsl_vector* tau_U, gsl_vector* tau_V, gsl_matrix* V); 132 int gsl_linalg_bidiag_unpack_B (const(gsl_matrix)* A, gsl_vector* diag, gsl_vector* superdiag); 133 int gsl_linalg_balance_matrix (gsl_matrix* A, gsl_vector* D); 134 int gsl_linalg_balance_accum (gsl_matrix* A, gsl_vector* D); 135 int gsl_linalg_balance_columns (gsl_matrix* A, gsl_vector* D); 136 void gsl_linalg_givens (const double a, const double b, double* c, double* s); 137 void gsl_linalg_givens_gv (gsl_vector* v, const size_t i, const size_t j, const double c, const double s);