Recomiendo encarecidamente no utilizar soluciones de forma cerrada, ya que tienden a ser numéricamente muy inestables. Debe tener mucho cuidado en la forma y el orden de sus evaluaciones de los parámetros discriminantes y otros.
El ejemplo clásico es el de la ecuación cuadrática . Calcular las raíces como te meterá en problemas por polinomios donde desde entonces obtienes cancelación en el numerador. calcular .x 1 , 2 = - b ± √a x2+ b x + c = 0 b≫4acx1=-(b+sign(b) √
X1 , 2= - b ± b2- 4 a c-------√2 a
b ≫ 4 a cX1= - ( b + s i gn ( b ) b2- 4 a c-------√)2 a; X2= cuna1X1
Higham en su obra maestra "Precisión y estabilidad de los algoritmos numéricos" (2ª ed., SIAM) utiliza un método de búsqueda directa para encontrar coeficientes de un polinomio cúbico para el que la solución cúbica analítica clásica da resultados muy inexactos. El ejemplo que da es . Para este polinomio, las raíces están bien separadas y, por lo tanto, el problema no está mal condicionado. Sin embargo, si calcula las raíces utilizando el enfoque analítico y evalúa el polinomio en estas raíces, obtiene un residuo de mientras usa un método estándar estable (el método de matriz complementaria) , el residuo es de ordenO ( 10 - 2 ) O ( 10 - 15 ) O ( 10 - 11 )[ a , b , c ] = [ 1.732 , 1 , 1.2704 ]O ( 10- 2)O ( 10- 15). Propone una ligera modificación al algoritmo, pero incluso entonces, puede encontrar un conjunto de coeficientes que conducen a residuos de que definitivamente no es bueno. Ver p480-481 del libro mencionado anteriormente.O ( 10- 11)
En su caso, aplicaría el método de Bairstow . Utiliza una combinación iterativa de iteración de Newton en formas cuadráticas (y luego se resuelven las raíces de la cuadrática) y la deflación. Se implementa fácilmente e incluso hay algunas implementaciones disponibles en la web.