Minor reworks of cofactor and adjugate

This commit is contained in:
Soikk 2022-08-31 22:11:59 +02:00
parent d34cf6941b
commit bd25a9380d
2 changed files with 12 additions and 13 deletions

@ -176,7 +176,7 @@ long double determinant(matrix *m){
}
}
matrix *cofactor(matrix *m){
void cofactor(matrix *m){
if(!isSquare(m)){
fprintf(stderr, "Matrix is not square (%dx%d)\n", m->rows, m->cols);
return NULL;
@ -190,7 +190,8 @@ matrix *cofactor(matrix *m){
r->data[i][j] = !((i+j)%2) ? ds : -ds;
}
}
return r;
copyMatrix(m, r);
freeMatrix(&r);
}
matrix *transpose(matrix *m){
@ -210,11 +211,11 @@ matrix *dotProduct(matrix *a, matrix *b){
return r;
}
matrix *adjugate(matrix *m){
matrix *cm = cofactor(m);
matrix *r = transpose(cm);
freeMatrix(&cm);
return r;
void adjugate(matrix *m){
cofactor(m);
matrix *t = transpose(cm);
copyMatrix(m, t);
freeMatrix(&t);
}
void invert(matrix *m){
@ -223,10 +224,8 @@ void invert(matrix *m){
fprintf(stderr, "Determinant is 0, the matrix is not invertible\n");
return;
}
matrix *r = adjugate(m);
multiplyMatrix(r, 1/d);
copyMatrix(m, r);
freeMatrix(&r);
adjugate(m);
multiplyMatrix(m, 1/d);
}
void raiseMatrix(matrix *m, int n){

@ -45,13 +45,13 @@ matrix *subMatrix(matrix *m, int row, int col);
long double determinant(matrix *m);
matrix *cofactor(matrix *m);
void cofactor(matrix *m);
matrix *transpose(matrix *m);
matrix *dotProduct(matrix *a, matrix *b);
matrix *adjugate(matrix *m);
void adjugate(matrix *m);
void invert(matrix *m);