diff --git a/src/Matrix.java b/src/Matrix.java
index f9cdc83a1356fd0e1c921801f74d36a04c5e0c40..72d4fddf696937ebd6d6019dcf31a279728cc37a 100644
--- a/src/Matrix.java
+++ b/src/Matrix.java
@@ -36,7 +36,7 @@ public class Matrix {
         this.data = new double[x][y];
     }
 
-    public void matrixFill(int x, int y, double[][] tab) throws RuntimeException{
+    public void matrixFill(int x, int y, double[][] tab) throws IndexOutOfBoundsException{
         for (int i = 0; i < x; i++) {
             for (int j = 0; j < y; j++) {
                 this.data[i][j] = tab[i][j];
@@ -44,12 +44,22 @@ public class Matrix {
         }
     }
 
+    public void matrixInitFromArray(double[] tab) throws IndexOutOfBoundsException {
+        int id = 0;
+        for (int i = 0; i < x; i ++) {
+            for (int j = 0; j < y; j ++) {
+                this.data[i][j] = tab[id];
+                id++;
+            }
+        }
+    }
+
     public void matrixRealloc(int x, int y) {
         double[][] tmp = this.data;
-        this.data = new double[x][y];
-        matrixFill(x, y, tmp);
         this.x = x;
         this.y = y;
+        this.data = new double[x][y];
+        matrixFill(x, y, tmp);
     }
 
     public void matrixPrint(String s) {
diff --git a/src/Simplex.java b/src/Simplex.java
index 4390649296492eb6142ed74bd9fbbf9917960f96..7befd71fbe995cfeeee6ef3653ffbe0ca30595e1 100644
--- a/src/Simplex.java
+++ b/src/Simplex.java
@@ -3,14 +3,17 @@ import java.util.Arrays;
 public class Simplex {
     private final Matrix matEcart;
     private final Matrix tabAux;
-
     private final int nbLines;
+    private final int x;
+    private final int y;
 
     public double[][] getTabAux() {
         return tabAux.getDatas();
     }
 
     public Simplex(int x, int y, int nbLines) {
+        this.x = x;
+        this.y = y;
         this.matEcart = new Matrix(x, y);
         this.nbLines = nbLines;
         this.tabAux = new Matrix(x + nbLines + 1, y + 1);
@@ -19,8 +22,8 @@ public class Simplex {
     void createSimplex(Equation eq) {
         int nbContraintes = eq.getNbContraintes();
         // Matrice Amxn
-        for (int i = 0; i < this.matEcart.getX(); i++) {
-            for (int j = 0; j < this.matEcart.getY(); j++) {
+        for (int i = 0; i < this.x; i++) {
+            for (int j = 0; j < this.y; j++) {
                 if (j < nbContraintes) {
                     this.matEcart.setData(i, j, eq.getMatAtId(i, j));
                 } else {
@@ -30,15 +33,15 @@ public class Simplex {
         }
 
         // Membre de droite
-        for (int i = 0; i <= this.matEcart.getX()-2; i++)
-            this.matEcart.setData(i, this.matEcart.getY()-1, eq.getRightVec().get(i));
+        for (int i = 0; i <= this.x - 2; i++)
+            this.matEcart.setData(i, this.y - 1, eq.getRightVec().get(i));
 
         // Fonction obj
         for (int i = 0; i < nbContraintes; i++)
-            this.matEcart.setData(this.matEcart.getX()-1, i, eq.getFuncObj().get(i));
+            this.matEcart.setData(this.x-1, i, eq.getFuncObj().get(i));
 
-        // overwrite la matrice en bas à droite qui est à 1
-        this.matEcart.setData( this.matEcart.getX() - 1, this.matEcart.getY() - 1, 0.0);
+        // overwrite la matrice en bas à droite qui est à 1.
+        this.matEcart.setData( this.x - 1, this.y - 1, 0.0);
     }
 
     /**
@@ -47,38 +50,37 @@ public class Simplex {
      */
     int which_phase(){
         int res = -1;
-        for (int i = 0; i < this.matEcart.getX(); i++) {
-            if(signe(this.matEcart.getData(i, this.matEcart.getY() - 1)))
-                res = i;
+        for (int i = 0; i < this.x; i++) {
+            if(signe(this.matEcart.getData(i, this.y - 1))) res = i;
         }
         return res;
     }
     void tabAux(int line) {
-        Double[] tabRes = new Double[this.matEcart.getY()];
+        Double[] tabRes = new Double[this.y];
         Arrays.fill(tabRes, 0.0);
-        for (int j = 0; j < this.matEcart.getY(); j ++) {
+        for (int j = 0; j < this.y; j ++) {
             if(this.matEcart.getData(line, j) != 0.0) {
                 double res = this.matEcart.getData(line, j) * -1;
                 this.matEcart.setData(line, j, res);
             }
-            for (int i = 0; i < this.matEcart.getX()-1; i ++)
+            for (int i = 0; i < this.x-1; i ++)
                 tabRes[j] -= this.matEcart.getData(i, j);
         }
-        for (int i = 0; i < this.matEcart.getX() + nbLines + 1; i ++) {
-            for (int j = 0; j < this.matEcart.getY() + 1; j ++) {
-                if(i < this.matEcart.getX() && j < this.matEcart.getY())
+        for (int i = 0; i < this.x + nbLines + 1; i ++) {
+            for (int j = 0; j < this.y + 1; j ++) {
+                if(i < this.x && j < this.y)
                     this.tabAux.setData(i, j, this.matEcart.getData(i, j));
-                else if(i >= this.matEcart.getX())
+                else if(i >= this.x)
                     this.tabAux.setData(i, j, this.matEcart.getData(i - 5, j));
-                else if (j == this.matEcart.getY())
+                else if (j == this.y)
                     this.tabAux.setData(i, j, tabRes[i]);
             }
         }
     }
 
     int getFirstNeg() {
-        for (int j = 0; j < this.matEcart.getY(); j++) {
-            if(signe(this.matEcart.getData(this.matEcart.getX() - 1, j))) return j;
+        for (int j = 0; j < this.y; j++) {
+            if(signe(this.matEcart.getData(this.x - 1, j))) return j;
         }
         return -1;
     }
@@ -89,19 +91,19 @@ public class Simplex {
         boolean has_neg = false;
         int id = ligneSortante(firstNeg);
         double pivot = this.matEcart.getData(id, firstNeg);
-        for (int i = 0; i < this.matEcart.getY(); i++) {
+        for (int i = 0; i < this.y; i++) {
             this.matEcart.setData(id, i, this.matEcart.getData(id, i) / pivot);
         }
-        for (int i = 0; i < this.matEcart.getX(); i++) {
+        for (int i = 0; i < this.x; i++) {
             pivot = this.matEcart.getData(i, firstNeg);
-            for (int j = 0; j < this.matEcart.getY(); j++) {
+            for (int j = 0; j < this.y; j++) {
                 if (i != id) {
                     this.matEcart.setData(i, j, this.matEcart.getData(i, j) - pivot * this.matEcart.getData(id, j));
                 }
             }
         }
-        for (int j = 0; j < this.matEcart.getY(); j++)
-            if (signe(this.matEcart.getData(this.matEcart.getX() - 1, j))) {
+        for (int j = 0; j < this.y; j++)
+            if (signe(this.matEcart.getData(this.x - 1, j))) {
                 has_neg = true;
             }
         if (has_neg) pivot();
@@ -110,9 +112,9 @@ public class Simplex {
 
     int ligneSortante(int y) {
         int id = 0;
-        double tmp = this.matEcart.getData(id, this.matEcart.getY() - 1) / this.matEcart.getData(id, y);
-        for (int i = 1; i < this.matEcart.getX() - 1; i++) {
-            double tmp_s = this.matEcart.getData(i, this.matEcart.getY() - 1) / this.matEcart.getData(i, y);
+        double tmp = this.matEcart.getData(id, this.y - 1) / this.matEcart.getData(id, y);
+        for (int i = 1; i < this.x - 1; i++) {
+            double tmp_s = this.matEcart.getData(i, this.y - 1) / this.matEcart.getData(i, y);
             if(tmp_s < tmp) {
                 id = i;
                 tmp = tmp_s;