#include "real.h"
#include "simplex.h"
#include <stdlib.h>
#include <stdio.h>
#define RND ((double)rand()/RAND_MAX)

real fun(real* point){
	real x=point[0];
	real y=point[1];
//	real res= 10*(x-10)*(x-10)+20*(y-20)*(y-20);
	real res= (1-x)*(1-x)+100*(y-x*x)*(y-x*x);
//	real res= (4*x*x+2*y*y+4*x*y+2*y+1)*exp(x);
	return res;
}

int main(){
	int d=2;
	real simplex_size_goal=0.000001;


	real** simplex=(real**)calloc(d+1,sizeof(real*));
	for(int col=0;col<d+1;col++) simplex[col]=(real*)calloc(d,sizeof(real));

	for(int k=0;k<d+1;k++) for(int i=0;i<d;i++)
		simplex[k][i]=1+(k==i? 1 : 0);


	printf("main: initial simplex:\n");
	for(int k=0;k<d+1;k++){
		for(int i=0;i<d;i++) printf(" %g",simplex[k][i]);
		printf("\n");
		}

	downhill_simplex(fun,simplex,d,simplex_size_goal);

	printf("main: final simplex:\n");
	for(int k=0;k<d+1;k++){
		for(int i=0;i<d;i++) printf(" %g",simplex[k][i]);
		printf("\n");
		}

}
