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);