/*
 * rosenbrock.c
 *
 *  Created on: Nov 15, 2010
 *      Author: blackpanther
 */

#include <stdlib.h>

int constraint1(const double x[]){
	return x[0] < 100 && x[0] >= -100;
}

int constraint2(const double x[]){
	return x[1] < 100 && x[1] >= -100;
}

double* rosenbrock(const double x[])
{
    static double result[1] = {0};

    result[0] = (1 - x[0]) * (1 - x[0]) + 100 * (x[1] - x[0] * x[0]) * (x[1] - x[0] * x[0]);

    return result;
}

double* gradientRosenbrock(const double x[])
{
    double *result = (double *)malloc(2*sizeof(double));

    result[0] = - 2 * ( 1 - x[0] ) - 400 * x[0] * ( x[1] - x[0] * x[0] );
    result[1] = 200 * ( x[1] - x[0] * x[0] );

    return result;
}

