public static Punto[] predictorCorrector(double epsilon, double x0, double y0, double xn, double h, Funcion fun){
        final Punto[] rkPuntos = rungeKuttaOrden4(x0, x0 + 4 * h, h, y0, fun); //calcula los primeros 5 puntos con RKOrden4
        double aux = ((((xn-(x0 + 5*h)) / h) + 1)); //cuenta para sacar el n
        BigDecimal operacion = BigDecimal.valueOf(aux);
        int n = operacion.setScale(0, RoundingMode.HALF_UP).intValueExact(); // n con presicion
        Punto[] puntosPC = new Punto[n + rkPuntos.length]; //arreglo con la longitud de (((xn - x0)/h) + 1)
        //copio los 5 elementos del arreglo de rkPuntos al arreglo puntosPC
        System.arraycopy(rkPuntos, 0, puntosPC,0 ,rkPuntos.length);
        for (int i = 0; i < puntosPC.length - 5; i++) {
            //utilizando los 5 puntos anteriores calculo el proximo utilizando adam Bathford (predictor)
            puntosPC[i + 5] = adamsBathford(h, puntosPC[i + 4].getX(), puntosPC[i + 4].getY(), puntosPC[i + 3].getX(),
                    puntosPC[i + 3].getY(), puntosPC[i + 2].getX(), puntosPC[i + 2].getY(),
                    puntosPC[i + 1].getX(),
                   puntosPC[i + 1].getY(), puntosPC[i].getX(), puntosPC[i].getY(), fun);
            //luego recalculo (corrijo) ese punto utilizando adam Moulton
            puntosPC[i + 5] = corrector(epsilon, puntosPC[i+5], puntosPC[i+4], puntosPC[i+3], puntosPC[i+2],
                    puntosPC[i+1], h, fun);
            //esta secuencia se repite para todos los puntos hasta el xn con excepcion de los primeros 5 puntos
        }
        return puntosPC;
    }