import math
import cmath
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
# Hacer que la CPU trabaje a 270 Mhz (overclock) #
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
machine.freq(270000000)
global X1, X2, X3 # Resultados para las raíces
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
# Rutina de solución de 3er orden #
# AX^3 + BX^2 + CX + D = 0 #
#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
def General_Orden3(A, B, C, D):
# Normalizamos los coeficientes dividiendo todo por A
if A == 0:
print("No es una ecuación cúbica.")
return
B = B / A
C = C / A
D = D / A
# Coeficientes para la ecuación reducida: t^3 + pt + q = 0
p = (3 * C - B * B) / 3
q = (2 * B ** 3 - 9 * B * C + 27 * D) / 27
# Discriminante
discriminante = (q / 2) ** 2 + (p / 3) ** 3
if discriminante > 0:
# Una raíz real y dos complejas
u = (-q / 2 + math.sqrt(discriminante)) ** (1 / 3)
v = (-q / 2 - math.sqrt(discriminante)) ** (1 / 3)
X1 = u + v - B / 3
X2 = complex(-(u + v) / 2 - B / 3, (u - v) * math.sqrt(3) / 2)
X3 = complex(-(u + v) / 2 - B / 3, -(u - v) * math.sqrt(3) / 2)
elif discriminante == 0:
# Todas las raíces son reales y al menos dos son iguales
u = (-q / 2) ** (1 / 3)
X1 = 2 * u - B / 3
X2 = -u - B / 3
X3 = X2
else:
# Tres raíces reales (utilizamos cmath para manejar números complejos)
r = math.sqrt(-(p / 3))
theta = math.acos(-q / (2 * r ** 3))
X1 = 2 * r * math.cos(theta / 3) - B / 3
X2 = 2 * r * math.cos((theta + 2 * math.pi) / 3) - B / 3
X3 = 2 * r * math.cos((theta + 4 * math.pi) / 3) - B / 3
# Imprimir resultados
print(f"X1 = {X1}")
print(f"X2 = {X2}")
print(f"X3 = {X3}")
print(" ")
# Ejemplo de uso:
General_Orden3(1, -6, 11, -6) # Soluciones para la ecuación x^3 - 6x^2 + 11x - 6 = 0