#ifndef _DYNAMICALSYSTEM_
#define _DYNAMICALSYSTEM_

class DynamicalSystem
{
 protected:
	int NVariable;
	double Precision;
	double Hestimate;
	double Hmin;
 public:
 	DynamicalSystem(int n);
 	virtual void EDP(double t,double *X,double *dX){}
	void RungeKutta(double *y, double t1,double t2);
	void SetPrecision(double p){Precision=p;}
	void SetHmin(double h){Hmin=h;}
	void SetHestimate(double h){Hestimate=h;}
	
 private:
	double *vector(int N);
	void nrerror(char * error_text);
	void free_vector(double *v);
	int odeint(double *ystart, double x1, double x2, double eps,
                   double h1, double hmin, int *nok, int *nbad);
	void rk4(double *y, double *dydx, double x, double h, double *yout);
	void rkqc(double *y, double *dydx, double *x, double htry, 
		  double eps, double *yscal, double *hdid, double *hnext);
};
#endif
