¿Existe una implementación C abierta para la solución de ecuaciones cuárticas:
Estoy pensando en una implementación de la solución de Ferrari. En Wikipedia leí que la solución es computacionalmente estable solo para algunas de las posibles combinaciones de signos de los coeficientes. Pero tal vez tenga suerte ... Obtuve una solución pragmática resolviendo analíticamente usando un sistema de álgebra computacional y exportando a C. Pero si hay una implementación probada, preferiría usar esto. Busco un método rápido y prefiero no usar un buscador de raíz general.
Solo necesito soluciones reales.
polynomials
nonlinear-equations
roots
Highsciguy
fuente
fuente
Respuestas:
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) √
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.
fuente
Ver estos:
Solución de cuárticas y Cubics para los gráficos , publicado originalmente en Gráficos Gems V . El código original está aquí . Ver también esto y esto .
Un método universal para resolver ecuaciones cuárticas .
fuente
Las recetas numéricas en c proporcionan una expresión de forma cerrada para raíces reales de cuadrático y cúbico que presumiblemente tienen una precisión decente. Dado que la solución algebraica del cuarto implica resolver un cubo y luego resolver dos cuadráticos, tal vez un cuarto cerrado con buena precisión no está fuera de discusión.
fuente