Main Page   Modules   Compound List   File List   Compound Members   File Members  

matf_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_MATF_GEN_H
00030 #define _GAN_MATF_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_f;
00059 
00061 typedef struct Gan_Matrix_f
00062 {
00063    /* row and column dimensions of matrix */
00064    unsigned long rows, cols;
00065 
00066    /* data array containing matrix elements */
00067    float *data;
00068 
00069    /* allocated size of matrix (number of float'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_f;
00078 
00079 #define GAN_MATRIXF_STRUCT_DEFINED
00080 
00081 #include <gandalf/linalg/vecf_gen.h>
00082 #include <gandalf/linalg/matf_square.h>
00083 
00084 void gan_matf_free ( Gan_Matrix_f *A );
00085 Gan_Matrix_f *gan_matf_set_dims ( Gan_Matrix_f *A,
00086                                   unsigned long rows, unsigned long cols );
00087 Gan_Matrix_f *gan_matf_fill_va ( Gan_Matrix_f *A,
00088                                  unsigned long rows, unsigned long cols, ... );
00089 Gan_Matrix_f *gan_matf_fill_vap ( Gan_Matrix_f *A,
00090                                   unsigned long rows, unsigned long cols,
00091                                   va_list *aptr );
00092 Gan_Matrix_f *gan_matf_fill_const_q ( Gan_Matrix_f *A,
00093                                       unsigned long rows, unsigned long cols,
00094                                       float value );
00095 Gan_Bool gan_matf_read_va ( Gan_Matrix_f *A,
00096                             unsigned long rows, unsigned long cols, ... );
00097 Gan_Matrix_f *gan_matf_copy_q ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00098 Gan_Matrix_f *gan_matf_scale_q ( Gan_Matrix_f *A, float a, Gan_Matrix_f *B );
00099 Gan_Matrix_f *gan_matf_divide_q ( Gan_Matrix_f *A, float a, Gan_Matrix_f *B );
00100 Gan_Matrix_f *gan_matf_tpose_q ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00101 Gan_Matrix_f *gan_matf_insertsym ( Gan_Matrix_f *A,
00102                                    unsigned long rA, unsigned long cA,
00103                                    struct Gan_SquMatrix_f *B,
00104                                    unsigned long rB, unsigned long cB,
00105                                    unsigned long rows , unsigned long cols );
00106 void gan_matf_free_va ( Gan_Matrix_f *A, ... );
00107 Gan_Matrix_f *gan_matf_extract_q ( Gan_Matrix_f *A,
00108                                    unsigned long r0,   unsigned long c0,
00109                                    unsigned long rows, unsigned long cols,
00110                                    Gan_Matrix_f *B );
00111 float gan_matf_sumsqr ( Gan_Matrix_f *A );
00112 float gan_matf_Fnorm ( Gan_Matrix_f *A );
00113 Gan_Matrix_f *gan_matf_invert_q ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00114 Gan_Bool gan_matf_fprint ( FILE *fp, Gan_Matrix_f *A, const char *prefix,
00115                            unsigned indent, const char *fmt );
00116 Gan_Matrix_f *gan_matf_fscanf_q ( FILE *fp, Gan_Matrix_f *A,
00117                                   char *prefix, int prefix_len );
00118 Gan_Bool gan_matf_fwrite ( FILE *fp, Gan_Matrix_f *A, gan_ui32 magic_number );
00119 Gan_Matrix_f *gan_matf_fread_q ( FILE *fp, Gan_Matrix_f *A,
00120                                  gan_ui32 *magic_number );
00121 
00122 #define Gan_SquMatrix_f struct Gan_SquMatrix_f
00123 
00137 Gan_Matrix_f *gan_matf_alloc ( unsigned long rows, unsigned long cols );
00138 
00150 Gan_Matrix_f *gan_matf_form ( Gan_Matrix_f *A,
00151                               unsigned long rows, unsigned long cols );
00152 
00167 Gan_Matrix_f *gan_matf_form_data ( Gan_Matrix_f *A,
00168                                    unsigned long rows, unsigned long cols,
00169                                    void *data, size_t data_size );
00170 
00186 Gan_Bool gan_matf_set_el ( Gan_Matrix_f *A,
00187                            unsigned i, unsigned j, float value);
00188 
00194 float gan_matf_get_el ( Gan_Matrix_f *A, unsigned i, unsigned j );
00195 
00202 Gan_Bool gan_matf_inc_el ( Gan_Matrix_f *A,
00203                            unsigned i, unsigned j, float value);
00204 
00211 Gan_Bool gan_matf_dec_el ( Gan_Matrix_f *A,
00212                            unsigned i, unsigned j, float value);
00213 
00230 Gan_Bool gan_matf_print ( Gan_Matrix_f *A,
00231                           const char *prefix, int indent, const char *fmt );
00232 
00254 Gan_Matrix_f *gan_matf_fill_const_s ( unsigned long rows, unsigned long cols,
00255                                       float value );
00256 
00267 Gan_Matrix_f *gan_matf_fill_zero_q ( Gan_Matrix_f *A,
00268                                      unsigned long rows, unsigned long cols );
00269 
00281 Gan_Matrix_f *gan_matf_fill_zero_s ( unsigned long rows, unsigned cols );
00282 
00297 Gan_Matrix_f *gan_matf_copy_s ( Gan_Matrix_f *A );
00298 
00313 Gan_Matrix_f *gan_matf_scale_s ( Gan_Matrix_f *A, float a );
00314 
00320 Gan_Matrix_f *gan_matf_scale_i ( Gan_Matrix_f *A, float a );
00321 
00327 Gan_Matrix_f *gan_matf_divide_s ( Gan_Matrix_f *A, float a );
00328 
00334 Gan_Matrix_f *gan_matf_divide_i ( Gan_Matrix_f *A, float a );
00335 
00341 Gan_Matrix_f *gan_matf_negate_q ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00342 
00348 Gan_Matrix_f *gan_matf_negate_s ( Gan_Matrix_f *A );
00349 
00355 Gan_Matrix_f *gan_matf_negate_i ( Gan_Matrix_f *A );
00356 
00371 Gan_Matrix_f *gan_matf_tpose_s ( Gan_Matrix_f *A );
00372 
00379 Gan_Matrix_f *gan_matf_tpose_i ( Gan_Matrix_f *A );
00380 
00396 Gan_Matrix_f *gan_matf_add_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00397                                Gan_Matrix_f *C );
00398 
00405 Gan_Matrix_f *gan_matf_add_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00406 
00413 Gan_Matrix_f *gan_matf_add_i1 ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00414 
00421 Gan_Matrix_f *gan_matf_add_i2 ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00422 
00429 Gan_Matrix_f *gan_matf_increment ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00430 
00437 Gan_Matrix_f *gan_matf_addT_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00438                                 Gan_Matrix_f *C );
00439 
00446 Gan_Matrix_f *gan_matf_addT_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00447 
00454 Gan_Matrix_f *gan_matf_incrementT ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00455 
00463 Gan_SquMatrix_f *gan_matf_add_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00464                                       Gan_SquMatrix_f *C );
00465 
00473 Gan_SquMatrix_f *gan_matf_add_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00474 
00482 Gan_SquMatrix_f *gan_matf_addT_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00483                                        Gan_SquMatrix_f *C );
00484 
00492 Gan_SquMatrix_f *gan_matf_addT_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00493 
00501 Gan_SquMatrix_f *gan_matTf_add_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00502                                        Gan_SquMatrix_f *C );
00503 
00511 Gan_SquMatrix_f *gan_matTf_add_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00512 
00520 Gan_SquMatrix_f *gan_matTf_addT_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00521                                         Gan_SquMatrix_f *C );
00522 
00530 Gan_SquMatrix_f *gan_matTf_addT_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00531 
00538 Gan_SquMatrix_f *gan_matf_saddT_sym_q ( Gan_Matrix_f *A, Gan_SquMatrix_f *B );
00539 
00546 Gan_SquMatrix_f *gan_matf_saddT_sym_s ( Gan_Matrix_f *A );
00547 
00554 Gan_SquMatrix_f *gan_matTf_sadd_sym_q ( Gan_Matrix_f *A, Gan_SquMatrix_f *B );
00555 
00562 Gan_SquMatrix_f *gan_matTf_sadd_sym_s ( Gan_Matrix_f *A );
00563 
00579 Gan_Matrix_f *gan_matf_sub_q ( Gan_Matrix_f *A, Gan_Matrix_f *B, Gan_Matrix_f *C );
00580 
00587 Gan_Matrix_f *gan_matf_sub_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00588 
00595 Gan_Matrix_f *gan_matf_sub_i1 ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00596 
00603 Gan_Matrix_f *gan_matf_sub_i2 ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00604 
00611 Gan_Matrix_f *gan_matf_decrement ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00612 
00619 Gan_Matrix_f *gan_matf_subT_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00620                                 Gan_Matrix_f *C );
00621 
00628 Gan_Matrix_f *gan_matf_subT_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00629 
00636 Gan_Matrix_f *gan_matf_decrementT ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00637 
00653 Gan_Vector_f *gan_matf_multv_q ( Gan_Matrix_f *A, Gan_Vector_f *x,
00654                                  Gan_Vector_f *y );
00655 
00662 Gan_Vector_f *gan_matf_multv_s ( Gan_Matrix_f *A, Gan_Vector_f *x );
00663 
00670 Gan_Vector_f *gan_matTf_multv_q ( Gan_Matrix_f *A, Gan_Vector_f *x,
00671                                   Gan_Vector_f *y );
00672 
00679 Gan_Vector_f *gan_matTf_multv_s ( Gan_Matrix_f *A, Gan_Vector_f *x );
00680 
00696 Gan_Matrix_f *gan_matf_rmult_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00697                                  Gan_Matrix_f *C );
00698 
00705 Gan_Matrix_f *gan_matf_rmult_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00706 
00713 Gan_Matrix_f *gan_matf_rmultT_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00714                                   Gan_Matrix_f *C );
00715 
00722 Gan_Matrix_f *gan_matf_rmultT_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00723 
00730 Gan_Matrix_f *gan_matTf_rmult_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00731                                   Gan_Matrix_f *C );
00732 
00739 Gan_Matrix_f *gan_matTf_rmult_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00740 
00747 Gan_Matrix_f *gan_matTf_rmultT_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00748                                    Gan_Matrix_f *C );
00749 
00756 Gan_Matrix_f *gan_matTf_rmultT_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00757 
00765 Gan_SquMatrix_f *gan_matf_rmult_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00766                                         Gan_SquMatrix_f *C );
00767 
00775 Gan_SquMatrix_f *gan_matf_rmult_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00776 
00784 Gan_SquMatrix_f *gan_matf_rmultT_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00785                                          Gan_SquMatrix_f *C );
00786 
00794 Gan_SquMatrix_f *gan_matf_rmultT_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00795 
00803 Gan_SquMatrix_f *gan_matTf_rmult_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00804                                          Gan_SquMatrix_f *C );
00805 
00813 Gan_SquMatrix_f *gan_matTf_rmult_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00814 
00822 Gan_SquMatrix_f *gan_matTf_rmultT_sym_q ( Gan_Matrix_f *A, Gan_Matrix_f *B,
00823                                           Gan_SquMatrix_f *C );
00824 
00832 Gan_SquMatrix_f *gan_matTf_rmultT_sym_s ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00833 
00840 Gan_SquMatrix_f *gan_matf_srmultT_q ( Gan_Matrix_f *A, Gan_SquMatrix_f *B );
00841 
00848 Gan_SquMatrix_f *gan_matf_srmultT_s ( Gan_Matrix_f *A );
00849 
00856 Gan_SquMatrix_f *gan_matf_slmultT_q ( Gan_Matrix_f *A, Gan_SquMatrix_f *B );
00857 
00864 Gan_SquMatrix_f *gan_matf_slmultT_s ( Gan_Matrix_f *A );
00865 
00888 Gan_Matrix_f *gan_matf_invert_s ( Gan_Matrix_f *A ) /* input matrix */;
00889 
00907    Gan_Bool gan_matf_same_dims ( Gan_Matrix_f *A, Gan_Matrix_f *B );
00908 
00927 Gan_Matrix_f *gan_matf_insert ( Gan_Matrix_f *A,
00928                                 unsigned long rA, unsigned long cA,
00929                                 Gan_Matrix_f *B,
00930                                 unsigned long rB,   unsigned long cB,
00931                                 unsigned long rows, unsigned long cols )
00932 ;
00933 
00943 Gan_Matrix_f *gan_matf_insertT ( Gan_Matrix_f *A,
00944                                  unsigned long rA, unsigned long cA,
00945                                  Gan_Matrix_f *B,
00946                                  unsigned long rB,   unsigned long cB,
00947                                  unsigned long rows, unsigned long cols );
00948 
00956 Gan_Matrix_f *gan_matf_insertv ( Gan_Matrix_f *A,
00957                                  unsigned long rA, unsigned long cA,
00958                                  Gan_Vector_f *x, unsigned long rx,
00959                                  unsigned long rows );
00960 
00971 Gan_Matrix_f *gan_matf_insertvT ( Gan_Matrix_f *A,
00972                                   unsigned long rA, unsigned long cA,
00973                                   Gan_Vector_f *x, unsigned long rx,
00974                                   unsigned long cols );
00975 
00991 Gan_Bool gan_matf_test_dims ( Gan_Matrix_f *A, unsigned long rows,
00992                                                unsigned long cols );
00993 
01009 size_t gan_matf_data_size ( unsigned long rows, unsigned long cols );
01010 
01035 Gan_Matrix_f *gan_matf_extract_s ( Gan_Matrix_f *A,
01036                                    unsigned long r0,   unsigned long c0,
01037                                    unsigned long rows, unsigned long cols );
01038 
01061 Gan_Matrix_f *gan_matf_fscanf_s ( FILE *fp, const char *prefix,
01062                                   int prefix_len );
01063 
01074 Gan_Matrix_f *gan_matf_fread_s ( FILE *fp, gan_ui32 *magic_number );
01075 
01080 #undef Gan_SquMatrix_f
01081 
01082 /* not user functions */
01083 Gan_Matrix_f *gan_matf_form_gen ( Gan_Matrix_f *A,
01084                                   unsigned long rows, unsigned long cols,
01085                                   float *data, size_t data_size );
01086 Gan_Bool gan_matf_realloc_gen ( Gan_Matrix_f *A,
01087                                 unsigned long rows, unsigned long cols );
01088 Gan_Matrix_f *gan_matf_add_gen ( Gan_Matrix_f *A, Gan_TposeFlag A_tr,
01089                                  Gan_Matrix_f *B, Gan_TposeFlag B_tr,
01090                                  Gan_Matrix_f *C );
01091 struct Gan_SquMatrix_f *gan_matf_add_sym_gen (
01092     Gan_Matrix_f *A, Gan_TposeFlag A_tr,
01093     Gan_Matrix_f *B, Gan_TposeFlag B_tr,
01094     struct Gan_SquMatrix_f *C );
01095 Gan_Matrix_f *gan_matf_sub_gen ( Gan_Matrix_f *A, Gan_TposeFlag A_tr,
01096                                  Gan_Matrix_f *B, Gan_TposeFlag B_tr,
01097                                  Gan_Matrix_f *C );
01098 Gan_Vector_f *gan_matf_multv_gen ( Gan_Matrix_f *A, Gan_TposeFlag A_tr,
01099                                    Gan_Vector_f *x, Gan_Vector_f *y );
01100 Gan_Matrix_f *gan_matf_rmult_gen ( Gan_Matrix_f *A, Gan_TposeFlag A_tr,
01101                                    Gan_Matrix_f *B, Gan_TposeFlag B_tr,
01102                                    Gan_Matrix_f *C );
01103 struct Gan_SquMatrix_f *gan_matf_rmult_sym_gen (
01104     Gan_Matrix_f *A, Gan_TposeFlag A_tr,
01105     Gan_Matrix_f *B, Gan_TposeFlag B_tr,
01106     struct Gan_SquMatrix_f *C );
01107 Gan_Matrix_f *gan_matf_insert_gen ( Gan_Matrix_f *A,
01108                                     unsigned long rA, unsigned long cA,
01109                                     Gan_Matrix_f *B, Gan_TposeFlag B_tr,
01110                                     unsigned long rB, unsigned long cB,
01111                                     unsigned long rows , unsigned long cols );
01112 Gan_Matrix_f *gan_matf_insertv_gen ( Gan_Matrix_f *A,
01113                                      unsigned long rA, unsigned long cA,
01114                                      struct Gan_Vector_f *x,
01115                                      Gan_TposeFlag x_tr,
01116                                      unsigned long rx, unsigned long size );
01117 
01118 #ifndef NDEBUG
01119 void gan_matf_db ( Gan_Matrix_f *A ); /* for use in a debugger */
01120 #endif
01121 
01122 #define gan_matf_realloc(A,rows,cols) gan_matf_realloc_gen(A,rows,cols)
01123 
01124 #ifdef __cplusplus
01125 }
01126 #endif
01127 
01128 #endif /* #ifndef _GAN_MATF_GEN_H */

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