/*
 *  eulersmethod.c
 *  cs1
 *
 *  Created by Guillermo Gomez on 11/11/09.
 *  Copyright 2009 __MyCompanyName__. All rights reserved.
 *
 */

#include <stdio.h>

#define ee 1e-9
#define eee 1e-9
#define E 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525

double pow(double b, double e);
double f(double x, double y, double t);
double g(double x, double y, double t);
double x(double t);
double y(double t);

int main(void){
	
	double xp = 2, yp = -1, t = 0, dt = 0.25, dx, dy;
	int count = 0;
	do{
		dx = f(xp,yp,t)*dt;
		dy = g(xp,yp,t)*dt;
		xp += dx;
		yp += dy;
		t += dt;
		dx = xp - x(t);
		dy = yp - y(t);
		
		printf("%lf: %lf, %lf, %lf, %lf\n", t, dx, dy, xp, yp );
		
		if(dx < 0) dx *= -1;
		if(dy < 0) dy *= -1;
		count++;
	}while(dx + ee > eee || dy + ee > eee);
	printf("Iterations: %d     t:%lf", count, t);
	system("PAUSE");
	return 0;
}

double f(double x, double y, double t){
	return 3*x + pow(E,2*t);
}

double g(double x, double y, double t){
	return -x + 3*y + t*pow(E,2*t);
}

double x(double t){
	return 3*pow(E,3*t) - pow(E,2*t);
}

double y(double t){
	return pow(E, 3*t) - 3*t*pow(E,2*t) - 2*pow(E, 2*t) - t*pow(E, 2*t);
}
