1 #ifndef _AFNI_RCMAT_HEADER_ 2 #define _AFNI_RCMAT_HEADER_ 3 4 /***** 5 Struct to hold a banded square matrix that is either symmetric, 6 or upper or lower triangular (depending on the needs of the moment). 7 *****/ 8 9 #undef LENTYP 10 #define LENTYP unsigned short 11 12 #undef LENTYP_MAX 13 #define LENTYP_MAX 65535u 14 15 typedef struct { 16 int nrc ; /* # of rows and columns */ 17 LENTYP *len ; /* in row/column #i, there are len[i] elements */ 18 double **rc ; /* so the first column/row index is i+1-len[i] */ 19 /* diagonal element #i is in rc[i][len[i]-1] */ 20 } rcmat ; 21 22 #define ISVALID_RCMAT(rr) \ 23 ( (rr) != NULL && (rr)->len != NULL && (rr)->len[0] == 1 && \ 24 (rr)->rc != NULL && (rr)->rc[0] != NULL ) 25 26 extern rcmat * rcmat_init ( int n ) ; 27 extern void rcmat_destroy ( rcmat *rcm ) ; 28 extern rcmat * rcmat_copy ( rcmat *rcm ) ; 29 extern int rcmat_choleski ( rcmat *rcm ) ; 30 extern void rcmat_lowert_solve ( rcmat *rcm , double *vec ) ; 31 extern void rcmat_uppert_solve ( rcmat *rcm , double *vec ) ; 32 extern void rcmat_lowert_vecmul( rcmat *rcm , double *vec ) ; /* 02 Oct 2009 */ 33 34 extern void rcmat_lowert_solve_unrolled( rcmat *rcm , double *vec ) ; 35 extern float rcmat_avglen( rcmat *rcm ) ; 36 37 extern float * rcmat_lsqfit ( int npt, float *far, int nref, float *ref[] ) ; 38 extern rcmat * rcmat_normeqn( int npt, int nref, float *ref[] ) ; 39 40 extern rcmat * rcmat_from_rows( int nn , float *rr[] ) ; 41 42 #endif /* _AFNI_RCMAT_HEADER_ */ 43