5 votos

La fórmula cuadrática falla numéricamente con coeficientes "a" pequeños

Tengo un conjunto de coeficientes cuadráticos a, b y c que hay que resolver para determinar la intersección entre una parábola y una recta en un plano. Estos coeficientes han "llegado" de un algoritmo diferente.

Para el contexto, la cuadrática real que se resuelve es: $$a = 4.3162933554 \times 10^{-11}$$ $$b = 1.0361118521 \times 10^{6}$$ $$c = -4.5813932360 \times 10^{5}$$ donde $f(x)=ax^2+bx+c$ .

Mi problema, sin embargo, es que cuando mi parábola está tan "estirada" que empieza a comportarse como una línea alrededor del área de interés, el coeficiente "a" se vuelve muy pequeño, y en realidad despreciarlo por completo y en su lugar resolver linealmente para b y c funciona perfectamente para la intersección requerida.

En este caso lo que realmente ocurre con la fórmula es que el $-b+\sqrt(b^2-4ac)$ ¡está siendo calculado como 0.0 por el ordenador! (He confirmado que esto no es específico de mi implementación, ya que mi calculadora hace lo mismo. Además, todo esto implica una precisión de punto flotante doble)

Mi pregunta es, ¿cómo puedo abordar la búsqueda de esta raíz de manera óptima? Además, ¿hay otros casos en los que la fórmula puede fallar?

He pensado en prescindir de la $a$ término y simplemente resolver la ecuación linealmente, pero entonces ¿en qué momento se decide hacer eso? Por extensión, ¿cuándo se debe resolver una ecuación cúbica de forma cuadrática?

9voto

andy.holmes Puntos 518

Se puede pasar a la fórmula de solución modificada, según las fórmulas binomiales, $$ x=\frac{-b+\sqrt{b^2-4ac}}{2a}=-\frac{2c}{b+\sqrt{b^2-4ac}}. $$ El caso de cancelación en la primera fórmula dará un cálculo numéricamente estable en la segunda fórmula, dando un valor cercano a $-\frac{c}{b}$ la solución de la aproximación lineal.


En general, la mayoría de los casos con problemas numéricos al calcular las raíces, en el caso de las raíces reales, se evitan determinando primero la variante no canceladora del numerador $$ u=-b-{\rm sign}(b)\sqrt{b^2-4ac} $$ y luego calcular las dos raíces como $$ x_1=\frac{u}{2a},~~~ x_2=\frac{2c}{u}. $$ Después, la discusión sobre la estabilización se centra en la raíz cuadrada, para poder seguir calculándola en caso de desbordamiento o subdesbordamiento del punto flotante.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X