Resolución de ecuaciones de tercer grado en hoja de cálculo

Pues eso ¿alguien ha implementado las fórmulas?
 

atjamv

Esmeralda
Buenas
¿puede ser que al hacer un cambio de variable, una de las soluciones que obtienes no sea verdadera?
 
Sólo he implementado la primera solución, que es real, ya que las otras dos pueden ser imaginarias y, sobre todo, tienen en medio la unidad i, que aún no sé cómo implementar en la hoja.
El procedimiento no se basa en los típicos cambios de variable que se usan en el cálculo paso a paso, sino que se supone que se recogen todos en las fórmulas. En el primer enlace están las fórmula enteras, en el segundo son iguales pero incluyendo unas variables intermedias, de modo que se condensan un poco algunas partes de la fórmula. Algo así como si la fórmula a*b*c+b*c la pones como a*d+d, con d=b*c.
Por supuesto, no puedo asegurar que la fórmula que he copiado sea verdadera, aunque sería mala suerte que dos páginas distintas condujesen al mismo resultado erróneo.

Si alguien la quiere probar...
= -b/(3*a) - (2^(1/3)*(-b^2 + 3*a*c))/(3*a*(-2*b^3 + 9*a*b*c - 27*a^2*d + RAÍZ(4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2))^(1/3)) + (-2*b^3 + 9*a*b*c - 27*a^2*d + RAÍZ(4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2))^(1/3)/(3*2^(1/3)*a)

y la comprobación

=a*x^3+b*x^2+c*x+d
 
Creo recordar que EXCEL tiene una utilidad (el SOLVER si no recuerdo mal) que te permite obtener el valor de una variable, de manera que otra celda "objetivo" tome un determinado valor. En tu caso se trataría de determinar el valor de la variable "x" para que la celda definida como a*x^3+b*x^2+c*x+d sea igual a 0.
Otra cosa es que te interese por cualquier causa tener ese desarrollo analítico de las soluciones de la ecuación de tercer grado. Pero si no es así, creo que te puede ser más sencillo operar de esa manera.
 

Thales

Esmeralda
Lo más rápido y sencillo es utilizar métodos de cálculo numérico (búsqueda aproximada de la solución).
 
¿Iterando, quieres decir?
Entonces, en lugar de una fórmula, la hoja debería contener una macro.
 

Thales

Esmeralda
¿Lo que necesitas es resolver una ecuación de tercer grado en concreto, o una hoja de Excel que las resuelva?
 
Estaba programando una hoja para resolver un tipo de muros y una de las fórmulas exige resolver una ecuación de tercer grado.
 

wenner

Bronce
Como han comentado con solver o buscar objetivo se puede resolver de forma rápida.

Ahí te va una UDF que resuelve la ecuación por el método de Newton-Raphson, si tienes alguna duda pregunta:

Function EcuacionTercerGrado(a As Double, b As Double, c As Double, d As Double)
'___Método Newton-Raphson
Dim n As Double 'Contador bucle
Dim Funcion() As Double 'Tipo (fx)=0
Dim FuncionDerivada() As Double 'Derivada función
Dim x() As Double 'Matriz de valores
Const Precision = 0.0000000001
Dim Comprobacion As Boolean

ReDim x(0 To 0) As Double
'___Aproximación valor inicial
x(0) = 1

n = 0
Comprobacion = False
Do While Comprobacion = False
ReDim Preserve Funcion(0 To n) As Double
Funcion(n) = a * x(n) ^ 3 + b * x(n) ^ 2 + c * x(n) + d

ReDim Preserve FuncionDerivada(0 To n) As Double
FuncionDerivada(n) = 3 * a * x(n) ^ 2 + 2 * b * x(n) + c

ReDim Preserve x(0 To n + 1) As Double
x(n + 1) = x(n) - Funcion(n) / FuncionDerivada(n)

If Abs(x(n + 1) - x(n)) < Precision Then
EcuacionTercerGrado = x(n + 1)
Comprobacion = True
Else
x(n) = x(n + 1)
End If
Loop
End Function
 
Estaba probando con el método del enlace de thales

Function ter(a,b,c,d)
v=0
w=5
do
w=v
v=-(1/c)*(a*v^3+b*v^2+d)
loop until abs(v-w)<0.01 rem sí, el contador no es igual, este es muy chapucero, pero quiero rularlo YA
ter=v
End function

El tema es que dependiendo de los valores fácilmente se va a la estratosfera y peta.
 

sisifo

Platino
Es el problema del método de Newton-Raphson cuando la curva tiene puntos con tangente horizontal, caso que por otro lado es el habitual en los polinomios cúbicos, salvo cuando las dos raices de la derivada son imaginarias. Para encontrar una raíz, en un polinomio cúbico siempre puedes utilizar el método de biparticiones, dado que para valores suficientemente negativos el signo de la función es el contrario del de "a" y para valores suficientemente grandes el signo de la ecuación siempre es el de "a".

De todos modos, dado que la solución analítica existe, lo mejor es programársela. Siempre será más eficiente, y además puedes saber si existen más raices, lo cual puede ser importante en función de la naturaleza del problema que analizas.
 

wenner

Bronce
Sólo se comprueba que los incrementos sean menores que precisión de la variable. El cociente entre la función y su derivada es la base del método.
 
Es el problema del método de Newton-Raphson cuando la curva tiene puntos con tangente horizontal, caso que por otro lado es el habitual en los polinomios cúbicos, salvo cuando las dos raices de la derivada son imaginarias
La que peta no es la de wenner, sino la macro que escribí yo a toda pastilla basándome en la fórmula del enlace que aportó Thales. Con valores altos de las variables, desborda (supongo que por eso wenner las define como double); con c=0, por supuesto, peta siempre.

De todos modos, dado que la solución analítica existe, lo mejor es programársela. Siempre será más eficiente, y además puedes saber si existen más raices, lo cual puede ser importante en función de la naturaleza del problema que analizas
Esa era la idea inicial, pero el resultado que me da para la primera raíz no funciona.
=-b/(3*a)-(2^(1/3)*(-b^2+3*a*c))/(3*a*(-2*b^3+9*a*b*c-27*a^2*d+RAÍZ(4*(-b^2+3*a*c)^3+(-2*b^3+9*a*b*c-27*a^2*d)^2))^(1/3))+(-2*b^3+9*a*b*c-27*a^2*d+RAÍZ(4*(-b^2+3*a*c)^3+(-2*b^3+9*a*b*c-27*a^2*d)^2))^(1/3)/(3*2^(1/3)*a)
Eso antes de pelearme con las otras dos raíces, que tienen imaginarios, aunque creo que la hoja puede con eso.
 

SBESA

Esmeralda
Hay métodos iterativos específicos para resolver raices de ecuaciones polinómicas de cualquier grado, se pueden obtener mediante métodos relativamente sencillos tanto las raices reales como las imaginarias. Hace ya unos cuantos lustros, en mi época de estudiante, hice un programa en Fortran77 que utilizaba el método de bloom para ecuaciones polinómicas.Es un método iterativo del estilo del Newton-Raphson pero utilizando parábolas en lugar de rectas a la hora de hacer iteraciones en los intervalos donde se encuentran las raices. Es un método muy eficaz y no es complicado. Supongo que se podrá encontrar en bibliografía sobre métodos numéricos. Eso si, esto se puede programar en excel pero tirando de VBA.
 

SBESA

Esmeralda
Perdonad por mi lapsus mental (han pasado 5 lustros), pero se ma ido la chaveta hacia otros temas. El nombre del método es Müller.
 
Arriba