/** * This is a little code to do an Euler integration. */ #include #include using std::vector; const double k=0.3; /** * This just does a single mass on a spring. Assume that the vector has * position at [0] and velocity at [1]. */ void springMass(double t,vector x,vector &dx) { dx[0]=x[1]; dx[1]=-k*x[0]; } template void eulerStep(double t,vector &x,double dt,Func &f) { vector dx(x.size()); f(t,x,dx); for(vector::iterator i1=dx.begin(),i2=x.begin(); i1!=dx.end(); ++i1,++i2) { *i2+=dt*(*i1); } } int main(void) { double dt=0.001; vector x(2); x[0]=1.0; x[1]=0.0; for(int i=0; i*dt<100.0; ++i) { eulerStep(i*dt,x,dt,springMass); if(i%(int)(1.0/dt)==0) std::cout << x[0] << " " << x[1] << " " << (0.5*x[1]*x[1]+0.5*k*x[0]*x[0]) << "\n"; } }