Aide JAVA

Aide JAVA - Java - Programmation

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:  
 
 
 

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
 
  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
Reply

Marsh Posté le 03-10-2009 à 13:20:11   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed