j'ai un problème, je dois créer un programme permettant de trouver les racines d'un polynome de degré 3. Pour trouver la première racine, je dois utiliser la dichotomie. La méthode que j'ai faite fonctionne, mais seulement quand je définis les coefficients du polynome dans la méthode P3. Si je rentre les coefficients dans la console, je renconte une erreur et j'aimerai bien savoir pourquoi.
Voici ma méthode dichotomie:
Citation :
public class Polynôme {
public static double P7 (double X){ double P7 = Math. pow(X, 7) - 64 ; // On définit ici le polynôme P7(X) return P7; }
public static double dichotomie(double a,double b,int compteur){
if (P7(a) * P7(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(P7(m))<epsilon){ // Math.abs() permet de prendre la valeur absolue return m; } else if (P7(a)*P7(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){
double res = dichotomie(-1, 2 ,0); // Il faut choisir ici un intervalle où il y a une solution sinon erreur. System.out.print("\n\t La racine réelle de P7(X) est X* = " +res); } }
et voici ma classe équation de degré 3:
Citation :
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
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 }
Marsh Posté le 03-10-2009 à 13:20:11
Bonjour,
j'ai un problème, je dois créer un programme permettant de trouver les racines d'un polynome de degré 3. Pour trouver la première racine, je dois utiliser la dichotomie. La méthode que j'ai faite fonctionne, mais seulement quand je définis les coefficients du polynome dans la méthode P3. Si je rentre les coefficients dans la console, je renconte une erreur et j'aimerai bien savoir pourquoi.
Voici ma méthode dichotomie:
public class Polynôme {
public static double P7 (double X){
double P7 = Math. pow(X, 7) - 64 ; // On définit ici le polynôme P7(X)
return P7;
}
public static double dichotomie(double a,double b,int compteur){
if (P7(a) * P7(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(P7(m))<epsilon){ // Math.abs() permet de prendre la valeur absolue
return m;
}
else if (P7(a)*P7(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){
double res = dichotomie(-1, 2 ,0); // Il faut choisir ici un intervalle où il y a une solution sinon erreur.
System.out.print("\n\t La racine réelle de P7(X) est X* = " +res);
}
}
et voici ma classe équation de degré 3:
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();
}
*/
}
}
Merci de m'aider à faire cela
Message édité par mysty57 le 03-10-2009 à 13:36:41