Minor reworks of cofactor and adjugate
This commit is contained in:
parent
d34cf6941b
commit
bd25a9380d
21
matrix.c
21
matrix.c
@ -176,7 +176,7 @@ long double determinant(matrix *m){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
matrix *cofactor(matrix *m){
|
void cofactor(matrix *m){
|
||||||
if(!isSquare(m)){
|
if(!isSquare(m)){
|
||||||
fprintf(stderr, "Matrix is not square (%dx%d)\n", m->rows, m->cols);
|
fprintf(stderr, "Matrix is not square (%dx%d)\n", m->rows, m->cols);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -190,7 +190,8 @@ matrix *cofactor(matrix *m){
|
|||||||
r->data[i][j] = !((i+j)%2) ? ds : -ds;
|
r->data[i][j] = !((i+j)%2) ? ds : -ds;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return r;
|
copyMatrix(m, r);
|
||||||
|
freeMatrix(&r);
|
||||||
}
|
}
|
||||||
|
|
||||||
matrix *transpose(matrix *m){
|
matrix *transpose(matrix *m){
|
||||||
@ -210,11 +211,11 @@ matrix *dotProduct(matrix *a, matrix *b){
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
matrix *adjugate(matrix *m){
|
void adjugate(matrix *m){
|
||||||
matrix *cm = cofactor(m);
|
cofactor(m);
|
||||||
matrix *r = transpose(cm);
|
matrix *t = transpose(cm);
|
||||||
freeMatrix(&cm);
|
copyMatrix(m, t);
|
||||||
return r;
|
freeMatrix(&t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void invert(matrix *m){
|
void invert(matrix *m){
|
||||||
@ -223,10 +224,8 @@ void invert(matrix *m){
|
|||||||
fprintf(stderr, "Determinant is 0, the matrix is not invertible\n");
|
fprintf(stderr, "Determinant is 0, the matrix is not invertible\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
matrix *r = adjugate(m);
|
adjugate(m);
|
||||||
multiplyMatrix(r, 1/d);
|
multiplyMatrix(m, 1/d);
|
||||||
copyMatrix(m, r);
|
|
||||||
freeMatrix(&r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void raiseMatrix(matrix *m, int n){
|
void raiseMatrix(matrix *m, int n){
|
||||||
|
4
matrix.h
4
matrix.h
@ -45,13 +45,13 @@ matrix *subMatrix(matrix *m, int row, int col);
|
|||||||
|
|
||||||
long double determinant(matrix *m);
|
long double determinant(matrix *m);
|
||||||
|
|
||||||
matrix *cofactor(matrix *m);
|
void cofactor(matrix *m);
|
||||||
|
|
||||||
matrix *transpose(matrix *m);
|
matrix *transpose(matrix *m);
|
||||||
|
|
||||||
matrix *dotProduct(matrix *a, matrix *b);
|
matrix *dotProduct(matrix *a, matrix *b);
|
||||||
|
|
||||||
matrix *adjugate(matrix *m);
|
void adjugate(matrix *m);
|
||||||
|
|
||||||
void invert(matrix *m);
|
void invert(matrix *m);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user