#include "real.h"

void simplex_update(
		real** simplex, real* f_values, int d,
		int* hi, int* lo, real* centroid){

	*hi=0; real highest=f_values[0];
	*lo=0; real lowest =f_values[0];

	for(int k=1;k<d+1;k++){
		real next=f_values[k];
		if(next>highest){highest=next;*hi=k;}
		if(next<lowest){lowest=next;*lo=k;}
		}

	for(int i=0;i<d;i++){
		real sum=0;
		for(int k=0;k<d+1;k++) if(k!=*hi) sum+=simplex[k][i];
		centroid[i]=sum/d;
		}
}

void simplex_initiate(
			real (*fun)(real*),
			real** simplex, real* f_values, int d,
			int* hi, int* lo, real* centroid){

	for(int k=0;k<d+1;k++) f_values[k]=fun(simplex[k]);

	simplex_update(simplex,f_values,d,hi,lo,centroid);

}
