Buenas tardes a todos.
Necesito hacer el determinante de una matriz 6x6, y a pesar de tener la biblioteca MatrixMath.h, con la cual podemos realizar la mayoría de cálculos matriciales, no hay ninguna función especifica para hacer el determinante.
Tras buscar por Internet bastante, encontré este código que es el que se suele usar prácticamente en todos sitios, pero al pasarlo a mi Arduino no funciona.
Os pongo aquí el código para ver si le podéis echar un vistazo y ayudarme a depurarlo. El problema es que la variable aux no incrementa como debería hacerlo, y no sé porque está ocurriendo esto.
int i, j;
int n = 6;
double result;
double **m=NULL;
double ma[6][6] = {
{ 1,2,1,1,2,7 },
{ 7,3,6,3,9,2 },
{ 6,6,6,3,1,2 },
{ 2,2,2,7,1,2 },
{ 1,6,6,7,2,1 },
{ 5,3,7,9,9,2 } };
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("###########################");
Serial.println("COMUNICACION SERIE HABILITADA.");
Serial.println("###########################");
}// end setup
void loop() {
Serial.println("###########################");
Serial.println("LOOP.");
Serial.println("###########################");
m = (double **)malloc(sizeof(double)*n);
for(int i=0; i<n; i++) m[i]=(double *)malloc(sizeof(double)*n);
for (i = 0; i<n; i++)
{
for (j = 0; j<n; j++)
{
m[i][j]=ma[i][j];
Serial.print(m[i][j]);
Serial.print(" ");
}
Serial.println(" ");
}
Serial.print("Calculamos determinante: ");
Serial.println(" ");
result = det(m, 6);
Serial.print("Determinante: ");
Serial.print(result);
Serial.println(" ");
Serial.println("###########################");
Serial.println("Fin funcion determinante.");
Serial.println("###########################");
}
double det(double **m, int b) {
double determinante = 0, aux = 0;
int c;
for (int q=0; q<b;q++)
{
for(int w=0;w<b;w++)
{
Serial.print(m[q][w]);
Serial.print(" ");
}
Serial.println(" ");
}
for (int j = 0; j<b; j++) {
double **menor = (double **)malloc(sizeof(double)*(b - 1));
for (int h = 0; h<(b - 1); h++) menor[h] = (double *)malloc(sizeof(double)*(b - 1));
for (int k = 1; k<b; k++) {
c = 0;
for (int l = 0; l<b; l++) {
if (l != j) {
menor[k - 1][c] = m[k][l];
c++;
}
}
}
aux = pow(-1, (2 + j))*m[0][j] * det(menor, (b - 1));
Serial.print(" aux ");
Serial.print(aux);
Serial.println(" ");
determinante += aux;
Serial.print(" Determinante ");
Serial.print(determinante);
Serial.println(" ");
for (int q = 0; q<(b - 1); q++)
{free(menor[q]);}
free(menor);
}
return determinante;
}
Muchas gracias de antemano.
Un saludo.