import java.lang.Math; /** * 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) * */ public class CuadraticaCodOrientadoObjetos { // Coeficientes del polinomio private double A, B, C; /** * Constructor de la clase * * @param a Coeficiente cuadratico * @param b Coeficiente lineal * @param c Coeficiente independiente */ public CuadraticaCodOrientadoObjetos(double a, double b, double c) { A = a; B = b; C = c; } /** * Evalua la funcion cuadratica * @param x Valor en que se evaluara la funcion * * @return Evaluacion de la funcion cuadratica en x */ private double f(double x) { return (x * x * A + x * B + C); } /** * Evalua la derivada de la funcion cuadratica * @param x Valor en que se evaluara la funcion * * @return Evaluacion de la funcion derivada en x */ private double df(double x) { return (2.0 * x * A + B); } /** * Metodo Newton-Raphson: x = x - f(x)/f'(x) * @param x Valor inicial para hacer la busqueda de la raiz * @param ni Numero de iteraciones * * @return La raiz buscada */ private double metodoNewtonRapson(double x, int ni) { for (int i = 0; i < ni; i++) { x = x - (f(x) / df(x)); } return x; } /** * Evalua el valor X en la funcion cuadratica * @param x Valor en que se evaluara la funcion * * @return Evaluacion de la funcion cuadratica en x */ private void evalua(double x) { System.out.println(" Evaluacion Raiz (" + x + "): " + f(x)); } /** * Calculo de las raices del polinomio */ public void raices() { // Calculo del discriminante double d = B * B - 4.0 * A * C; double X1, X2, x; // Raices reales if (d >= 0.0) { System.out.println(""); System.out.println("Raices Reales (" + A + ")X^2 + (" + B + ")X + (" + C + ") = 0"); System.out.println("Chicharronera 1"); X1 = (-B + Math.sqrt(d)) / (2.0 * A); X2 = (-B - Math.sqrt(d)) / (2.0 * A); // Evalua el calculo de la raiz evalua(X1); evalua(X2); System.out.println(""); System.out.println("Chicharronera 2"); X1 = (-2.0 * C) / (B + Math.sqrt(d)); X2 = (-2.0 * C) / (B - Math.sqrt(d));; // Evalua el calculo de la raiz evalua(X1); evalua(X2); System.out.println(""); System.out.println("Newton-Rapson"); X1 = Math.round(X1); System.out.print("Valor aproximado de X1 = " + X1); x = metodoNewtonRapson(X1, 8); //System.out.print("X1 = "+x); // Evalua el calculo de la raiz evalua(x); X2 = Math.round(X2); System.out.print("Valor aproximado de X2 = " + X2); x = metodoNewtonRapson(X2, 8); // Evalua el calculo de la raiz evalua(x); } else { // Raices complejas System.out.println("Raices Complejas ..."); } } // Funcion Principal .... public static void main(String[] args) { CuadraticaCodOrientadoObjetos cu1 = new CuadraticaCodOrientadoObjetos(1.0, 4.0, 1.0); cu1.raices(); CuadraticaCodOrientadoObjetos cu2 = new CuadraticaCodOrientadoObjetos(1.0, 62.1, 1.0); cu2.raices(); } }