]> git.xolatile.top Git - soikk-matrix.git/commitdiff
Minor reworks of cofactor and adjugate
authorSoikk <76824648+Soikk@users.noreply.github.com>
Wed, 31 Aug 2022 20:11:59 +0000 (22:11 +0200)
committerSoikk <76824648+Soikk@users.noreply.github.com>
Wed, 31 Aug 2022 20:11:59 +0000 (22:11 +0200)
matrix.c
matrix.h

index 0b9d88f8a866b8f93f209c4215c95d8a0bb9d2a5..1f03129f368512b00f6656bf2ee2050f463b203a 100644 (file)
--- a/matrix.c
+++ b/matrix.c
@@ -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){
index 6dd0d4e7b48cbe21c98ab65da6a38851a5842b32..0b2429ed2d75f3acbd98374c7503bd963b4263d1 100644 (file)
--- a/matrix.h
+++ b/matrix.h
@@ -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);