Main Page   Modules   Compound List   File List   Compound Members   File Members  

mat_gen.h

Go to the documentation of this file.
00001 
00014 /* This library is free software; you can redistribute it and/or
00015    modify it under the terms of the GNU Lesser General Public
00016    License as published by the Free Software Foundation; either
00017    version 2.1 of the License, or (at your option) any later version.
00018 
00019    This library is distributed in the hope that it will be useful,
00020    but WITHOUT ANY WARRANTY; without even the implied warranty of
00021    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022    Lesser General Public License for more details.
00023 
00024    You should have received a copy of the GNU Lesser General Public
00025    License along with this library; if not, write to the Free Software
00026    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00027 */
00028 
00029 #ifndef _GAN_MAT_GEN_H
00030 #define _GAN_MAT_GEN_H
00031 
00032 #include <stdlib.h>
00033 #include <stdio.h>
00034 #include <stdarg.h>
00035 #include <gandalf/common/misc_defs.h>
00036 #include <gandalf/common/misc_error.h>
00037 #include <gandalf/linalg/linalg_defs.h>
00038 
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042 
00058 struct Gan_SquMatrix;
00059 
00061 typedef struct Gan_Matrix
00062 {
00063    /* row and column dimensions of matrix */
00064    unsigned long rows, cols;
00065 
00066    /* data array containing matrix elements */
00067    double *data;
00068 
00069    /* allocated size of matrix (number of double's) */
00070    size_t data_size;
00071 
00072    /* flag indicating whether matrix data was dynamically allocated */
00073    Gan_Bool data_alloc;
00074 
00075    /* flag indicating whether matrix structure was dynamically allocated */
00076    Gan_Bool struct_alloc;
00077 } Gan_Matrix;
00078 
00079 #define GAN_MATRIX_STRUCT_DEFINED
00080 
00081 #include <gandalf/linalg/vec_gen.h>
00082 #include <gandalf/linalg/mat_square.h>
00083 
00084 void gan_mat_free ( Gan_Matrix *A );
00085 Gan_Matrix *gan_mat_set_dims ( Gan_Matrix *A,
00086                                unsigned long rows, unsigned long cols );
00087 Gan_Matrix *gan_mat_fill_va ( Gan_Matrix *A,
00088                               unsigned long rows, unsigned long cols, ... );
00089 Gan_Matrix *gan_mat_fill_vap ( Gan_Matrix *A,
00090                                unsigned long rows, unsigned long cols,
00091                                va_list *aptr );
00092 Gan_Matrix *gan_mat_fill_const_q ( Gan_Matrix *A,
00093                                    unsigned long rows, unsigned long cols,
00094                                    double value );
00095 Gan_Bool gan_mat_read_va ( Gan_Matrix *A,
00096                            unsigned long rows, unsigned long cols, ... );
00097 Gan_Matrix *gan_mat_copy_q ( Gan_Matrix *A, Gan_Matrix *B );
00098 Gan_Matrix *gan_mat_scale_q ( Gan_Matrix *A, double a, Gan_Matrix *B );
00099 Gan_Matrix *gan_mat_divide_q ( Gan_Matrix *A, double a, Gan_Matrix *B );
00100 Gan_Matrix *gan_mat_tpose_q ( Gan_Matrix *A, Gan_Matrix *B );
00101 Gan_Matrix *gan_mat_insertsym ( Gan_Matrix *A,
00102                                 unsigned long rA, unsigned long cA,
00103                                 struct Gan_SquMatrix *B,
00104                                 unsigned long rB, unsigned long cB,
00105                                 unsigned long rows , unsigned long cols );
00106 void gan_mat_free_va ( Gan_Matrix *A, ... );
00107 Gan_Matrix *gan_mat_extract_q ( Gan_Matrix *A,
00108                                 unsigned long r0,   unsigned long c0,
00109                                 unsigned long rows, unsigned long cols,
00110                                 Gan_Matrix *B );
00111 double gan_mat_sumsqr ( Gan_Matrix *A );
00112 double gan_mat_Fnorm ( Gan_Matrix *A );
00113 Gan_Matrix *gan_mat_invert_q ( Gan_Matrix *A, Gan_Matrix *B );
00114 Gan_Bool gan_mat_fprint ( FILE *fp, Gan_Matrix *A, const char *prefix,
00115                           unsigned indent, const char *fmt );
00116 Gan_Matrix *gan_mat_fscanf_q ( FILE *fp, Gan_Matrix *A,
00117                                char *prefix, int prefix_len );
00118 Gan_Bool gan_mat_fwrite ( FILE *fp, Gan_Matrix *A, gan_ui32 magic_number );
00119 Gan_Matrix *gan_mat_fread_q ( FILE *fp, Gan_Matrix *A,
00120                               gan_ui32 *magic_number );
00121 
00122 #define Gan_SquMatrix struct Gan_SquMatrix
00123 
00137 Gan_Matrix *gan_mat_alloc ( unsigned long rows, unsigned long cols );
00138 
00150 Gan_Matrix *gan_mat_form ( Gan_Matrix *A,
00151                            unsigned long rows, unsigned long cols );
00152 
00167 Gan_Matrix *gan_mat_form_data ( Gan_Matrix *A,
00168                                 unsigned long rows, unsigned long cols,
00169                                 void *data, size_t data_size );
00170 
00186 Gan_Bool gan_mat_set_el ( Gan_Matrix *A, unsigned i, unsigned j, double value);
00187 
00193 double gan_mat_get_el ( Gan_Matrix *A, unsigned i, unsigned j );
00194 
00201 Gan_Bool gan_mat_inc_el ( Gan_Matrix *A, unsigned i, unsigned j, double value);
00202 
00209 Gan_Bool gan_mat_dec_el ( Gan_Matrix *A, unsigned i, unsigned j, double value);
00210 
00227 Gan_Bool gan_mat_print ( Gan_Matrix *A,
00228                          const char *prefix, int indent, const char *fmt );
00229 
00251 Gan_Matrix *gan_mat_fill_const_s ( unsigned long rows, unsigned long cols,
00252                                    double value );
00253 
00264 Gan_Matrix *gan_mat_fill_zero_q ( Gan_Matrix *A,
00265                                   unsigned long rows, unsigned long cols );
00266 
00278 Gan_Matrix *gan_mat_fill_zero_s ( unsigned long rows, unsigned cols );
00279 
00294 Gan_Matrix *gan_mat_copy_s ( Gan_Matrix *A );
00295 
00310 Gan_Matrix *gan_mat_scale_s ( Gan_Matrix *A, double a );
00311 
00317 Gan_Matrix *gan_mat_scale_i ( Gan_Matrix *A, double a );
00318 
00324 Gan_Matrix *gan_mat_divide_s ( Gan_Matrix *A, double a );
00325 
00331 Gan_Matrix *gan_mat_divide_i ( Gan_Matrix *A, double a );
00332 
00338 Gan_Matrix *gan_mat_negate_q ( Gan_Matrix *A, Gan_Matrix *B );
00339 
00345 Gan_Matrix *gan_mat_negate_s ( Gan_Matrix *A );
00346 
00352 Gan_Matrix *gan_mat_negate_i ( Gan_Matrix *A );
00353 
00368 Gan_Matrix *gan_mat_tpose_s ( Gan_Matrix *A );
00369 
00376 Gan_Matrix *gan_mat_tpose_i ( Gan_Matrix *A );
00377 
00393 Gan_Matrix *gan_mat_add_q ( Gan_Matrix *A, Gan_Matrix *B, Gan_Matrix *C );
00394 
00401 Gan_Matrix *gan_mat_add_s ( Gan_Matrix *A, Gan_Matrix *B );
00402 
00409 Gan_Matrix *gan_mat_add_i1 ( Gan_Matrix *A, Gan_Matrix *B );
00410 
00417 Gan_Matrix *gan_mat_add_i2 ( Gan_Matrix *A, Gan_Matrix *B );
00418 
00425 Gan_Matrix *gan_mat_increment ( Gan_Matrix *A, Gan_Matrix *B );
00426 
00433 Gan_Matrix *gan_mat_addT_q ( Gan_Matrix *A, Gan_Matrix *B, Gan_Matrix *C );
00434 
00441 Gan_Matrix *gan_mat_addT_s ( Gan_Matrix *A, Gan_Matrix *B );
00442 
00449 Gan_Matrix *gan_mat_incrementT ( Gan_Matrix *A, Gan_Matrix *B );
00450 
00458 Gan_SquMatrix *gan_mat_add_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00459                                    Gan_SquMatrix *C );
00460 
00468 Gan_SquMatrix *gan_mat_add_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00469 
00477 Gan_SquMatrix *gan_mat_addT_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00478                                     Gan_SquMatrix *C );
00479 
00487 Gan_SquMatrix *gan_mat_addT_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00488 
00496 Gan_SquMatrix *gan_matT_add_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00497                                     Gan_SquMatrix *C );
00498 
00506 Gan_SquMatrix *gan_matT_add_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00507 
00515 Gan_SquMatrix *gan_matT_addT_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00516                                      Gan_SquMatrix *C );
00517 
00525 Gan_SquMatrix *gan_matT_addT_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00526 
00533 Gan_SquMatrix *gan_mat_saddT_sym_q ( Gan_Matrix *A, Gan_SquMatrix *B );
00534 
00541 Gan_SquMatrix *gan_mat_saddT_sym_s ( Gan_Matrix *A );
00542 
00549 Gan_SquMatrix *gan_matT_sadd_sym_q ( Gan_Matrix *A, Gan_SquMatrix *B );
00550 
00557 Gan_SquMatrix *gan_matT_sadd_sym_s ( Gan_Matrix *A );
00558 
00574 Gan_Matrix *gan_mat_sub_q ( Gan_Matrix *A, Gan_Matrix *B, Gan_Matrix *C );
00575 
00582 Gan_Matrix *gan_mat_sub_s ( Gan_Matrix *A, Gan_Matrix *B );
00583 
00590 Gan_Matrix *gan_mat_sub_i1 ( Gan_Matrix *A, Gan_Matrix *B );
00591 
00598 Gan_Matrix *gan_mat_sub_i2 ( Gan_Matrix *A, Gan_Matrix *B );
00599 
00606 Gan_Matrix *gan_mat_decrement ( Gan_Matrix *A, Gan_Matrix *B );
00607 
00614 Gan_Matrix *gan_mat_subT_q ( Gan_Matrix *A, Gan_Matrix *B,
00615                              Gan_Matrix *C );
00616 
00623 Gan_Matrix *gan_mat_subT_s ( Gan_Matrix *A, Gan_Matrix *B );
00624 
00631 Gan_Matrix *gan_mat_decrementT ( Gan_Matrix *A, Gan_Matrix *B );
00632 
00648 Gan_Vector *gan_mat_multv_q ( Gan_Matrix *A, Gan_Vector *x,
00649                               Gan_Vector *y );
00650 
00657 Gan_Vector *gan_mat_multv_s ( Gan_Matrix *A, Gan_Vector *x );
00658 
00665 Gan_Vector *gan_matT_multv_q ( Gan_Matrix *A, Gan_Vector *x,
00666                                Gan_Vector *y );
00667 
00674 Gan_Vector *gan_matT_multv_s ( Gan_Matrix *A, Gan_Vector *x );
00675 
00691 Gan_Matrix *gan_mat_rmult_q ( Gan_Matrix *A, Gan_Matrix *B, Gan_Matrix *C );
00692 
00699 Gan_Matrix *gan_mat_rmult_s ( Gan_Matrix *A, Gan_Matrix *B );
00700 
00707 Gan_Matrix *gan_mat_rmultT_q ( Gan_Matrix *A, Gan_Matrix *B,
00708                                Gan_Matrix *C );
00709 
00716 Gan_Matrix *gan_mat_rmultT_s ( Gan_Matrix *A, Gan_Matrix *B );
00717 
00724 Gan_Matrix *gan_matT_rmult_q ( Gan_Matrix *A, Gan_Matrix *B,
00725                                Gan_Matrix *C );
00726 
00733 Gan_Matrix *gan_matT_rmult_s ( Gan_Matrix *A, Gan_Matrix *B );
00734 
00741 Gan_Matrix *gan_matT_rmultT_q ( Gan_Matrix *A, Gan_Matrix *B,
00742                                 Gan_Matrix *C );
00743 
00750 Gan_Matrix *gan_matT_rmultT_s ( Gan_Matrix *A, Gan_Matrix *B );
00751 
00759 Gan_SquMatrix *gan_mat_rmult_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00760                                      Gan_SquMatrix *C );
00761 
00769 Gan_SquMatrix *gan_mat_rmult_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00770 
00778 Gan_SquMatrix *gan_mat_rmultT_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00779                                       Gan_SquMatrix *C );
00780 
00788 Gan_SquMatrix *gan_mat_rmultT_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00789 
00797 Gan_SquMatrix *gan_matT_rmult_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00798                                       Gan_SquMatrix *C );
00799 
00807 Gan_SquMatrix *gan_matT_rmult_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00808 
00816 Gan_SquMatrix *gan_matT_rmultT_sym_q ( Gan_Matrix *A, Gan_Matrix *B,
00817                                        Gan_SquMatrix *C );
00818 
00826 Gan_SquMatrix *gan_matT_rmultT_sym_s ( Gan_Matrix *A, Gan_Matrix *B );
00827 
00834 Gan_SquMatrix *gan_mat_srmultT_q ( Gan_Matrix *A, Gan_SquMatrix *B );
00835 
00842 Gan_SquMatrix *gan_mat_srmultT_s ( Gan_Matrix *A );
00843 
00850 Gan_SquMatrix *gan_mat_slmultT_q ( Gan_Matrix *A, Gan_SquMatrix *B );
00851 
00858 Gan_SquMatrix *gan_mat_slmultT_s ( Gan_Matrix *A );
00859 
00882 Gan_Matrix *gan_mat_invert_s ( Gan_Matrix *A );
00883 
00901 Gan_Bool gan_mat_same_dims ( Gan_Matrix *A, Gan_Matrix *B );
00902 
00921 Gan_Matrix *gan_mat_insert ( Gan_Matrix *A, unsigned long rA, unsigned long cA,
00922                              Gan_Matrix *B,
00923                              unsigned long rB,   unsigned long cB,
00924                              unsigned long rows, unsigned long cols );
00925 
00935 Gan_Matrix *gan_mat_insertT ( Gan_Matrix *A,
00936                               unsigned long rA, unsigned long cA,
00937                               Gan_Matrix *B,
00938                               unsigned long rB,   unsigned long cB,
00939                               unsigned long rows, unsigned long cols );
00940 
00948 Gan_Matrix *gan_mat_insertv ( Gan_Matrix *A,
00949                               unsigned long rA, unsigned long cA,
00950                               Gan_Vector *x, unsigned long rx,
00951                               unsigned long rows );
00952 
00963 Gan_Matrix *gan_mat_insertvT ( Gan_Matrix *A,
00964                                unsigned long rA, unsigned long cA,
00965                                Gan_Vector *x, unsigned long rx,
00966                                unsigned long cols );
00967 
00983 Gan_Bool gan_mat_test_dims ( Gan_Matrix *A, unsigned long rows,
00984                                             unsigned long cols );
00985 
01001 size_t gan_mat_data_size ( unsigned long rows, unsigned long cols );
01002 
01027 Gan_Matrix *gan_mat_extract_s ( Gan_Matrix *A,
01028                                 unsigned long r0,   unsigned long c0,
01029                                 unsigned long rows, unsigned long cols );
01030 
01053 Gan_Matrix *gan_mat_fscanf_s ( FILE *fp, const char *prefix, int prefix_len );
01054 
01065 Gan_Matrix *gan_mat_fread_s ( FILE *fp, gan_ui32 *magic_number );
01066 
01071 #undef Gan_SquMatrix
01072 
01073 /* not user functions */
01074 Gan_Matrix *gan_mat_form_gen ( Gan_Matrix *A,
01075                                unsigned long rows, unsigned long cols,
01076                                double *data, size_t data_size );
01077 Gan_Bool gan_mat_realloc_gen ( Gan_Matrix *A,
01078                                unsigned long rows, unsigned long cols );
01079 Gan_Matrix *gan_mat_add_gen ( Gan_Matrix *A, Gan_TposeFlag A_tr,
01080                               Gan_Matrix *B, Gan_TposeFlag B_tr,
01081                               Gan_Matrix *C );
01082 struct Gan_SquMatrix *gan_mat_add_sym_gen ( Gan_Matrix *A, Gan_TposeFlag A_tr,
01083                                             Gan_Matrix *B, Gan_TposeFlag B_tr,
01084                                             struct Gan_SquMatrix *C );
01085 Gan_Matrix *gan_mat_sub_gen ( Gan_Matrix *A, Gan_TposeFlag A_tr,
01086                               Gan_Matrix *B, Gan_TposeFlag B_tr,
01087                               Gan_Matrix *C );
01088 Gan_Vector *gan_mat_multv_gen ( Gan_Matrix *A, Gan_TposeFlag A_tr,
01089                                 Gan_Vector *x, Gan_Vector *y );
01090 Gan_Matrix *gan_mat_rmult_gen ( Gan_Matrix *A, Gan_TposeFlag A_tr,
01091                                 Gan_Matrix *B, Gan_TposeFlag B_tr,
01092                                 Gan_Matrix *C );
01093 struct Gan_SquMatrix *gan_mat_rmult_sym_gen (Gan_Matrix *A, Gan_TposeFlag A_tr,
01094                                              Gan_Matrix *B, Gan_TposeFlag B_tr,
01095                                              struct Gan_SquMatrix *C );
01096 Gan_Matrix *gan_mat_insert_gen ( Gan_Matrix *A,
01097                                  unsigned long rA, unsigned long cA,
01098                                  Gan_Matrix *B, Gan_TposeFlag B_tr,
01099                                  unsigned long rB, unsigned long cB,
01100                                  unsigned long rows , unsigned long cols );
01101 Gan_Matrix *gan_mat_insertv_gen ( Gan_Matrix *A,
01102                                   unsigned long rA, unsigned long cA,
01103                                   struct Gan_Vector *x, Gan_TposeFlag x_tr,
01104                                   unsigned long rx, unsigned long size );
01105 
01106 #ifndef NDEBUG
01107 void gan_mat_db ( Gan_Matrix *A ); /* for use in a debugger */
01108 #endif
01109 
01110 #define gan_mat_realloc(A,rows,cols) gan_mat_realloc_gen(A,rows,cols)
01111 
01124 #ifdef __cplusplus
01125 }
01126 #endif
01127 
01128 #endif /* #ifndef _GAN_MAT_GEN_H */

Generated on Mon Oct 13 16:14:33 2003 by doxygen1.3-rc1