1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| import static java.lang.System.out;
public class Rac3 {
public static double P3 (double X){
String txt1 = es.LireCh("coeff A = " );
double a3 = Double.valueOf(txt1).doubleValue(); // pour JDK 1.1
String txt2 = es.LireCh("coeff B = " );
double a2 = Double.valueOf(txt2).doubleValue();
String txt3 = es.LireCh("coeff C = " );
double a1 = Double.valueOf(txt3).doubleValue();
String txt4 = es.LireCh("coeff D = " );
double a0 = Double.valueOf(txt4).doubleValue();
double P3 = a3 * Math.pow(X, 3) + a2* Math.pow(X, 2) + a1 * X + a0;// On définit ici le polynôme P3(X)
return P3;
}
public static double dichotomie(double a,double b,int compteur){
if (P3(a) * P3(b)< 0){
double m = (a+b)/2; //m est le milieu de [a,b]
double epsilon= 0.00001; //pour la précision
System.out.println("\n\t Appel récursif numéro "+compteur );
System.out.println("\t On considère à présent l'intervalle : ["+a+" , "+b+"]" ) ; // on affiche un résultat intermédiaire afin de voir si l'intervalle choisi est bon
if(Math.abs(P3(m))<epsilon){ // Math.abs() permet de prendre la valeur absolue
return m;
}
else if (P3(a)*P3(m)>0){
compteur ++;
return dichotomie (m,b,compteur);
}
else compteur ++;
return dichotomie (a,m,compteur);
}
else System.out.println("\t Erreur !! L'intervalle ["+a+" , "+b+"] ne contient aucune solution !!!" );
return 0; // 0 équivalent à l'ensemble vide
}
public static void main(String[]args){
out.println("\n\n" );
out.println ("\t ------------------------------------------------------------------------ " );
out.println ("\t| |" );
out.println ("\t| TPP 02: Résolution de polynôme type a3 X^3 + a2 X^2 + a1 X + a0 = 0 |" );
out.println ("\t| |" );
out.println ("\t ------------------------------------------------------------------------ " );
double res = dichotomie(-1,2,0);
System.out.println(res);
/* Suite du TPP
System.out.println(" Le polynôme à résoudre est : " +a3+" X^3 + "+a2+ " X^2 + " +a1+" X + "+a0+ "= 0" );
double rac1, rac2, rac3;
out.println();
double delta= b*b - 4*a*c;
if (a == 0){
rac1 = (-c/b);
out.printf("Le polynome admet une racine reelle: \nx= "+rac1);
}
else if (delta>0) {
rac1 = (-b-sqrt(delta))/(2*a);
rac2 = (-b+sqrt(delta))/(2*a);
out.println("l'equation admet deux solutions reelles: \nx1= "+rac1+" et x2= "+rac2);
} else
if (delta==0) {
rac1 = -b/(2*a);
out.printf("Le polynome a donc une racine reelle double qui est : %e \n", rac1);
}
else {
rac1 = -b/2*a;
delta = abs(delta); /* Pourqoui l'emploi de la val. absolue de 'delta' ici ?
rac2 = sqrt(delta)/2*a;
out.println("Le polynome admet deux racines complexes qui sont: \nx1= "+rac1+" -i "+ rac2+" et x2= "+rac1+" +i "+ rac2);
}
}
es.attente();
}
*/
}
} |
Partager