#include #include #include #include #define Max 1000000 double x[Max],v[Max]; double xerr[Max],verr[Max]; double xth[Max],vth[Max]; double conv[Max][2]; double dt=0.01,g=1,k=1,m=1,x0=0,v0=0; double T=1; int ItNo=20,NConv=10; int pointno=0; double F(double x){ return -k*x-g; } void Verlet(double *x,double *v,double x1,double v1,double dt){ double Fx=F(x1); *x = x1+(v1+0.5*Fx*dt)*dt; *v = v1+0.5*(Fx+F(*x))*dt; } void EulerIt(double *x,double *v,double x1,double v1,double dt){ *x = x1+v1*dt; *v = v1+F(x1)/m*dt; } void (*It)(double *,double *,double ,double ,double); void setEuler(){ It=&EulerIt; } void setVerlet(){ It=&Verlet; } void Newton(){ x[0]=x0; v[0]=v0; for (int i=1; i