1 /*
2  *  gretl -- Gnu Regression, Econometrics and Time-series Library
3  *  Copyright (C) 2001 Allin Cottrell and Riccardo "Jack" Lucchetti
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #ifndef GRETL_CMATRIX_H
21 #define GRETL_CMATRIX_H
22 
23 #include <complex.h>
24 
25 #define complex_scalar(m) (m->is_complex && m->rows == 1 && m->cols == 1)
26 
27 gretl_matrix *gretl_matrix_fft (const gretl_matrix *y, int cmat, int *err);
28 
29 gretl_matrix *gretl_matrix_ffti (const gretl_matrix *y, int *err);
30 
31 gretl_matrix *gretl_cmatrix_multiply (const gretl_matrix *A,
32 				      const gretl_matrix *B,
33 				      int *err);
34 
35 gretl_matrix *gretl_cmatrix_AHB (const gretl_matrix *A,
36 				 const gretl_matrix *B,
37 				 int *err);
38 
39 gretl_matrix *gretl_cmatrix_inverse (const gretl_matrix *A, int *err);
40 
41 gretl_matrix *gretl_cmatrix_ginv (const gretl_matrix *A, int *err);
42 
43 gretl_matrix *gretl_zheev (gretl_matrix *A, int eigenvecs,
44 			   int *err);
45 
46 gretl_matrix *gretl_zgeev (const gretl_matrix *A,
47 			   gretl_matrix *VR,
48 			   gretl_matrix *VL,
49 			   int *err);
50 
51 gretl_matrix *gretl_zgees (const gretl_matrix *A,
52 			   gretl_matrix *Z,
53 			   gretl_matrix *W,
54 			   int *err);
55 
56 int gretl_cmatrix_SVD (const gretl_matrix *x, gretl_matrix **pu,
57 		       gretl_vector **ps, gretl_matrix **pvt,
58 		       int smod);
59 
60 int gretl_cmatrix_rank (const gretl_matrix *A, int *err);
61 
62 gretl_matrix *gretl_cmatrix_fft (const gretl_matrix *A, int inverse,
63 				 int *err);
64 
65 gretl_matrix *gretl_cmatrix_build (const gretl_matrix *Re,
66 				   const gretl_matrix *Im,
67 				   double x, double y,
68 				   int *err);
69 
70 gretl_matrix *gretl_cmatrix_extract (const gretl_matrix *A,
71 				     int im, int *err);
72 
73 gretl_matrix *gretl_ctrans (const gretl_matrix *A,
74 			    int conjugate, int *err);
75 
76 int gretl_ctrans_in_place (gretl_matrix *A);
77 
78 gretl_matrix *gretl_cmatrix_add_sub (const gretl_matrix *A,
79 				     const gretl_matrix *B,
80 				     int sgn, int *err);
81 
82 int apply_cmatrix_dfunc (gretl_matrix *targ,
83 			 const gretl_matrix *src,
84 			 double (*dfunc) (double complex));
85 
86 int apply_cmatrix_cfunc (gretl_matrix *targ,
87 			 const gretl_matrix *src,
88 			 double complex (*cfunc) (double complex));
89 
90 int apply_cmatrix_unary_op (gretl_matrix *targ,
91 			    const gretl_matrix *src,
92 			    int op);
93 
94 gretl_matrix *gretl_cmatrix_determinant (const gretl_matrix *X,
95 					 int log, int *err);
96 
97 gretl_matrix *gretl_cmatrix_trace (const gretl_matrix *X,
98 				   int *err);
99 
100 int gretl_cmatrix_set_diagonal (gretl_matrix *targ,
101 				const gretl_matrix *src,
102 				double x);
103 
104 int gretl_cmatrix_set_triangle (gretl_matrix *targ,
105 				const gretl_matrix *src,
106 				double x, int upper);
107 
108 gretl_matrix *gretl_cmatrix_hdprod (const gretl_matrix *A,
109 				    const gretl_matrix *B,
110 				    int *err);
111 
112 gretl_matrix *gretl_cmatrix_kronecker (const gretl_matrix *A,
113 				       const gretl_matrix *B,
114 				       int *err);
115 
116 gretl_matrix *gretl_cmatrix_switch (const gretl_matrix *m,
117 				    int to_new, int *err);
118 
119 gretl_matrix *gretl_cmatrix_vector_stat (const gretl_matrix *m,
120 					 GretlVecStat vs, int rowwise,
121 					 int *err);
122 
123 int gretl_cmatrix_fill (gretl_matrix *m, double complex z);
124 
125 gretl_matrix *gretl_cmatrix_from_scalar (double complex z, int *err);
126 
127 int gretl_cmatrix_print_range (const gretl_matrix *A,
128 			       const char *name,
129 			       int rmin, int rmax,
130 			       PRN *prn);
131 
132 int gretl_cmatrix_print (const gretl_matrix *A,
133 			 const char *name,
134 			 PRN *prn);
135 
136 int gretl_cmatrix_printf (const gretl_matrix *A,
137 			  const char *fmt,
138 			  PRN *prn);
139 
140 gretl_matrix *gretl_cmatrix_dot_op (const gretl_matrix *a,
141 				    const gretl_matrix *b,
142 				    int op, int *err);
143 
144 gretl_matrix *gretl_cmatrix_divide (const gretl_matrix *A,
145 				    const gretl_matrix *B,
146 				    GretlMatrixMod mod,
147 				    int *err);
148 
149 gretl_matrix *cmatrix_get_element (const gretl_matrix *M,
150 				   int i, int *err);
151 
152 int gretl_cmatrix_set_part (gretl_matrix *targ,
153 			    const gretl_matrix *src,
154 			    double x, int im);
155 
156 gretl_matrix *gretl_matrix_log (const gretl_matrix *A,
157 				int *err);
158 
159 gretl_matrix *gretl_cmatrix_exp (const gretl_matrix *A,
160 				 int *err);
161 
162 gretl_matrix *gretl_cmatrix_cholesky (const gretl_matrix *A,
163 				      int *err);
164 
165 gretl_matrix *gretl_cmatrix_QR_decomp (const gretl_matrix *A,
166 				       gretl_matrix *R,
167 				       int *err);
168 
169 void real_to_complex_fill (gretl_matrix *targ,
170 			   const gretl_matrix *src,
171 			   int r0, int c0);
172 
173 #endif /* GRETL_CMATRIX_H */
174