}
}
-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;
r->data[i][j] = !((i+j)%2) ? ds : -ds;
}
}
- return r;
+ copyMatrix(m, r);
+ freeMatrix(&r);
}
matrix *transpose(matrix *m){
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){
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){
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);