// 3ddt // find the determinant of any size matrix #include #define DIM 4 int minor(int matrix[DIM][DIM], int r, int c1, int c2) { //printf("r=%d, c1=%d, c2=%d\n", r, c1, c2); //printf(" a=%d, b=%d, c=%d, d =%d\n", matrix[r][c1], // matrix[r][c2], matrix[r+1][c1], matrix[r+1][c2]); return(matrix[r][c1]*matrix[r+1][c2] - matrix[r+1][c1]*matrix[r][c2]); } int det3(int matrix[DIM][DIM], int start){ int i,d, sig; int dim =3; int m[dim]; // calcualte minors for(i=0; i < dim; i++) { m[i]=minor(matrix, DIM-2, (start+((i+1)%dim))%DIM, (start+((i+2)%dim))%DIM); //printf("Minor i=%d m[i]=%d\n", i, m[i]); } d=0; for(i=0; i < 3; i++){ sig = (-1)^(i+1); //printf("index %d value \n", (start+((i)%dim))%DIM ); d = d + matrix[dim-2][(start+((i)%dim))%DIM]*m[i]; } printf("det3 = %d (start=%d)\n", d, start); return d; } int det4(int matrix[DIM][DIM], int dim){ int i,d, sig; int m[DIM]; for(i=0; i < dim; i++){ m[i] = det3(matrix, (i+1)%DIM); } d=0; for(i=0; i < dim; i++){ sig = (i%2) ? -1 : 1; printf("sig %d coeff %d\n", sig, matrix[0][i]); d = d + sig*matrix[0][i]*m[i]; } printf("det4 = %d\n", d); return d; } int main() { int d, i, j, dim; int matrix[DIM][DIM] = { 20, 50, 70, 90, 6, 5, 4, 3, 11, 234, 11, 357, 7, 11, 13, 17}; dim =DIM; for(i=0; i< dim; i++){ for(j=0; j