From 87bac1a3140696789e703d6d13e61c0a55cfe68f Mon Sep 17 00:00:00 2001
From: fefe <hofer.francois.01@gmail.com>
Date: Fri, 10 Jan 2020 00:46:08 +0100
Subject: [PATCH]  Inv function tested ! Works fine Youhhhhou ! Solve function
 done but not tested yet !

---
 src/main/java/ch/hepia/numeric/Matrix.java  | 16 ++++++++++++++--
 src/test/java/ch/hepia/numeric/AppTest.java | 15 +++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/main/java/ch/hepia/numeric/Matrix.java b/src/main/java/ch/hepia/numeric/Matrix.java
index 63a8e29..bdbe7c5 100644
--- a/src/main/java/ch/hepia/numeric/Matrix.java
+++ b/src/main/java/ch/hepia/numeric/Matrix.java
@@ -105,7 +105,10 @@ public class Matrix {
     }
 
     public Matrix inv() {
-        throw new UnsupportedOperationException("This feature isn't implemented yet");
+        Matrix newMat = this.adjugate();
+        newMat = newMat.mul(1.0/this.det());
+        return newMat;
+
     }
 
     public double det() {
@@ -202,7 +205,16 @@ public class Matrix {
         throw new UnsupportedOperationException("This feature isn't implemented yet");
     }
     public static Vector solve(Matrix m, Vector b) {
-        throw new UnsupportedOperationException("This feature isn't implemented yet");
+        Matrix newMat = m.inv();
+        List<Double> newLst = new ArrayList<>();
+        for (int i = 0; i < newMat.nbCols(); i++){
+            double tot = 0.0;
+            for (int y = 0; y < b.len(); y++){
+                tot += newMat.cols().get(y).get(i) * b.get(i);
+            }
+            newLst.add(tot);
+        }
+        return Vector.of(newLst);
     }
 }
 
diff --git a/src/test/java/ch/hepia/numeric/AppTest.java b/src/test/java/ch/hepia/numeric/AppTest.java
index fcf0f79..4ada9b8 100644
--- a/src/test/java/ch/hepia/numeric/AppTest.java
+++ b/src/test/java/ch/hepia/numeric/AppTest.java
@@ -240,4 +240,19 @@ class VectorTest {
             return (double)i + j;
         }));
     }
+
+    @Test
+    void matrixInv() {
+        List<Vector> lstVec = new ArrayList<>();
+        lstVec.add(Vector.of(1.0, 1.0, 2.0));
+        lstVec.add(Vector.of(1.0, 2.0, 1.0));
+        lstVec.add(Vector.of(2.0, 1.0, 1.0));
+        Matrix m = Matrix.of(lstVec);
+        lstVec = new ArrayList<>();
+        lstVec.add(Vector.of(-0.25, -0.25, 0.75));
+        lstVec.add(Vector.of(-0.25, 0.75, -0.25));
+        lstVec.add(Vector.of(0.75, -0.25, -0.25));
+        assertEquals(m.inv(), Matrix.of(lstVec));
+
+    }
 }
-- 
GitLab