Résolution d'une équation du type ax²+bx+c

book
date_range
comment2 commentaires
remove_red_eye21915 vues

A l'origine, les ordinateurs ont été crées pour automatiser le traitement de tâche dont le processus est répetitif et d'utiliser la puissance de calcul des ordinateurs qui ne cesse d'augmenter. Nous allons ici aborder la résolution d'une équation du type ax²+bx+c

Lors de vos études, vous avez appris (ou aller apprendre) en mathématiques un algorithme très précis pour résoudre les équations du second degré (du type ax²+bx+c). Cependant, vous aurez parfois besoin de procéder à cette résolution pour traiter un problème plus complexe ou pour vérifier que vous n'avez pas fait d'erreur de calcul et vous n'aurez alors besoin non plus de la méthode de résolution (que vous aurez normalement acquis) mais uniquement du résultat. Pour l'obtenir, vous pourrez utiliser votre calculatrice ou un logiciel de résolution d'équations.

Nous allons donc voir comment implémenter cet algorithme en java.  

Comment résoudre cette équation ? 


 

 Il faut tout d'abord demander à l'utilisateur de rentrer les coefficients de l'équation (par exemple, si nous voulons résoudre l'équation 3x²+2x-5, on aura a=3, b=2, c=-5)

 

Etape 1 : Déclarations des variables


  

Nous prendrons ici des variables de type double.  

 


public class Equation_second_degre
{ 
	
	public static void main (String[] args) 
	{
	double a,b,c;     //Déclaration des coefficients de l'équation : variable de type double
		
		System.out.println("Résolution de l'équation ax²+bx+c"); 
		
			//Initialisation des variables

			System.out.println("Saisir la valeur de a:"); 
				a=Clavier.saisirDouble (); 
			System.out.print("Saisir la valeur de b:"); 
				b=Clavier.saisirDouble (); 
			System.out.print("Saisir la valeur de c:"); 
				c=Clavier.saisirDouble (); 
	}
}
		

 

 

Petit point mathématique :


 

Ici, pas de miracle, pour comprendre ce qu'on va noter dans l'algorithme il faut connaître la méthode de résolution d'une équation du second degré. J'ai choisi de considérer le cas où les solutions peuvent être réelles ou complexes. Si vous ne connaissez que la résolution quand les solutions sont réelles, vous pourrez modifier à la fin l'affichage de l'algorithme en notant que "l'équation n'admet pas de solution réelle". Si vous ne connaissez pas le théorème de résolution, il est assez abordable et vous devriez pouvoir le comprendre en le lisant. 

 

Théorème :

Soit $(\mathcal{E})$ une équation du second degré avec a, b et c des réels $(a\neq 0)$ et soit $\Delta$ le discriminant de l'équation.

     1.   Si $\Delta<0$, alors l'équation $(\mathcal{E})$ n'a pas de solution réelle mais possède deux solutions complexes conjuguées ($s_1$ et $s_2$) où

$s_1=\frac{-b-i\sqrt{\Delta}}{2a}\hspace{2cm} s_2=\frac{-b+i\sqrt{\Delta}}{2a}$

 

    2.    Si $\Delta=0$ alors l'équation admet une unique solution réelle $s_0$.

$s_0=\frac{b}{2a}$


    3.    Si $\Delta>0$, alors l'équation $(\mathcal{E})$ admet deux solutions réelles distinctes $s_1$ et $s_2$ 


$s_1=\frac{b-\sqrt{\Delta}}{2a}\hspace{2cm} s_2=\frac{b+\sqrt{\Delta}}{2a}$

 

Etape 2 : Implémentation de l'algorithme


 

 

=> Si vous souhaitez tester l'algorithme que je vous propose, j'utilise une class Clavier pour la récupération de la saisie de l'utilisateur, vous pourrez la retrouver en pièce jointe ci-dessous.  


Nous avons donc besoin de déclarer :

  • Une variable pour le résultat du calcul du déterminant : det.
  • Des variables pour accueillir les solutions : x1 et x2
  • Des variables pour accueillir la partie réelle et la partie imaginaire du résultat (cas complexe) : re et im

 

Remarque :

Dans le théorème nous considérons que a est non nul car si a=0, l'équation n'est plus une équation du second degré mais pour une meilleure gestion des erreurs nous allons quand même considérer ce cas. 

Cas a=0 :

 


double det,x1,x2,re,im;
		
		//Cas a=0

		if (a==0) {
			if(b==0) {
				if(c==0){ 
				System.out.println("Il y a une infinité de solutions"); 
				}
				else{ 
				System.out.println("L'équation n'admet pas de solutions"); 
				}
		} 
		
		else {
			x1=-c/b; 
		System.out.println("L'équation admet pour solution : "+x1); 
		}
		}		

 

Cas a non nul :



	//Cas a non nul

		else{
			det=(b*b)-(4*a*c);  //Calcul du déterminant
		
		//Cas réel : det>0
		
		if(det>0){
			x1=(-b-Math.sqrt(det))/(2*a); //Calcul des solutions réelles
			x2=(-b+Math.sqrt(det))/(2*a); 

			System.out.println("Les 2 solutions réelles sont:"); 
			System.out.println("x1=" +x1); 
			System.out.println("x2=" +x2); 
		} 
		
		//Cas solution double det=0
		
		if(det==0){
			x1=-b/(2*a); 
			System.out.println("la solution double est:" +x1); 
		} 
		
		//Cas complexe : det

		if(det<0){
			re=-b/(2*a); //Calcul de la partie réelle du résultat

			im=Math.sqrt(-det)/(2*a); //Calcul de la partie imaginaire du résultat
		System.out.println("les 2 solutions complexes sont:"); 
		System.out.println("x1=" +re+"+"+im+"i"); 
		System.out.println("x2=" +re+"+"+im+"i"); 
		} 
		} 

 

 

Pièces jointes :  Class Clavier

Articles similaires

Commentaires

Nana - Invité - 27/10/2013 19:24
Merci trop, en effet la dernière ligne c'est
System.out.println("x1=" +re+"+"+im+"i");
System.out.println("x2=" +re+"-"+im+"i");
-> c'est - au lieu de +
n'est ce pas ?
yoann090 - Administrateur - 31/10/2013 13:54
Bonjour, oui vous avez raison, les solutions complexes sont corrigées donc une des deux doit prendre un signe -,
Je vais corriger, merci ;)
1

Ajouter un commentaire

Vous ne disposez pas les autorisations nécessaires pour poster un commentaire.