package optimizacion;

import operaciones.Matriz;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class prueba extends minimos{
    public static void main(String arg[])
    {
        prueba aplica = new prueba();
        double x[] = {2,2};

        aplica.Newton(new Matriz(x));

    }

    /**
     * Funcion a minimizar
     * @param x Matriz
     * @return double
     */

    public double funcion(Matriz r) {
        double f, x = r.obten(0, 0), y = r.obten(1, 0);

        f = 20.0 + x * x - 10.0 * Math.cos(2.0 * 3.1416 * x) + y * y -
            10.0 * Math.cos(2 * 3.1416 * y);

        return f;
    }
    /**
     * Calcula el vector de primeras derivadas
     * @param x Matriz punto de evaluaci�n
     * @return Matriz vector gradiente
     */

    public Matriz Gradiente(Matriz x) {
        double x1, x2;
        double g[] = new double[2];

        x1 = x.obten(0, 0);
        x2 = x.obten(1, 0);

        g[0] = 8.0*x1;
        g[1] = 2.0*x2;

        Matriz grad = new Matriz(g);
        return grad;
    }

    /**
     * Hessiano de la funci�n objetivo
     * @param x Matriz Punto de evaluaci�n
     * @return Matriz
     */

    public Matriz Hessiano(Matriz x) {
        double x1, x2;
        double h[][] = new double[2][2];

        x1 = x.obten(0, 0);
        x2 = x.obten(1, 0);

        h[0][0] = 8;
        h[0][1] = 0;
        h[1][0] = 0;
        h[1][1] = 2;

        Matriz hess = new Matriz(h);
        return hess;
    }
}
