All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.debatty.java.aggregation.wwLdf Maven / Gradle / Ivy

/**
 * Traduccio a java del fitxer quantif.c per Vicenc Torra Traduccio a C del
 * fitxer quantif.adb per David Nettleton Fitxer original quantif.adb per Vicenc
 * Torra Comencat el dia 990721
 */
package info.debatty.java.aggregation;

//import ww.wwLp;
//import ww.wwLfn;
//import ww.wwLr;
class wwLdf {

    wwLp d;
    wwLfn f;
    static boolean DEBON = false;
    static boolean SEEVAL = false;
    static boolean SEEFUN = false;

    public wwLdf(int num_values) {
        this.initLdf(num_values);
    }

    void put(int num_values) {
        int i;

        if (DEBON) {
            System.out.println("put");
        }

        for (i = 1; i <= num_values; i++) {
            System.out.println(i + ": p=(" + d.punti[i].x + "," + d.punti[i].y + ")");
            if (f.funcioi[i].t == 1) {
                System.out.println("  y=" + f.funcioi[i].m + "*x+" + f.funcioi[i].n);
            } else {
                System.out.println(i + "DOUBLE BERSTEIN:");
                System.out.println(f.funcioi[i].di.x + ":" + f.funcioi[i].di.y);
                System.out.println(f.funcioi[i].vi.x + ":" + f.funcioi[i].di.y);
                System.out.println(f.funcioi[i].oi.x + ":" + f.funcioi[i].di.y);
                System.out.println(f.funcioi[i].wi.x + ":" + f.funcioi[i].di.y);
                System.out.println(f.funcioi[i].diP1.x + ":" + f.funcioi[i].di.y);
            }
        }
        System.out.print((num_values + 1) + ": p=(" + d.punti[num_values + 1].x + ",");
        System.out.println(d.punti[num_values + 1].y + ")");
    } /* eput */


    public double eval4(double x, int num_values) {
        int last, i;
        boolean trobat;
        double y;

        last = 0;
        trobat = false;
        i = 0;
        y = 0.0;

        if (DEBON) {
            System.out.println("eval4");
        }
        //trobat = false; i=1;
        for (trobat = false, i = 1; (!trobat)
                && (i <= num_values); i++) {
            if ((wwbasics.leq(d.punti[i].x, x))
                    && (wwbasics.leq(x, d.punti[i + 1].x))) {
                trobat = true;
                y = (f.funcioi[i]).eval3(x);
                if (SEEVAL) {
                    System.out.println("eval3 ha tornat " + y);
                }
            }
        }

        if (!trobat) {
      //        System.out.println ("wwLdf.eval4.!trobat:");
            //        System.out.println ("x, d.punti[i].x, [i+1]"+x+":"+d.punti[num_values].x+":"+ d.punti[num_values+1].x);

            if (wwbasics.leq(x, d.punti[1].x)) {
                y = 0.0;
                trobat = true;
            }
            if ((!trobat)
                    && (wwbasics.leq(d.punti[num_values + 1].x, x))) {
                y = 1.0;
                trobat = true;
            }
            if (!trobat) {
                System.out.println("EVLdf.NO TROBAT. x:=" + x);
                System.out.println("MINIM:" + d.punti[1].x);
                System.out.println("MAXIM:" + d.punti[num_values].x);
                System.out.print("LongArray (pensa que a aixo se li suma 1!!):");
                System.out.println(":" + num_values);
                System.out.println("FUNCIO ");
                this.put(num_values);
                if (Double.isNaN(x)) {
                    throw new NullPointerException("wwLdf.eval4: x isNaN");
                } else {
                    throw new NullPointerException("wwLdf.eval4: x no Trobat");
                }
                /* raise bignum; */
            }
        }
        return (y);
    } /* eeval */


