/************************************
        Extended Kalman Filter
        Matrix operations

        V. Smidl

Rev. 30.8.2010

30.8.2010      Prvni verze

*************************************/

#define qAU 14

/* Matrix multiply Full matrix by upper diagonal matrix with unit diagonal; */
extern void mmultAU(int *m1, int *up, int *result, unsigned int rows, unsigned int columns);

/* Matrix multiply Full matrix by upper diagonal matrix; */
extern void mmultACh(int *m1, int *up, int *result, unsigned int rows, unsigned int columns);

/* perform Thorton update of UD matrix using PSI*U, Q, and temporaries G, Dold, for size dimx*/
extern void thorton(int *U, int *D, int *PSIU, int *Q, int *G, int *Dold, unsigned int dimx);

/* perform Bierman update of UD matrix using difz, R and xp, for size dimx*/
extern void bierman(int *difz, int *xp, int *U, int *D, int *R, unsigned int dimy, unsigned int dimx );

/* perform Thorton update of UD matrix using PSI*U, Q, and temporaries G, Dold, for size dimx*/
extern void thorton_fast(int *U, int *D, int *PSIU, int *Q, int *G, int *Dold, unsigned int dimx);

/* perform Bierman update of UD matrix using difz, R and xp, for size dimx*/
extern void bierman_fast(int *difz, int *xp, int *U, int *D, int *R, unsigned int dimy, unsigned int dimx );

/* perform Householder update of Ch matrix using PSI*Ch , Q, */
extern void householder(int *Ch /*= int *PSICh*/, int *Q, unsigned int dimx);

/* perform Givens update of Ch matrix using PSI*Ch , Q, */
extern void givens(int *Ch /*= int *PSICh*/, int *Q, unsigned int dimx);

/* perform Carlson update of Ch matrix using difz, R and xp, for size dimx*/
extern void carlson(int *difz, int *xp, int *Ch, int *R, unsigned int dimy, unsigned int dimx );
