package graeffe; public class Graeffe { public int n; //grado del polinomio public double[] raicesReales; public Complejo[] raicesComplejas=new Complejo[4]; // dos raíces complejas y sus correspondientes conjugadas public int numReales; //número de raíces reales public int numComplejas; //número de raíces complejas private double[][] a; //tabla de los coeficientes resultantes de elevar el polinomio al cuadrado private int pot2=1; //potencia de dos private int m; //número de iteracción private final int MAX_ITER=10; //máximo número de veces que se eleva al cuadrado private static final double CERO=0.0001; private double[] moduloComplejas=new double[2]; public Graeffe(double[] coef) { n=coef.length-1; //grado del polinomio raicesReales=new double[n]; // un polinomio de grado n tiene como máximo n raíces reales. a= new double[MAX_ITER][n+1]; //la primera fila de la tabla guarda los coeficientes del polinomio for(int j=0; jn)) break; //términos simétricos signo=(s%2==0)? +1: -1; a[m][i]+=signo*2*a[m-1][k]*a[m-1][l]; if(Double.isInfinite(a[m][i])){ break exterior; } } } m++; }while(m0) continue; numComplejas++; //máximo dos raíces complejas, 4 contando sus respectivas conjugadas if(numComplejas<3){ logaritmo=(Math.log(a[m][j+1])-Math.log(a[m][j-1]))/(2*pot2); moduloComplejas[numComplejas-1]=Math.exp(logaritmo); return true; } } return false; } public void hallarRaices(){ tabla(); //el pimer coeficiente a[m][0] es siempre 1 for(int i=1; i "+valorPolinomio(raicesReales[i])); } System.out.println(""); //raíces complejas System.out.println("Raíces complejas"); for(int i=0; i "+valorPolinomio(raicesComplejas[2*i])); System.out.println(raicesComplejas[2*i+1]+" ---> "+valorPolinomio(raicesComplejas[2*i])); } System.out.println(""); } }