Résoudre des Équation du second degré dans C++
Je suis en train d'écrire une fonction en C++ qui permet de résoudre pour X à l'aide de l'équation quadratique. C'est ce que j'ai écrit au départ, ce qui semble à travailler aussi longtemps qu'il n'y a pas de nombres complexes pour une réponse:
float solution1 = (float)(-1.0 * b) + (sqrt((b * b) - (4 * a * c)));
solution1 = solution1 / (2*a);
cout << "Solution 1: " << solution1 << endl;
float solution2 = (float)(-b) - (sqrt((b*b) - (4 * a * c)));
solution2 = solution2 / (2*a);
cout << "Solution 2: " << solution2;
Si, par exemple, j'utilise l'équation: x^2 - x - 6, j'obtiens la solution 3, -2 correctement.
Ma question est comment pourrais-je le compte pour les nombres complexes....par exemple, étant donné l'équation:
x^2 + 2x + 5
De problèmes par la main, je voudrais obtenir -1 + 2i -1 - 2i.
Bien, je suppose que deux question, puis-je écrit de mieux, et de rendre compte pour le nombre complexe?
Merci pour toute aide!
- L'autre gars a fourni les bonnes réponses, donc pas de raison pour moi d'essayer et d'audace eux 😉 Cependant, si vous voulez une solution générale à l'équation ax^2+bx+c=0, rappelez-vous que a==0 doit être une valeur valide. Cela aurait pour conséquence une division de zéro, alors vous devez prendre soin de ce cas séparément. Dans ce cas, cela signifierait que vous êtes de gauche avec une équation linéaire avec une seule racine. Cheers !
- Vous impliquer que vous êtes préoccupé par des racines complexes, mais ce que sur la complexité des coefficients dans l'équation d'origine?
- Coefficients complexes nécessite une autre approche complètement. Donc, ça va être la question suivante 🙂 scurrs éteint et se prépare une réponse avant de la main
Vous devez vous connecter pour publier un commentaire.
Quelque chose de ce genre:
Cette façon, vous obtenez les résultats d'une manière similaire pour les deux réels et complexes des résultats (les résultats réels ont juste la partie imaginaire à 0). Serait encore plus jolie avec de pouce!
edit: fixe pour le delta chose et ajouté un chèque pour les cas dégénérés comme un=0. Nuit blanche ftl!
sqrt(delta)
quanddelta < 0
? La plupart des implémentations sera de retourNaN
dans ce cas.sqrt(-delta)
, c'est à dire la racine carrée de la valeur absolue de delta.Une note importante à tous de ce. Les solutions indiquées dans les réponses et dans la question d'origine ne sont pas robustes.
Bien connues de la solution (-b + sqrt(b^2 - 4ac)) /2a est connu pour être non-robuste dans le calcul lorsque ac est très petite compered à b^2, parce que l'on est deux soustrayant des valeurs très similaires. Il est préférable d'utiliser la moindre solution connue 2c /(-b+ sqrt(b^2 -4ac)) pour l'autre racine.
Une solution robuste qui peut être calculé comme:
L'utilisation du signe de(b) s'assure que nous ne sommes pas soustraction de deux valeurs similaires.
Pour l'OP, de modifier cela pour les nombres complexes, comme indiqué par d'autres affiches.
(-b +/- sqrt(b*b - 4*a*c))/(2a)
. BTW: depuistemp
pourrait être 0.0, le plus souvent pré-division de la vérification est nécessaire. (e. g. a,b,c = 1,0,0).temp
ne peut être 0 sib
est 0- Vous plus ou moins de l'avoir, il suffit de vérifier pour voir si la partie qui est à l'intérieur de la racine carrée est négatif et puis garder une trace de ce séparément dans vos réductions.
Vous pourriez fondamentalement, suffit d'utiliser
std::complex<float>
au lieu defloat
pour obtenir de l'aide pour les nombres complexes.De subtiliser l'idée de Blindy:
J'ai essayé le programme sans utiliser de mathématiques.h' en-tête et également essayé différentes logique...mais mon programme ne peut répondre qu'à ceux des équations quadratiques qui ont coefficient de "x carré" comme l'un ..... et où le coefficient de " x " peut être exprimé comme une addition de deux nombres qui sont des facteurs de terme constant.
par exemple. x carré +8x+16;
x carré +7x+12;
etc. ici 8=4+4 & 16=4*4; ici, le coefficient de x peut être exprimée comme une addition de deux nombres qui sont des facteurs de terme constant de 16...
J'ai moi-même n'est pas entièrement satisfait avec elle, mais essayé quelque chose de différent, sans l'aide de la formule pour résoudre une équation quadratique.
code;