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_MATRIX_H 21 #define GRETL_MATRIX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 #include <stdarg.h> 28 #include <complex.h> 29 30 /* minimum value of diagonal element of R (as in X = QR) that counts 31 as non-zero for the purpose of determining the rank of X */ 32 33 #define R_DIAG_MIN 1.0e-8 34 35 typedef enum { 36 GRETL_MOD_NONE = 0, 37 GRETL_MOD_TRANSPOSE, 38 GRETL_MOD_SQUARE, 39 GRETL_MOD_CUMULATE, 40 GRETL_MOD_DECREMENT, 41 GRETL_MOD_CTRANSP 42 } GretlMatrixMod; 43 44 typedef enum { 45 GRETL_MATRIX_SQUARE = 1, 46 GRETL_MATRIX_LOWER_TRIANGULAR, 47 GRETL_MATRIX_UPPER_TRIANGULAR, 48 GRETL_MATRIX_SYMMETRIC, 49 GRETL_MATRIX_DIAGONAL, 50 GRETL_MATRIX_IDENTITY, 51 GRETL_MATRIX_SCALAR, 52 } GretlMatrixStructure; 53 54 typedef enum { 55 V_SUM, 56 V_PROD, 57 V_MEAN 58 } GretlVecStat; 59 60 typedef enum { 61 CONF_NONE = 0, 62 CONF_ELEMENTS, 63 CONF_A_COLVEC, 64 CONF_B_COLVEC, 65 CONF_A_ROWVEC, 66 CONF_B_ROWVEC, 67 CONF_A_SCALAR, 68 CONF_B_SCALAR, 69 CONF_AC_BR, 70 CONF_AR_BC 71 } ConfType; 72 73 typedef struct gretl_matrix_ gretl_vector; 74 75 typedef struct matrix_info_ matrix_info; 76 77 /** 78 * gretl_matrix: 79 * @rows: number of rows in matrix 80 * @cols: number of columns 81 * @val: flat array of double-precision values 82 * 83 * The basic libgretl matrix type; #gretl_vector is an alias 84 * that can be used for matrices with @rows or @cols = 1. 85 */ 86 87 typedef struct gretl_matrix_ { 88 int rows; 89 int cols; 90 double *val; 91 double _Complex *z; /* was "complex" */ 92 int is_complex; 93 /*< private >*/ 94 matrix_info *info; 95 } gretl_matrix; 96 97 typedef struct gretl_matrix_block_ gretl_matrix_block; 98 99 /** 100 * gretl_matrix_get: 101 * @m: matrix. 102 * @i: row. 103 * @j: column. 104 * 105 * Returns: the @i, @j element of @m. 106 */ 107 108 #define gretl_matrix_get(m,i,j) (m->val[(j)*m->rows+(i)]) 109 #define gretl_cmatrix_get(m,i,j) (m->z[(j)*m->rows+(i)]) 110 111 /** 112 * gretl_vector_get: 113 * @v: vector. 114 * @i: index. 115 * 116 * Returns: element @i of @v. 117 */ 118 119 #define gretl_vector_get(v,i) (v->val[i]) 120 121 /** 122 * gretl_matrix_set: 123 * @m: matrix. 124 * @i: row. 125 * @j: column. 126 * @x: value to set. 127 * 128 * Sets the @i, @j element of @m to @x. 129 */ 130 131 #define gretl_matrix_set(m,i,j,x) ((m)->val[(j)*(m)->rows+(i)]=x) 132 #define gretl_cmatrix_set(m,i,j,x) ((m)->z[(j)*(m)->rows+(i)]=x) 133 134 /** 135 * gretl_vector_set: 136 * @v: vector. 137 * @i: index. 138 * @x: value to set. 139 * 140 * Sets element @i of @v to @x. 141 */ 142 143 #define gretl_vector_set(v,i,x) ((v)->val[i]=x) 144 145 /** 146 * gretl_matrix_cols: 147 * @m: matrix to query. 148 * 149 * Returns: the number of columns in @m. 150 */ 151 152 #define gretl_matrix_cols(m) ((m == NULL)? 0 : m->cols) 153 154 /** 155 * gretl_matrix_rows: 156 * @m: matrix to query. 157 * 158 * Returns: the number of rows in @m. 159 */ 160 161 #define gretl_matrix_rows(m) ((m == NULL)? 0 : m->rows) 162 163 /** 164 * gretl_vector_get_length: 165 * @v: vector to examine. 166 * 167 * Returns: the length of vector @v (without regard to whether 168 * it is a row or column vector). 169 */ 170 171 #define gretl_vector_get_length(v) ((v == NULL)? 0 : \ 172 ((v)->cols == 1)? (v)->rows : \ 173 ((v)->rows == 1)? (v)->cols : 0) 174 175 /** 176 * gretl_vector_alloc: 177 * @i: number of columns. 178 * 179 * Returns: a new #gretl_vector with @i columns. 180 */ 181 182 #define gretl_vector_alloc(i) gretl_matrix_alloc(1,(i)) 183 184 /** 185 * gretl_column_vector_alloc: 186 * @i: number of rows. 187 * 188 * Returns: a new column gretl_vector with @i rows. 189 */ 190 191 #define gretl_column_vector_alloc(i) gretl_matrix_alloc((i),1) 192 193 /** 194 * gretl_vector_free: 195 * @v: %gretl_vector to free. 196 * 197 * Frees the vector @v and its associated storage. 198 */ 199 200 #define gretl_vector_free(v) gretl_matrix_free(v) 201 202 /** 203 * gretl_matrix_is_scalar: 204 * @m: matrix to test. 205 * 206 * Returns: 1 if @m is 1 x 1, else 0. 207 */ 208 209 #define gretl_matrix_is_scalar(m) ((m) != NULL && \ 210 (m)->is_complex == 0 && \ 211 (m)->rows == 1 && \ 212 (m)->cols == 1) 213 214 #define gretl_matrix_is_cscalar(m) ((m) != NULL && \ 215 (m)->is_complex && \ 216 (m)->rows == 1 && \ 217 (m)->cols == 1) 218 219 #define gretl_is_null_matrix(m) (m == NULL || m->rows == 0 || m->cols == 0) 220 221 #define gretl_is_complex(m) (m != NULL && m->is_complex == 1) 222 223 int gretl_matrix_set_complex (gretl_matrix *m, int c); 224 225 int gretl_matrix_set_complex_full (gretl_matrix *m, int c); 226 227 int get_gretl_matrix_err (void); 228 229 void clear_gretl_matrix_err (void); 230 231 void gretl_matrix_print (const gretl_matrix *m, const char *msg); 232 233 int gretl_matrix_na_check (const gretl_matrix *m); 234 235 int gretl_matrix_is_symmetric (const gretl_matrix *m); 236 237 int gretl_matrix_is_idempotent (const gretl_matrix *m, double tol); 238 239 void gretl_matrix_xtr_symmetric (gretl_matrix *m); 240 241 void gretl_matrix_set_equals_tolerance (double tol); 242 243 void gretl_matrix_unset_equals_tolerance (void); 244 245 gretl_matrix *gretl_matrix_alloc (int rows, int cols); 246 247 gretl_matrix *gretl_cmatrix_new (int r, int c); 248 249 gretl_matrix *gretl_cmatrix_new0 (int r, int c); 250 251 gretl_matrix *gretl_matching_matrix_new (int r, int c, 252 const gretl_matrix *m); 253 254 gretl_matrix *gretl_matrix_reuse (gretl_matrix *m, int rows, int cols); 255 256 int gretl_matrix_realloc (gretl_matrix *m, int rows, int cols); 257 258 gretl_matrix *gretl_matrix_init (gretl_matrix *m); 259 260 gretl_matrix *gretl_matrix_init_full (gretl_matrix *m, 261 int rows, int cols, 262 double *val); 263 264 gretl_matrix *gretl_matrix_replace (gretl_matrix **pa, 265 gretl_matrix *b); 266 267 int gretl_matrix_replace_content (gretl_matrix *targ, 268 gretl_matrix *donor); 269 270 void gretl_matrix_block_destroy (gretl_matrix_block *B); 271 272 void gretl_matrix_block_zero (gretl_matrix_block *B); 273 274 gretl_matrix_block *gretl_matrix_block_new (gretl_matrix **pm, ...); 275 276 int gretl_matrix_block_n_matrices (gretl_matrix_block *B); 277 278 gretl_matrix *gretl_matrix_block_get_matrix (gretl_matrix_block *B, 279 int i); 280 281 gretl_matrix *gretl_identity_matrix_new (int n); 282 283 gretl_matrix *gretl_DW_matrix_new (int n); 284 285 gretl_matrix *gretl_zero_matrix_new (int r, int c); 286 287 gretl_matrix *gretl_unit_matrix_new (int r, int c); 288 289 gretl_matrix *gretl_null_matrix_new (void); 290 291 gretl_matrix *gretl_matrix_seq (double start, double end, 292 double step, int *err); 293 294 gretl_matrix *gretl_matrix_copy (const gretl_matrix *m); 295 296 int gretl_matrix_copy_row (gretl_matrix *dest, int di, 297 const gretl_matrix *src, int si); 298 299 int gretl_matrix_inscribe_I (gretl_matrix *m, int row, int col, int n); 300 301 gretl_matrix *gretl_matrix_copy_transpose (const gretl_matrix *m); 302 303 gretl_matrix *gretl_matrix_reverse_rows (const gretl_matrix *m, int *err); 304 305 gretl_matrix *gretl_matrix_reverse_cols (const gretl_matrix *m, int *err); 306 307 gretl_matrix *gretl_matrix_get_diagonal (const gretl_matrix *m, int *err); 308 309 int gretl_matrix_set_diagonal (gretl_matrix *targ, 310 const gretl_matrix *src, 311 double x); 312 313 gretl_matrix *gretl_matrix_get_triangle (const gretl_matrix *m, 314 int upper, int *err); 315 316 int gretl_matrix_set_triangle (gretl_matrix *targ, 317 const gretl_matrix *src, 318 double x, int upper); 319 320 int gretl_matrix_get_row (const gretl_matrix *m, int i, gretl_vector *v); 321 322 double gretl_matrix_trace (const gretl_matrix *m); 323 324 int gretl_matrix_random_fill (gretl_matrix *m, int dist); 325 326 gretl_matrix *gretl_random_matrix_new (int r, int c, int dist); 327 328 gretl_matrix *gretl_matrix_resample (const gretl_matrix *m, 329 int draws, int *err); 330 331 int gretl_matrix_resample2 (gretl_matrix *targ, 332 const gretl_matrix *src); 333 334 gretl_matrix *gretl_matrix_block_resample (const gretl_matrix *m, 335 int blocklen, int draws, 336 int *err); 337 338 int gretl_matrix_block_resample2 (gretl_matrix *targ, 339 const gretl_matrix *src, 340 int blocklen, int *z); 341 342 double gretl_vector_mean (const gretl_vector *v); 343 344 double gretl_vector_variance (const gretl_vector *v); 345 346 void gretl_matrix_zero (gretl_matrix *m); 347 348 int gretl_matrix_zero_upper (gretl_matrix *m); 349 350 int gretl_matrix_zero_lower (gretl_matrix *m); 351 352 int gretl_matrix_mirror (gretl_matrix *m, char uplo); 353 354 void gretl_matrix_fill (gretl_matrix *m, double x); 355 356 void gretl_matrix_multiply_by_scalar (gretl_matrix *m, double x); 357 358 int gretl_matrix_divide_by_scalar (gretl_matrix *m, double x); 359 360 void gretl_matrix_switch_sign (gretl_matrix *m); 361 362 gretl_matrix *gretl_matrix_dot_op (const gretl_matrix *a, 363 const gretl_matrix *b, 364 int op, int *err); 365 366 ConfType dot_operator_conf (const gretl_matrix *A, 367 const gretl_matrix *B, 368 int *r, int *c); 369 370 gretl_matrix *gretl_matrix_complex_multiply (const gretl_matrix *a, 371 const gretl_matrix *b, 372 int force_complex, 373 int *err); 374 375 gretl_matrix *gretl_matrix_divide (const gretl_matrix *a, 376 const gretl_matrix *b, 377 GretlMatrixMod mod, 378 int *err); 379 380 gretl_matrix *gretl_matrix_complex_divide (const gretl_matrix *a, 381 const gretl_matrix *b, 382 int force_complex, 383 int *err); 384 385 gretl_matrix *gretl_matrix_exp (const gretl_matrix *m, int *err); 386 387 gretl_matrix *gretl_matrix_polroots (const gretl_matrix *a, 388 int force_complex, 389 int *err); 390 391 void gretl_matrix_raise (gretl_matrix *m, double x); 392 393 void gretl_matrix_free (gretl_matrix *m); 394 395 double *gretl_matrix_steal_data (gretl_matrix *m); 396 397 int gretl_vector_copy_values (gretl_vector *targ, 398 const gretl_vector *src); 399 400 int gretl_matrix_copy_values (gretl_matrix *targ, 401 const gretl_matrix *src); 402 403 int gretl_matrix_copy_data (gretl_matrix *targ, 404 const gretl_matrix *src); 405 406 int gretl_matrix_copy_values_shaped (gretl_matrix *targ, 407 const gretl_matrix *src); 408 409 int gretl_matrix_add_to (gretl_matrix *targ, const gretl_matrix *src); 410 411 int gretl_matrix_add (const gretl_matrix *a, const gretl_matrix *b, 412 gretl_matrix *c); 413 414 int gretl_matrix_add_transpose_to (gretl_matrix *targ, 415 const gretl_matrix *src); 416 417 int 418 gretl_matrix_subtract_from (gretl_matrix *targ, const gretl_matrix *src); 419 420 int 421 gretl_matrix_subtract (const gretl_matrix *a, const gretl_matrix *b, 422 gretl_matrix *c); 423 424 int 425 gretl_matrix_subtract_reversed (const gretl_matrix *a, gretl_matrix *b); 426 427 int gretl_matrix_I_minus (gretl_matrix *m); 428 429 int gretl_matrix_transpose_in_place (gretl_matrix *m); 430 431 int gretl_matrix_transpose (gretl_matrix *targ, const gretl_matrix *src); 432 433 int gretl_square_matrix_transpose (gretl_matrix *m); 434 435 int gretl_matrix_add_self_transpose (gretl_matrix *m); 436 437 int 438 gretl_matrix_vectorize (gretl_matrix *targ, const gretl_matrix *src); 439 440 gretl_matrix *gretl_matrix_vectorize_new (const gretl_matrix *m); 441 442 int 443 gretl_matrix_unvectorize (gretl_matrix *targ, const gretl_matrix *src); 444 445 int 446 gretl_matrix_vectorize_h (gretl_matrix *targ, const gretl_matrix *src); 447 448 int 449 gretl_matrix_unvectorize_h (gretl_matrix *targ, const gretl_matrix *src); 450 451 int gretl_matrix_inscribe_matrix (gretl_matrix *targ, 452 const gretl_matrix *src, 453 int row, int col, 454 GretlMatrixMod mod); 455 456 int gretl_matrix_extract_matrix (gretl_matrix *targ, 457 const gretl_matrix *src, 458 int row, int col, 459 GretlMatrixMod mod); 460 461 int gretl_matrix_multiply_mod (const gretl_matrix *a, GretlMatrixMod amod, 462 const gretl_matrix *b, GretlMatrixMod bmod, 463 gretl_matrix *c, GretlMatrixMod cmod); 464 465 int gretl_matrix_multiply_mod_single (const gretl_matrix *a, 466 GretlMatrixMod amod, 467 const gretl_matrix *b, 468 GretlMatrixMod bmod, 469 gretl_matrix *c, 470 GretlMatrixMod cmod); 471 472 int gretl_matrix_multiply (const gretl_matrix *a, 473 const gretl_matrix *b, 474 gretl_matrix *c); 475 476 int gretl_matrix_multiply_single (const gretl_matrix *a, 477 const gretl_matrix *b, 478 gretl_matrix *c); 479 480 gretl_matrix *gretl_matrix_multiply_new (const gretl_matrix *a, 481 const gretl_matrix *b, 482 int *err); 483 484 int 485 gretl_matrix_kronecker_product (const gretl_matrix *A, 486 const gretl_matrix *B, 487 gretl_matrix *K); 488 489 gretl_matrix * 490 gretl_matrix_kronecker_product_new (const gretl_matrix *A, 491 const gretl_matrix *B, 492 int *err); 493 494 int gretl_matrix_hdproduct (const gretl_matrix *A, 495 const gretl_matrix *B, 496 gretl_matrix *C); 497 498 gretl_matrix * 499 gretl_matrix_hdproduct_new (const gretl_matrix *A, 500 const gretl_matrix *B, 501 int *err); 502 503 504 int 505 gretl_matrix_I_kronecker (int p, const gretl_matrix *B, 506 gretl_matrix *K); 507 508 gretl_matrix * 509 gretl_matrix_I_kronecker_new (int p, const gretl_matrix *B, int *err); 510 511 int 512 gretl_matrix_kronecker_I (const gretl_matrix *A, int r, 513 gretl_matrix *K); 514 515 gretl_matrix * 516 gretl_matrix_kronecker_I_new (const gretl_matrix *A, int r, int *err); 517 518 gretl_matrix *gretl_matrix_pow (const gretl_matrix *A, 519 double s, int *err); 520 521 double gretl_matrix_dot_product (const gretl_matrix *a, GretlMatrixMod amod, 522 const gretl_matrix *b, GretlMatrixMod bmod, 523 int *err); 524 525 double gretl_vector_dot_product (const gretl_vector *a, const gretl_vector *b, 526 int *err); 527 528 gretl_matrix *gretl_rmatrix_vector_stat (const gretl_matrix *m, 529 GretlVecStat vs, int rowwise, 530 int *err); 531 532 gretl_matrix *gretl_matrix_column_sd (const gretl_matrix *m, int *err); 533 534 gretl_matrix *gretl_matrix_column_sd2 (const gretl_matrix *m, 535 int df, int *err); 536 537 void gretl_matrix_demean_by_row (gretl_matrix *m); 538 539 int gretl_matrix_standardize (gretl_matrix *m, int dfcorr); 540 541 int gretl_matrix_center (gretl_matrix *m); 542 543 gretl_matrix *gretl_matrix_quantiles (const gretl_matrix *m, 544 const gretl_matrix *p, 545 int *err); 546 547 double gretl_matrix_determinant (gretl_matrix *a, int *err); 548 549 double gretl_matrix_log_determinant (gretl_matrix *a, int *err); 550 551 double gretl_matrix_log_abs_determinant (gretl_matrix *a, int *err); 552 553 double gretl_vcv_log_determinant (const gretl_matrix *m, int *err); 554 555 double gretl_matrix_one_norm (const gretl_matrix *m); 556 557 double gretl_matrix_infinity_norm (const gretl_matrix *m); 558 559 int gretl_LU_solve (gretl_matrix *a, gretl_matrix *b); 560 561 int gretl_LU_solve_invert (gretl_matrix *a, gretl_matrix *b); 562 563 int gretl_cholesky_decomp_solve (gretl_matrix *a, gretl_matrix *b); 564 565 int gretl_cholesky_solve (const gretl_matrix *a, gretl_vector *b); 566 567 int gretl_cholesky_invert (gretl_matrix *a); 568 569 gretl_vector *gretl_toeplitz_solve (const gretl_vector *c, 570 const gretl_vector *r, 571 const gretl_vector *b, 572 int *err); 573 574 gretl_matrix *gretl_matrix_XTX_new (const gretl_matrix *X); 575 576 int gretl_inverse_from_cholesky_decomp (gretl_matrix *targ, 577 const gretl_matrix *src); 578 579 int gretl_invert_general_matrix (gretl_matrix *a); 580 581 int gretl_invert_symmetric_indef_matrix (gretl_matrix *a); 582 583 int gretl_invert_symmetric_matrix (gretl_matrix *a); 584 585 int gretl_invert_symmetric_matrix2 (gretl_matrix *a, double *ldet); 586 587 int gretl_invert_packed_symmetric_matrix (gretl_matrix *v); 588 589 int gretl_invert_triangular_matrix (gretl_matrix *a, char uplo); 590 591 int gretl_invert_diagonal_matrix (gretl_matrix *a); 592 593 int gretl_invert_matrix (gretl_matrix *a); 594 595 int gretl_matrix_moore_penrose (gretl_matrix *A); 596 597 int gretl_SVD_invert_matrix (gretl_matrix *a); 598 599 int gretl_invpd (gretl_matrix *a); 600 601 int gretl_matrix_SVD (const gretl_matrix *a, gretl_matrix **pu, 602 gretl_vector **ps, gretl_matrix **pvt, 603 int full); 604 605 double gretl_symmetric_matrix_rcond (const gretl_matrix *m, int *err); 606 607 double gretl_matrix_rcond (const gretl_matrix *m, int *err); 608 609 double gretl_matrix_cond_index (const gretl_matrix *m, int *err); 610 611 int gretl_symmetric_eigen_sort (gretl_matrix *evals, gretl_matrix *evecs, 612 int rank); 613 614 gretl_matrix * 615 gretl_general_matrix_eigenvals (const gretl_matrix *m, int *err); 616 617 gretl_matrix * 618 gretl_symmetric_matrix_eigenvals (gretl_matrix *m, 619 int eigenvecs, 620 int *err); 621 622 gretl_matrix * 623 gretl_symm_matrix_eigenvals_descending (gretl_matrix *m, 624 int eigenvecs, 625 int *err); 626 627 gretl_matrix * 628 gretl_gensymm_eigenvals (const gretl_matrix *A, 629 const gretl_matrix *B, 630 gretl_matrix *V, 631 int *err); 632 633 gretl_matrix *gretl_dgeev (const gretl_matrix *A, 634 gretl_matrix *VR, 635 gretl_matrix *VL, 636 int *err); 637 638 gretl_matrix *old_eigengen (const gretl_matrix *m, 639 gretl_matrix *VR, 640 gretl_matrix *VL, 641 int *err); 642 643 double gretl_symm_matrix_lambda_min (const gretl_matrix *m, int *err); 644 645 double gretl_symm_matrix_lambda_max (const gretl_matrix *m, int *err); 646 647 gretl_matrix *gretl_matrix_right_nullspace (const gretl_matrix *M, 648 int *err); 649 650 gretl_matrix *gretl_matrix_left_nullspace (const gretl_matrix *M, 651 GretlMatrixMod mod, 652 int *err); 653 654 gretl_matrix * 655 gretl_matrix_row_concat (const gretl_matrix *a, const gretl_matrix *b, 656 int *err); 657 658 gretl_matrix * 659 gretl_matrix_col_concat (const gretl_matrix *a, const gretl_matrix *b, 660 int *err); 661 662 gretl_matrix *gretl_matrix_direct_sum (const gretl_matrix *a, 663 const gretl_matrix *b, 664 int *err); 665 666 int 667 gretl_matrix_inplace_colcat (gretl_matrix *a, const gretl_matrix *b, 668 const char *mask); 669 670 gretl_matrix *gretl_matrix_cumcol (const gretl_matrix *m, int *err); 671 672 gretl_matrix *gretl_matrix_diffcol (const gretl_matrix *m, 673 double missval, int *err); 674 675 gretl_matrix *gretl_matrix_lag (const gretl_matrix *m, 676 const gretl_vector *k, 677 gretlopt opt, 678 double missval); 679 680 int gretl_matrix_inplace_lag (gretl_matrix *targ, 681 const gretl_matrix *src, 682 int k); 683 684 int gretl_matrix_cholesky_decomp (gretl_matrix *a); 685 686 int gretl_matrix_psd_root (gretl_matrix *a, int check); 687 688 int gretl_matrix_QR_decomp (gretl_matrix *M, 689 gretl_matrix *R); 690 691 int gretl_matrix_QR_pivot_decomp (gretl_matrix *M, 692 gretl_matrix *R, 693 int **order); 694 695 int gretl_check_QR_rank (const gretl_matrix *R, 696 int *err, 697 double *rcnd); 698 699 int gretl_matrix_rank (const gretl_matrix *a, int *err); 700 701 int gretl_matrix_ols (const gretl_vector *y, 702 const gretl_matrix *X, 703 gretl_vector *b, 704 gretl_matrix *vcv, 705 gretl_vector *uhat, 706 double *s2); 707 708 int gretl_matrix_multi_ols (const gretl_matrix *Y, 709 const gretl_matrix *X, 710 gretl_matrix *B, 711 gretl_matrix *E, 712 gretl_matrix **XTXi); 713 714 int gretl_matrix_multi_SVD_ols (const gretl_matrix *Y, 715 const gretl_matrix *X, 716 gretl_matrix *B, 717 gretl_matrix *E, 718 gretl_matrix **XTXi); 719 720 int gretl_matrix_QR_ols (const gretl_matrix *Y, 721 const gretl_matrix *X, 722 gretl_matrix *B, 723 gretl_matrix *E, 724 gretl_matrix **XTXi, 725 gretl_matrix **Qout); 726 727 double gretl_matrix_r_squared (const gretl_matrix *y, 728 const gretl_matrix *X, 729 const gretl_matrix *b, 730 int *err); 731 732 int gretl_matrix_SVD_johansen_solve (const gretl_matrix *R0, 733 const gretl_matrix *R1, 734 gretl_matrix *evals, 735 gretl_matrix *B, 736 gretl_matrix *A, 737 int jrank); 738 739 int 740 gretl_matrix_restricted_ols (const gretl_vector *y, 741 const gretl_matrix *X, 742 const gretl_matrix *R, 743 const gretl_vector *q, 744 gretl_vector *b, 745 gretl_matrix *vcv, 746 gretl_vector *uhat, 747 double *s2); 748 749 int 750 gretl_matrix_restricted_multi_ols (const gretl_matrix *Y, 751 const gretl_matrix *X, 752 const gretl_matrix *R, 753 const gretl_matrix *q, 754 gretl_matrix *B, 755 gretl_matrix *U, 756 gretl_matrix **W); 757 758 int gretl_matrix_SVD_ols (const gretl_vector *y, 759 const gretl_matrix *X, 760 gretl_vector *b, 761 gretl_matrix *vcv, 762 gretl_vector *uhat, 763 double *s2); 764 765 int gretl_matrix_qform (const gretl_matrix *A, 766 GretlMatrixMod amod, 767 const gretl_matrix *X, 768 gretl_matrix *C, 769 GretlMatrixMod cmod); 770 771 double gretl_scalar_qform (const gretl_vector *b, 772 const gretl_matrix *X, 773 int *err); 774 775 int gretl_matrix_columnwise_product (const gretl_matrix *A, 776 const gretl_matrix *B, 777 const gretl_matrix *S, 778 gretl_matrix *C); 779 780 int 781 gretl_matrix_diagonal_sandwich (const gretl_vector *d, 782 const gretl_matrix *X, 783 gretl_matrix *DXD); 784 785 int gretl_matrix_set_t1 (gretl_matrix *m, int t); 786 787 int gretl_matrix_set_t2 (gretl_matrix *m, int t); 788 789 int gretl_matrix_get_t1 (const gretl_matrix *m); 790 791 int gretl_matrix_get_t2 (const gretl_matrix *m); 792 793 int gretl_matrix_is_dated (const gretl_matrix *m); 794 795 int gretl_is_identity_matrix (const gretl_matrix *m); 796 797 int gretl_is_zero_matrix (const gretl_matrix *m); 798 799 gretl_matrix *gretl_matrix_isfinite (const gretl_matrix *m, int *err); 800 801 int gretl_matrix_get_structure (const gretl_matrix *m); 802 803 int gretl_matrices_are_equal (const gretl_matrix *a, 804 const gretl_matrix *b, 805 double tol, int *err); 806 807 gretl_matrix *gretl_covariance_matrix (const gretl_matrix *m, 808 int corr, int dfc, 809 int *err); 810 811 gretl_matrix *gretl_matrix_GG_inverse (const gretl_matrix *G, 812 int *err); 813 814 gretl_matrix *gretl_matrix_varsimul (const gretl_matrix *A, 815 const gretl_matrix *U, 816 const gretl_matrix *x0, 817 int *err); 818 819 gretl_matrix **gretl_matrix_array_new (int n); 820 821 gretl_matrix ** 822 gretl_matrix_array_new_with_size (int n, int rows, int cols); 823 824 void gretl_matrix_array_free (gretl_matrix **A, int n); 825 826 gretl_matrix *gretl_matrix_values (const double *x, int n, 827 gretlopt opt, int *err); 828 829 gretl_matrix *gretl_matrix_shape (const gretl_matrix *A, 830 int r, int c, int *err); 831 832 gretl_matrix *gretl_matrix_trim_rows (const gretl_matrix *A, 833 int ttop, int tbot, 834 int *err); 835 836 gretl_matrix *gretl_matrix_minmax (const gretl_matrix *A, 837 int mm, int rc, int idx, 838 int *err); 839 840 double gretl_matrix_global_minmax (const gretl_matrix *A, 841 int mm, int *err); 842 843 double gretl_matrix_global_sum (const gretl_matrix *A, 844 int *err); 845 846 gretl_matrix *gretl_matrix_pca (const gretl_matrix *X, int p, 847 gretlopt opt, int *err); 848 849 gretl_matrix *gretl_matrix_xtab (int t1, int t2, const double *x, 850 const double *y, int *err); 851 852 gretl_matrix *matrix_matrix_xtab (const gretl_matrix *x, 853 const gretl_matrix *y, 854 int *err); 855 856 gretl_matrix *gretl_matrix_bool_sel(const gretl_matrix *A, 857 const gretl_matrix *sel, 858 int rowsel, int *err); 859 860 gretl_matrix *gretl_matrix_sort_by_column (const gretl_matrix *m, 861 int k, int *err); 862 863 gretl_matrix *gretl_vector_sort (const gretl_matrix *v, 864 int descending, 865 int *err); 866 867 gretl_matrix *gretl_matrix_covariogram (const gretl_matrix *X, 868 const gretl_matrix *u, 869 const gretl_matrix *w, 870 int p, int *err); 871 872 void gretl_matrix_transcribe_obs_info (gretl_matrix *targ, 873 const gretl_matrix *src); 874 875 int gretl_matrix_set_colnames (gretl_matrix *m, char **S); 876 877 int gretl_matrix_set_rownames (gretl_matrix *m, char **S); 878 879 const char **gretl_matrix_get_colnames (const gretl_matrix *m); 880 881 const char **gretl_matrix_get_rownames (const gretl_matrix *m); 882 883 void gretl_matrix_destroy_info (gretl_matrix *m); 884 885 void lapack_mem_free (void); 886 887 void set_blas_mnk_min (int mnk); 888 889 int get_blas_mnk_min (void); 890 891 void set_simd_k_max (int k); 892 893 int get_simd_k_max (void); 894 895 void set_simd_mn_min (int mn); 896 897 int get_simd_mn_min (void); 898 899 #ifdef __cplusplus 900 } 901 #endif 902 903 #endif /* GRETL_MATRIX_H */ 904