diff --git a/src/main/java/ch/hepia/numeric/Matrix.java b/src/main/java/ch/hepia/numeric/Matrix.java
index 63a8e2900650c38704b24249d67a10822805290c..bdbe7c51965b01bd27b16ce1dd0e80d55fc6ba69 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 fcf0f790abe942dc1576eed0bc7a1a5289c49084..4ada9b87901ab8d1c20f96c0710ac20f8a8688b6 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));
+
+    }
 }