#include "optim.h"

double J(PVecteurRn px) {
	double a,b,c;

	a = 1.0 - px->pvecteur[0];
	b = px->pvecteur[0] * px->pvecteur[0];
	c = px->pvecteur[1] - b * b;
	return a* a + 100.0 * c * c;
}

PVecteurRn gradientJ(PVecteurRn px) {
	PVecteurRn pgradient;
	double x1, x2;

	pgradient = allouerVecteurRn(px->dimension);
	x1 = px->pvecteur[0];
	x2 = px->pvecteur[1];
	pgradient->pvecteur[0] = - 2.0 * (1.0 - x1) - 400.0 * x1 * (x2 - x1 * x1);
	pgradient->pvecteur[1] = 200.0 * (x2 - x1 * x1);
	return pgradient;
}