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)); + + } }