matrix.h
Go to the documentation of this file.
00001 /*  --------------------------------------------------------------------------
00002 *   Copyright (C) 2004 Hitlab NZ.
00003 *   The distribution policy is describe on the Copyright.txt furnish 
00004 *    with this library.
00005 *   -------------------------------------------------------------------------*/
00023 /*  --------------------------------------------------------------------------
00024 *   History : 
00025 *   Rev         Date            Who             Changes
00026 *
00027 *----------------------------------------------------------------------------*/
00028 
00029 #ifndef AR_MATRIX_H
00030 #define AR_MATRIX_H
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034 
00035 // ============================================================================
00036 //      Public includes.
00037 // ============================================================================
00038 
00039 #include <math.h>
00040 #include <AR/config.h>
00041 
00042 // ============================================================================
00043 //      Public types and defines.
00044 // ============================================================================
00045 
00046 /* === matrix definition ===
00047 
00048   <---- clm --->
00049   [ 10  20  30 ] ^
00050   [ 20  10  15 ] |
00051   [ 12  23  13 ] row
00052   [ 20  10  15 ] |
00053   [ 13  14  15 ] v
00054 
00055 =========================== */
00056 
00073 typedef struct {
00074         double *m;
00075         int row;
00076         int clm;
00077 } ARMat;
00078 
00089 typedef struct {
00090         double *v;
00091         int    clm;
00092 } ARVec;
00093 
00099 /* 0 origin */
00100 #define ARELEM0(mat,r,c) ((mat)->m[(r)*((mat)->clm)+(c)])
00101 
00107 /* 1 origin */
00108 #define ARELEM1(mat,row,clm) ARELEM0(mat,row-1,clm-1)
00109 
00110 // ============================================================================
00111 //      Public globals.
00112 // ============================================================================
00113 
00114 // ============================================================================
00115 //      Public functions.
00116 // ============================================================================
00117 
00127 ARMat  *arMatrixAlloc(int row, int clm);
00128 
00136 int    arMatrixFree(ARMat *m);
00137 
00147 int    arMatrixDup(ARMat *dest, ARMat *source);
00148 
00156 ARMat  *arMatrixAllocDup(ARMat *source);
00157 
00167 int    arMatrixUnit(ARMat *unit);
00168 
00177 ARMat  *arMatrixAllocUnit(int dim);
00178 
00191 int    arMatrixMul(ARMat *dest, ARMat *a, ARMat *b);
00192 
00204 ARMat  *arMatrixAllocMul(ARMat *a, ARMat *b);
00205 
00215 int    arMatrixTrans(ARMat *dest, ARMat *source);
00216 
00225 ARMat  *arMatrixAllocTrans(ARMat *source);
00226 
00238 int    arMatrixInv(ARMat *dest, ARMat *source);
00239 
00248 int    arMatrixSelfInv(ARMat *m);
00249 
00258 ARMat  *arMatrixAllocInv(ARMat *source);
00259 
00267 double arMatrixDet(ARMat *m);
00268 
00279 int    arMatrixPCA( ARMat *input, ARMat *evec, ARVec *ev, ARVec *mean );
00280 
00290 int    arMatrixPCA2( ARMat *input, ARMat *evec, ARVec *ev );
00291 
00300 int    arMatrixDisp(ARMat *m);
00301 
00309 ARVec  *arVecAlloc( int clm );
00310 
00318 int    arVecFree( ARVec *v );
00319 
00327 int    arVecDisp( ARVec *v );
00328 
00336 double arVecHousehold( ARVec *x );
00337 
00347 double arVecInnerproduct( ARVec *x, ARVec *y );
00348 
00358 int    arVecTridiagonalize( ARMat *a, ARVec *d, ARVec *e );
00359 
00360 
00361 #ifdef __cplusplus
00362 }
00363 #endif
00364 #endif
00365 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines


ar_recog
Author(s): Graylin Trevor Jay and Christopher Crick
autogenerated on Fri Jan 25 2013 12:15:00