// Calcula el determinante de una matriz usando un metodo recursivo
ldouble Determinante(ldouble **m, int n)
{
   // Revisa que la matriz este inicializada
   if (!m) 
   {
      printf("Error la matriz no ha sido inicializada");
      return 0.0;      
   }

   ldouble det = 0.0;
   
   if (n > 2) 
   {
      int i, j, k, r, c, l , s;
      ldouble **xm;
      if (!(xm = SolicitaMemoria(n-1,n-1)))  return 0.0;
      for (i = 0; i < n; i++) 
      {
         if (m[0][i] == 0.0) continue;
         r = c = 0;
         for (j = 1; j < n; j++) 
         {
            for (k = 0; k < n; k++) 
            {
               if (k == i) continue;
               xm[r][c] = m[j][k];
               c++;
            }
            r++;
            c = 0;
         }
         s = 1;
         for (l = 0; l < i; l++) s = s * -1;
         det = det + (m[0][i] * Determinante(xm, n-1) * s);
      }
      LiberaMemoria(xm,n-1,n-1);
   } else {
      det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
   } 
   return det;   
}