#include #include #include #define N 4 const double g = 9.81; //!< constante de gravité double l = 1.0; //!< longueur du pendule double alpha = 3.14/4.0; //!angle d'inclinaison du systeme(ou du vecteur gravite) double *a1, *a2, *a3, *a4,*ec,*ep,*em,*s,*S1,*S2,*S3,*S4; /* conditions initiales de notre probleme */ void init(double *S) { S[0] = 1.0;//-------> theta S[1] = 0.0;//-------> vitesse en theta S[2] = 0.0;//-------> phi S[3] = 0.0;//-------> vitesse en phi } void derive (double *S ,double* dS) { dS[0]= S[1] ; dS[1]= S[3]*S[3]*(sin(2*S[0])/2)-(g/l)*sin(S[0])*cos(alpha) ; //------->acceleration en theta dS[2]= S[3] ; dS[3]= -2*S[1]*S[3]/tan(S[0]) ; //------->acceleration en phi } void RK2(double *S, double h) { int i; derive(S, a1); for(i=0;i s[0] vtheta <-> s[1] phi <-> s[2] vphi <-> s[3] */ s[0] = pi/k; s[1] = sqrt((2*em[0]/(m*l*l))-2*(g*(1-cos(s[0])*cos(alpha))/l)-s[3]*s[3]*s[0]*s[0]); s[2] = 0.0; s[3] = sqrt(g/l); fprintf(stderr,"numero de k=%d\n",k); // CALCUL Ep ,Ec et Em ec[0] = 0.5*m*l*l*(s[3]*s[3]*sin(s[0])*sin(s[0])+s[1]*s[1]); ep[0] = em[0]-ec[0]; fprintf(stderr,"%0.1lf %0.1lf %0.1lf\n",ec[0],ep[0],em[0]); for (i=0; i