#include "optim.h"

PVecteurRn gradientPasFixe(PVecteurRn px0, double pas, double epsilon, int nbMaxIterations) {
	PVecteurRn pxOld;
	PVecteurRn pxNew;
	PVecteurRn pgradient;
	PVecteurRn pdescente;
	PVecteurRn pdiff;

	int nbIterations;
	double ecart;

	pxOld = copierVecteurRn(px0);

	nbIterations = 0;
	do {
		//printf("iter %d ",nbIterations +1);
		//affVecteurRn(pxOld);
		pgradient = gradientJ(pxOld);
		pdescente = mulScalVecteurRn(-pas,pgradient);
		//printf("descente%d ",nbIterations);affVecteurRn(pdescente);
		//printf("\n\n");
		pxNew = addVecteurRn(pxOld,pdescente);
		pdiff = difVecteurRn(pxNew,pxOld);
		ecart = norme(pdiff);

		libererVecteurRn(pgradient);
		libererVecteurRn(pdescente);
		libererVecteurRn(pdiff);
		libererVecteurRn(pxOld);
		pxOld = pxNew;
		nbIterations++;
	} while (ecart >= epsilon && nbIterations <= nbMaxIterations);
	printf("Pas fixe : nbIter %d ",nbIterations);


	return pxNew;
}


