viernes, 20 de marzo de 2009

Código en C de determinante de una matriz (expansion por menores) recursivo

Encontre esta función que calcula el determinante de una matriz recursivamente mediante expansión por menores:








Código:
/*
Recursive definition of determinate using expansion by minors.
*/
double Determinant(double **a,int n)
{
int i,j,j1,j2;
double det = 0;
double **m = NULL;

if (n < 1) { /* Error */

} else if (n == 1) { /* Shouldn't get used */
det = a[0][0];
} else if (n == 2) {
det = a[0][0] * a[1][1] - a[1][0] * a[0][1];
} else {
det = 0;
for (j1=0;j1<n;j1++) {
m = malloc((n-1)*sizeof(double *));
for (i=0;i<n-1;i++)
m[i] = malloc((n-1)*sizeof(double));
for (i=1;i<n;i++) {
j2 = 0;
for (j=0;j<n;j++) {
if (j == j1)
continue;
m[i-1][j2] = a[i][j];
j2++;
}
}
det += pow(-1.0,1.0+j1+1.0) * a[0][j1] * Determinant(m,n-1);
for (i=0;i<n-1;i++)
free(m[i]);
free(m);
}
}
return(det);
}

Acá encuentran este mismo código pero bien comentado:

Determinante de una matriz (expansion por menores) recursivo





Fuente: http://local.wasp.uwa.edu.au/~pbourke/other/determinant/

No hay comentarios:

Publicar un comentario