Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00023 
00024 
00025 
00026 
00027 
00028 
00029 #ifndef AR_MATRIX_H
00030 #define AR_MATRIX_H
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034 
00035 
00036 
00037 
00038 
00039 #include <math.h>
00040 #include <AR/config.h>
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
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 
00100 #define ARELEM0(mat,r,c) ((mat)->m[(r)*((mat)->clm)+(c)])
00101 
00107 
00108 #define ARELEM1(mat,row,clm) ARELEM0(mat,row-1,clm-1)
00109 
00110 
00111 
00112 
00113 
00114 
00115 
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