    public void initLdf(int num_values) {
        int i;
    // Ldf ff;
        // la funcio eval4 accedeix al d[punt+1]
        d = new wwLp(num_values + 1);
        f = new wwLfn(num_values + 1);

        for (i = 1; i <= num_values; i++) {
            // System.out.println ("Num_values:"+num_values+"i:"+i);
            d.punti[i].x = 0.0;
            d.punti[i].y = 0.0;
            f.funcioi[i].t = 1;
            f.funcioi[i].m = 0.0;
            f.funcioi[i].n = 0.0;
            f.funcioi[i].di.x = 0.0;
            f.funcioi[i].vi.x = 0.0;
            f.funcioi[i].oi.x = 0.0;
            f.funcioi[i].wi.x = 0.0;
            f.funcioi[i].diP1.x = 0.0;
            f.funcioi[i].di.y = 0.0;
            f.funcioi[i].vi.y = 0.0;
            f.funcioi[i].oi.y = 0.0;
            f.funcioi[i].wi.y = 0.0;
            f.funcioi[i].diP1.y = 0.0;
        }
    //d.punti[num_values].x = 0.0;
        //d.punti[num_values].y = 0.0;
    } /* initLdf */


    /**
     * **********************************************************************
     */
    /* Aquesta es la funcio que fa tota la feina, se li passa una tira de    */
    /* punts, i a partir d'aqui en construeix una funcio que els interpola.  */
    /* ferQ: Lp -> Ldf                                                       */
    /* N'hi ha LongArray + 1                                                 */
    /**
     * **********************************************************************
     */
    public void ferQ(wwLp dd, int num_values) {
        // Afegeixo la definicio de les variables de Ldf
        d = new wwLp(num_values + 1);
        f = new wwLfn(num_values + 1);

        wwLr L = new wwLr(num_values + 1); //******* Darrera modificacio
        //Ldf f2;
        // Aixo de sota ho trec.
        // wwLp dd = new wwLp (num_values);
        wwfuncio tempFun = new wwfuncio();
        int i;

    // I si canvio d per dd en la definicio de la funcio, aixo ho puc treure
        // dd = d; /* avoids too many indirection passes */
        if (DEBON) {
            System.out.println("ferQ");
        }

        for (i = 1; i <= num_values; i++) /* initialize L and f */ {
            L.rectai[i].m = 0.0;
            L.rectai[i].n = 0.0;
            this.d.punti[i].x = 0.0;
            this.d.punti[i].y = 0.0;
            this.f.funcioi[i].t = 1;
            this.f.funcioi[i].m = 0.0;
            this.f.funcioi[i].n = 0.0;

            this.f.funcioi[i].di.x = 0.0;
            this.f.funcioi[i].vi.x = 0.0;
            this.f.funcioi[i].oi.x = 0.0;
            this.f.funcioi[i].wi.x = 0.0;
            this.f.funcioi[i].diP1.x = 0.0;
            this.f.funcioi[i].di.y = 0.0;
            this.f.funcioi[i].vi.y = 0.0;
            this.f.funcioi[i].oi.y = 0.0;
            this.f.funcioi[i].wi.y = 0.0;
            this.f.funcioi[i].diP1.y = 0.0;
        }
        tempFun.initfunc(num_values);
        this.d.punti[num_values].x = 0.0;
        this.d.punti[num_values].y = 0.0;

        L.calculaLi(dd, num_values);
        if (SEEVAL) {
            System.out.println("\ncontingut de L calculada per calculaLi");
            for (i = 1; i <= num_values; i++) // AQUI HI HAVIA numm_values -1 (*1*)(*!*)
            {
                System.out.println("L.rectai[" + i + "].m=" + L.rectai[i].m);
                System.out.println("L.rectai[" + i + "].n=" + L.rectai[i].n);
            }
        }

        for (i = 1; i <= num_values; i++) // AQUI HI HAVIA num_values - 1 (*1*)(*!*)
        {
            this.d.punti[i].x = dd.punti[i].x;
            this.d.punti[i].y = dd.punti[i].y;
            tempFun.calculaDVOWD(L.rectai[i], L.rectai[i + 1], dd.punti[i],
                    dd.punti[i + 1], num_values);
            this.f.funcioi[i].copia(tempFun);
            if (SEEFUN) {
                System.out.println("\ncalculaDVOWD ha tornat el valor seguent....");
            }
            if (SEEFUN) {
                tempFun.put4();
            }
        }
        this.d.punti[num_values + 1].x = dd.punti[num_values + 1].x;
        this.d.punti[num_values + 1].y = dd.punti[num_values + 1].y;
        //return (f2);
    } /* eferQ */

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy