Je déconseille fortement d'utiliser des solutions sous forme fermée car elles ont tendance à être numériquement très instables. Vous devez être extrêmement prudent dans la manière et l'ordre de vos évaluations des paramètres discriminants et autres.
L'exemple classique est celui de l'équation quadratique . Le calcul des racines comme posera des problèmes pour les polynômes où depuis lors, vous obtenez l'annulation dans le numérateur. Vous devez calculer .x 1 , 2 = - b ± √un x2+ b x + c = 0 b≫4acx1=-(b+sign(b) √
X1 , 2= - b ± b2- 4 a c-------√2 a
b ≫ 4 a cx1=−(b+sign(b)b2−4ac−−−−−−−√)2a;x2=ca1x1
Higham dans son chef-d'œuvre "Accuracy and Stability of Numerical Algorithms" (2e éd., SIAM) utilise une méthode de recherche directe pour trouver les coefficients d'un polynôme cubique pour lesquels la solution cubique analytique classique donne des résultats très imprécis. L'exemple qu'il donne est . Pour ce polynôme, les racines sont bien séparées et le problème n'est donc pas mal conditionné. Cependant, s'il calcule les racines en utilisant l'approche analytique et évalue le polynôme dans ces racines, il obtient un résidu de tout en utilisant une méthode standard stable (la méthode de la matrice compagnon) , le résidu est d'ordreO ( 10 - 2 ) O ( 10 - 15 ) O ( 10 - 11 )[a,b,c]=[1.732,1,1.2704]O(10−2)O(10−15). Il propose une légère modification à l'algorithme, mais même alors, il peut trouver un ensemble de coefficients conduisant à des résidus de qui n'est certainement pas bon. Voir p480-481 du livre mentionné ci-dessus.O(10−11)
Dans votre cas, j'appliquerais la méthode de Bairstow . Il utilise une combinaison itérative d'itération de Newton sur les formes quadratiques (puis les racines du quadratique sont résolues) et de déflation. Il est facilement implémenté et il existe même des implémentations disponibles sur le Web.