diff --git a/README.md b/README.md index ed5eb7d3a9aba9da47186ec0d6ba1951fa64a00b..2c3d76818fd517004546d576bad0d10e2373b9ae 100644 --- a/README.md +++ b/README.md @@ -272,10 +272,11 @@ qui sera une alternative de `Vector.linespace(0.0, 5.0, 20)`. ## Fonctionnalités à réaliser sur les matrices -- inverse d'une matrice : $`A^{-1} = \frac{adjugate(A)}{|A|}`$ où $`|A|`$ est le déterminant d'une matrice -- `adjugate` : solution donnée (mais vous pouvez vous référer à [wiki](https://en.wikipedia.org/wiki/Adjugate_matrix)) -- solution d'un problème de type $`A \cdot \vec{x} + \vec{b} = \vec{0}`$ +- méthode `adjugate`: solution donnée (mais vous pouvez vous référer à [wiki](https://en.wikipedia.org/wiki/Adjugate_matrix)) +- méthode `inv`: inverse d'une matrice : $`A^{-1} = \frac{adjugate(A)}{|A|}`$ où $`|A|`$ est le déterminant d'une matrice +- méthode `solve`: solution d'un problème de type $`A \cdot \vec{x} + \vec{b} = \vec{0}`$ - $`\vec{x} = A^{-1} \cdot \vec{b}`$ +- méthode `det`: partiellement écrite. Référez-vous à votre cours de math. ## Fonctionnalités à réaliser sur le pendu diff --git a/src/main/java/ch/hepia/numeric/Matrix.java b/src/main/java/ch/hepia/numeric/Matrix.java index 362242d565d11856a6d8690c84b78a895ac95b98..f39f78b8dd8e801cb694d8035f4f5c59f708a333 100644 --- a/src/main/java/ch/hepia/numeric/Matrix.java +++ b/src/main/java/ch/hepia/numeric/Matrix.java @@ -59,15 +59,38 @@ public class Matrix { public Matrix removed(int i, int j) { throw new UnsupportedOperationException("This feature isn't implemented yet"); } + public Matrix adjugate() { - throw new UnsupportedOperationException("This feature isn't implemented yet"); + Matrix res = Matrix.tabulate(nbRows(), nbCols(), (i, j) -> { + if ((i + j) % 2 == 0) { + return removed(i, j).det(); + } else { + return -removed(i, j).det(); + } + }); + return res; } + public Matrix inv() { throw new UnsupportedOperationException("This feature isn't implemented yet"); } public double det() { - throw new UnsupportedOperationException("This feature isn't implemented yet"); + if (!isSquare()) { + /* do something smart */ + } + + if( nbCols() == 1) { + return get(0,0); + } else if( nbCols() == 2 ){ + return get(0,0)*get(1,1) - get(1,0)*get(0,1); + } else { + /* A vous de jouer */ + + + + throw new UnsupportedOperationException("This feature isn't implemented yet"); + } } public Matrix copy() {