package simplexes; public class Simplexes { //tableau de coordonnées pour le simplex public static double tabsimplex[][]; //coordonnées du baricentre public static double sumx=0; public static double sumy=0; //coordonnées du point de reflexion public static double xr=0; public static double yr=0; //coordonnées du point d'étirement public static double xe=0; public static double ye=0; //coordonnées du point de contraction public static double xc=0; public static double yc=0; //compteur d'itération public static int compt=0; public static void affichage1Ddouble(double tab[]) { //System.out.println("Affichage des valeurs de la fonction appliqués aux points du simplexe : "); for (int i = 0; i < tab.length; i++) { //System.out.println("Point n°" + i); System.out.print(tab[i] + " "); //System.out.println(); } System.out.println(); } public static void affichage2Ddouble(double tab[][]) { //System.out.println("Affichage des coordonnées des points du simplexe : "); for (int i = 0; i < tab.length; i++) { //System.out.println("Point n°" + i); for (int j = 0; j < tab[i].length; j++) { System.out.print(tab[i][j] + " "); } System.out.println(); } System.out.println(); } public static double rosenbrock(double x, double y) { return (((1 - x) * (1 - x)) + 100 * (y - (x * x)) * (y - (x * x))); } public static double[][] etape1(int nbdim) { //generation du simplexe de base if (nbdim > -1) { double tabcoord[][] = new double[nbdim + 1][nbdim]; for (int i = 0; i < nbdim + 1; i++) { for (int j = 0; j < nbdim; j++) { if (i == j + 1) { tabcoord[i][j] = 1; //si l'on veut un simplex régulier } else { tabcoord[i][j] = 0; } } } return tabcoord; } else { return null; } } public static void etape2() { //renvoi du tableau de valeurs des points + trier les deux tableaux double tabres[] = new double[tabsimplex.length]; //calcul des résultats de la fonctions appliqués aux points du simplex for (int i = 0; i < tabsimplex.length; i++) { if (tabsimplex[i].length == 2) { tabres[i] = rosenbrock(tabsimplex[i][0], tabsimplex[i][1]); } } affichage1Ddouble(tabres); //trier les tableaux int compt=0; while(compt<2){ compt=0; for(int i=0; itabres[i+1]){ double tabtemp[]=new double[tabsimplex[i].length]; double temp=0; //copie des valeurs de la ligne à modifier dans un tableau temporaire + remplacement des valeurs for(int j=0;j