diff options
| author | Soikk | 2022-08-31 22:11:59 +0200 |
|---|---|---|
| committer | Soikk | 2022-08-31 22:11:59 +0200 |
| commit | bd25a9380d75f0860015ec85046ea52053666f54 (patch) | |
| tree | 5a60f88c841b6c3b42b46538fc8861de5afc862d | |
| parent | d34cf6941bfd26d11c8de74ffe390ac6db8be111 (diff) | |
| download | soikk-matrix-bd25a9380d75f0860015ec85046ea52053666f54.tar.xz soikk-matrix-bd25a9380d75f0860015ec85046ea52053666f54.tar.zst | |
Minor reworks of cofactor and adjugate
| -rw-r--r-- | matrix.c | 21 | ||||
| -rw-r--r-- | matrix.h | 4 |
2 files changed, 12 insertions, 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); |
