void KalmanFilter::getPPlus() {
  double** prod1 = productMatrix(A,P,3,3,3);
  double** tA = transposeMatrix(A,3,3);
  double** prod2 = productMatrix(prod1,tA,3,3,3);

  freeMatrix(P,3);
  P = addMatrix(prod2,Q,3,3);

  freeMatrix(prod1,3);
  freeMatrix(prod2,3);
  freeMatrix(tA,3);
}
void KalmanFilter::getP(double** K) {
  double** tmp = productMatrix(K,H,3,3,2);
  double** subI = substractionIdMatrix(tmp,3);

  freeMatrix(tmp,3);

  tmp = productMatrix(subI,P,3,3,3);

  freeMatrix(P,3);
  freeMatrix(subI,3);

  P = tmp;
}
void main()
{
   int A[MAXROWS][MAXCOLS], B[MAXROWS][MAXCOLS],
   C[MAXROWS][MAXCOLS];
   int M, N;

   /*Function declarations*/

   void readMatrix(int arr[][MAXCOLS], int M, int N);
   void printMatrix(int arr[][MAXCOLS], int M, int N);
   void productMatrix(int A[][MAXCOLS], int B[][MAXCOLS], int C[][MAXCOLS],
        int M, int N);

//   clrscr();

   printf("Enter the value of M and N\n");
   scanf("%d %d",&M, &N);
   printf ("Enter matrix A\n");
   readMatrix(A,M,N);
   printf("Matrix A\n");
   printMatrix(A,M,N);

   printf ("Enter matrix B\n");
   readMatrix(B,M,N);
   printf("Matrix B\n");
   printMatrix(B,M,N);

   productMatrix(A,B,C, M,N);

   printf ("The product matrix is\n");
   printMatrix(C,M,N);
}