#!/usr/bin/python3 # -*- coding: utf-8 -*- import math if __name__ == "__main__": """ Resuelve una ecuacion cuadratica. Encuentra las dos raices que resuelven la ecuacion cuadratica: ax^2 + bx + c = 0. Utiliza la formula general (tambien conocida coloquialmente como el "chicharronera 1 y 2") y el metodo de Newton-Rapson. Parametros: a -- coeficiente cuadratico (debe ser distinto de 0) b -- coeficiente lineal c -- termino independiente Error: Si (a == 0) """ A = 1.0 B = 4.0 C = 1.0 if A == 0.0: print("No es una ecuacion cuadratica") exit(1) # Calculo del discriminante d = B * B - 4.0 * A * C # Raices reales if d >= 0.0: print("\nPolinomio (%f) X^2 + (%f )X + (%f) = 0\n" % (A, B, C)) print("\nChicharronera 1") X1 = (-B + math.sqrt(d)) / (2.0 * A) X2 = (-B - math.sqrt(d)) / (2.0 * A) print( "Raiz (%1.16f), evaluacion raiz: %1.16e" % (X1, (A * X1 * X1 + B * X1 + C)) ) print( "Raiz (%1.16f), evaluacion raiz: %1.16e" % (X2, (A * X2 * X2 + B * X2 + C)) ) print("\nChicharronera 2") X1 = (-2.0 * C) / (B + math.sqrt(d)) X2 = (-2.0 * C) / (B - math.sqrt(d)) print( "Raiz (%1.16f), evaluacion raiz: %1.16e" % (X1, (A * X1 * X1 + B * X1 + C)) ) print( "Raiz (%1.16f), evaluacion raiz: %1.16e" % (X2, (A * X2 * X2 + B * X2 + C)) ) # Metodo Newton-Raphson print("\n\nMetodo Newton-Raphson") x = X1 - 1.0 print("\nValor inicial aproximado de X1 = %1.16f" % x) for i in range(6): x = x - (x * x * A + x * B + C) / (2.0 * x * A + B) print("Raiz (%1.16f), evaluacion raiz: %1.16e" % (x, (A * x * x + B * x + C))) x = X2 - 1.0 print("\nValor inicial aproximado de X2 = %1.16f" % x) for i in range(6): x = x - (x * x * A + x * B + C) / (2.0 * x * A + B) print("Raiz (%1.16f), evaluacion raiz: %1.16e" % (x, (A * x * x + B * x + C))) print("\n") else: # Raices complejas print("Raices Complejas ...")