| > | restart:with(Student[LinearAlgebra]):with(plots):with(plottools): |
Warning, the protected name . has been redefined and unprotected
Warning, the name changecoords has been redefined
Warning, the name arrow has been redefined
| > | alias(theta=theta(t),phi=phi(t),psi=psi(t)); |
Etude du mouvement gyroscopique de la toupie
mouvement d'une toupie tournant sur son axe de rotation autour d'un point O sans frottement
Définition des Reperes
Repere fixe R0 (X0,Y0,Z0)
Repere mobile R1: rotation theta autour de Z, vecteur rotation et matrice de passage de R0->R1 (cpste de R1 dans R0)
theta= angle de precession
| > | Omega10:=<0,0,diff(theta,t)>;
M01:=<<cos(theta),sin(theta),0>|<-sin(theta),cos(theta),0>|<0,0,1>>; M10:=Transpose(M01); |
Repere mobile R2: rotation phi autour de Y1
phi= angle de nutation (variation d'obliquité de la toupie)
| > | Omega21:=<0,diff(phi,t),0>;
M12:=<<cos(phi),0,-sin(phi)>|<0,1,0>|<sin(phi),0,cos(phi)>>; M21:=Transpose(M12); |
Vecteur rotation de R2/R0
| > | Omega20:=Omega21+M21.Omega10; |
Repere lie au solide R3: rotation psi autour de Z2
psi= rotation propre
| > | Omega32:=<0,0,diff(psi,t)>; |
| > |
Coordonnees de la toupie dans R0
| > | OG:=M01.(M12.<0,0,l>); |
| > | Toupie:=proc(Theta,Phi)
local OG; OG:=vector([cos(Theta)*sin(Phi),sin(Theta)*sin(Phi),cos(Phi)]); arrow(vector([0, 0, 0]),OG,0.05, 0.4, .0, cylindrical_arrow) end proc: |
| > | display(Toupie(Pi/4,Pi/6),scaling=CONSTRAINED, axes=BOXED,labels=[X,Y,Z],title="toupie",orientation=[32,63]); |
![[Plot]](images/Toupie_11.gif)
Visualisation des reperes
| > |
| > | repere:=proc(M,c)
local u1,u2,u3; u1:=M.<1,0,0>: u2:=M.<0,1,0>: u3:=M.<0,0,1>: arrow(vector([0,0,0]),convert(u1,vector),.1, .2, .1,cylindrical_arrow,color=c), arrow(vector([0,0,0]),convert(u2,vector),.1, .2, .1,cylindrical_arrow,color=c), arrow(vector([0,0,0]),convert(u3,vector),.1, .2, .1,cylindrical_arrow,color=c): end proc: |
| > | PR0:=repere(<<1,0,0>|<0,1,0>|<0,0,1>>,black):
PR1:=repere(subs(theta=Pi/4,M01),blue): PR2:=repere(subs(theta=Pi/4,phi=Pi/6,M01.M12),red): display({PR0,PR1},scaling=CONSTRAINED, axes=BOXED,labels=[X,Y,Z],title="repere R1",orientation=[32,63]); display({PR0,PR1,PR2},scaling=CONSTRAINED, axes=BOXED,labels=[X,Y,Z],title="repere R2",orientation=[32,63]); |
![[Plot]](images/Toupie_12.gif)
![[Plot]](images/Toupie_13.gif)
| > |
Mise en équation
vecteur rotation instantané dans R2 et vitesse de G
| > | Omega:=Omega32+Omega21+M21.Omega10; |
| > | OG:=<0,0,l>; VG:=Omega &x OG; |
moment cinétique en G (Z2 axe de revolution), puis en O
| > | MI:=<<I2,0,0>|<0,I2,0>|<0,0,I1>>; |
| > | sigma:=MI.Omega; |
| > | sigma0:=sigma + OG &x (m*VG); |
| > | I20=I2+m*l^2; |
| > | sigma0:=simplify(subs(I2=I20-m*l^2,sigma0)); |
| > |
Energie cinetique
| > | Ec:=1/2*sigma0.Omega; |
moment du poid en O: Mo=OG*mg
| > | P:=M21.<0,0,-m*g>; |
| > | MP:=OG &x P; |
Equation du mouvement dans R2
| > | map(diff,sigma0,t) + Omega20 &x sigma0 - MP=0;eq:=lhs(%): |
Conservation du moment cinetique suivant Z2 (3ieme equation)
| > | sigma0[3]=omega*I1;eq3a:=%/I1:eq3a;
diff(psi,t)=solve(%,diff(psi,t)); rel1:=%: |
Simplification equation 2 avec la 3ieme
| > | eq2:=simplify(subs(rel1,eq[2]));
eq2:=expand(eq2/I20); k=I20/I1;rel2:=%: B=l*m*g/I20; rel3:=%: eq2:=subs(I1=I20/k,I20=l*m*g/B,eq2);eq2:=collect(%,sin(phi)); diff(phi,t$2)=collect(solve(%,diff(phi,t$2)),sin(phi));eq2a:=%: |
simplification de la 1ere equation avec la 3ieme
| > | eq1:=simplify(subs(rel1,eq[1]));
eq1:=expand(eq1/I20);eq1:=subs(I1=k*I20,%); diff(theta,t$2)=solve(%,diff(theta,t$2));eq1a:=%: |
Equations du mouvement
| > | eq1a; eq2a; eq3a; |
avec les parametres
| > | rel2; rel3; |
Recherche des Integrales premieres
Conservation du moment cinetique suivant Z2: 1ere IP
| > | eq3a; IP1:=%: |
Conservation du moment cinetique suivant l'axe Z0 (//e au poid): 2ieme IP
| > | Z0:=M21.<0,0,1>; |
| > | sigma0.Z0=omega*k0*I20; rel2; subs(I20=I1/k,expand(%%/I1)):collect(%,diff(theta,t));IP2:=%: |
En utilisant la première intégrale première, on obtiens la seconde IP
| > | simplify(IP2-IP1*cos(phi)):diff(theta,t)=solve(%,diff(theta,t));IP2:=%: |
conservation de l'energie totale: 3ieme IP
| > | U:=m*g*OG.Z0; rel2,rel3; |
| > | E=Ec+U; IP3:=%: subs(diff(psi,t)=solve(IP1,diff(psi,t)),IP3);
IP3:=subs(I1=I20/k,I20=l*m*g/B,expand(%/I20-(omega^2/2/k=omega^2/2/k))):IP3; |
3ieme Integrale premiere (après simplification)
| > | B*u0=lhs(IP3);rel4:=%:
B*u0=rhs(IP3);IP3a:=%: |
3 integrales premieres du mouvement
| > | IP1;IP2;IP3a; |
| > |
Etude d'une toupie: disque de rayon R sur un axe de longueur l=2R
| > | l:=2*R; |
| > | I1:=1/2*m*R^2; I20:=m*R^2+m*l^2; k:=I20/I1; B:=l*m*g/I20; |
Verification avec le mouvement simple de precession dans le cas phi=Pi/2
| > | phi=Pi/2; rel:=%: |
| > | #eq1a; eq2a; eq3a; |
Report dans les 3 equations du mouvement
| > | subs(phi=Pi/2,eq1a):eval(%);
subs(phi=Pi/2,eq2a):eval(%);diff(theta,t)=solve(%,diff(theta,t)); subs(phi=Pi/2,eq3a):eval(%); |
Solution triviale (g=10, omega=100, R=0.1)
| > | Theta1:=t->4*t; Phi1:=t->Pi/2; Psi1:=t->100*t; |
Mouvement de la toupie
| > | T:=2; N:=50; dT:=T/N;
for i from 1 to N do T:=evalf(i*dT); anim[i]:=Toupie(Theta1(T),Phi1(T)): end do: display([seq(anim[i],i=1..N)],insequence=true,scaling=constrained,orientation=[50,74],axes=BOXED); |
![[Plot]](images/Toupie_78.gif)
Trace de la trajectoire d'un point de l'axe
| > | OG1:=vector([cos(Theta1(t))*sin(Phi1(t)),sin(Theta1(t))*sin(Phi1(t)),cos(Phi1(t))]);
sph := sphere([0,0,0], 0.99): traj:=spacecurve(OG1,t=0..2,color=black,thickness=4): |
| > | display({sph,traj},scaling=constrained, style=patchnogrid, axes=boxed,title="Trajectoire de G (precession)"); |
![[Plot]](images/Toupie_80.gif)
Détermination de la solution dans le cas général
Parametres
| > | R:=1/10; g:=10; Theta:='Theta': Phi:='Phi': |
Equations
| > | subs(theta=Theta(t),phi=Phi(t),eq1a); edp1:=%:
subs(theta=Theta(t),phi=Phi(t),eq2a); edp2:=%: subs(phi=Phi(t),eq3a); |
Conditions initiales
| > | Theta(0)=0,D(Theta)(0)=1.0,Phi(0)=Pi/3,D(Phi)(0)=0;CI:=%:
|
très grande vitesse de rotation de la toupie: omega très grand
| > | omega:=100; Tmax:=1/2; edp1,edp2; |
Resolution
| > | dsol:=dsolve({edp1,edp2,CI},numeric,output=listprocedure); |
| > | Phi1:=rhs(dsol[2]);Theta1:=rhs(dsol[4]);
dPhi1:=rhs(dsol[3]);dTheta1:=rhs(dsol[5]); |
| > | plot(Phi1(t),t=0..Tmax,title="nutation tres faible / omega tres grand"); |
![[Plot]](images/Toupie_95.gif)
| > | plot([dTheta1(t),dPhi1(t),omega-cos(Phi1(t))*dTheta1(t)],t=0..Tmax,legend=["dTheta","dPhi","dPsi"],title="Vitesse angulaire"); |
![[Plot]](images/Toupie_96.gif)
| > |
Trace de la trajectoire d'un point de l'axe
| > | OG1:=vector([cos(Theta1(t))*sin(Phi1(t)),sin(Theta1(t))*sin(Phi1(t)),cos(Phi1(t))]);
sph := sphere([0,0,0], 0.9): traj:=spacecurve(OG1,t=0..2*Tmax,color=black,thickness=4,numpoints=200): |
| > | display({sph,traj},scaling=constrained, style=patchnogrid, axes=boxed,title="Trajectoire de G"); |
![[Plot]](images/Toupie_98.gif)
| > |
On retrouve le mouvement de précésion
grande vitesse de rotation de la toupie: omega grand
| > | omega:=50; Tmax:=1; edp1,edp2; |
Resolution
| > | dsol:=dsolve({edp1,edp2,CI},numeric,output=listprocedure); |
| > | Phi1:=rhs(dsol[2]);Theta1:=rhs(dsol[4]);
dPhi1:=rhs(dsol[3]);dTheta1:=rhs(dsol[5]); |
| > | plot(Phi1(t),t=0..1,title="apparition de feston de nutation"); |
![[Plot]](images/Toupie_107.gif)
| > | plot([dTheta1(t),dPhi1(t),omega-cos(Phi1(t))*dTheta1(t)],t=0..Tmax,legend=["dTheta","dPhi","dPsi"],title="Vitesse angulaire"); |
![[Plot]](images/Toupie_108.gif)
| > | OG1:=vector([cos(Theta1(t))*sin(Phi1(t)),sin(Theta1(t))*sin(Phi1(t)),cos(Phi1(t))]);
sph := sphere([0,0,0], 0.95): traj:=spacecurve(OG1,t=0..Tmax/2,color=black,thickness=4,numpoints=400): |
| > | display({sph,traj},scaling=constrained, style=patchnogrid, axes=boxed,title="Trajectoire de G"); |
![[Plot]](images/Toupie_110.gif)
| > |
cas omega petit
| > | omega:=10; Tmax:=1; edp1,edp2; |
Resolution
| > | dsol:=dsolve({edp1,edp2,CI},numeric,output=listprocedure); |
| > | Phi1:=rhs(dsol[2]);Theta1:=rhs(dsol[4]);
dPhi1:=rhs(dsol[3]);dTheta1:=rhs(dsol[5]); |
| > | plot(Phi1(t),t=0..1,title="apparition de feston de nutation omega grand"); |
![[Plot]](images/Toupie_119.gif)
| > | plot([dTheta1(t),dPhi1(t),omega-cos(Phi1(t))*dTheta1(t)],t=0..Tmax,legend=["dTheta","dPhi","dPsi"],title="Vitesse angulaire"); |
![[Plot]](images/Toupie_120.gif)
| > | OG1:=vector([cos(Theta1(t))*sin(Phi1(t)),sin(Theta1(t))*sin(Phi1(t)),cos(Phi1(t))]);
sph := sphere([0,0,0], 0.95): traj:=spacecurve(OG1,t=0..Tmax,color=black,thickness=4,numpoints=400): |
| > | display({sph,traj},scaling=constrained, style=patchnogrid, axes=boxed,title="Trajectoire de G"); |
![[Plot]](images/Toupie_122.gif)
| > |
cas omega tres petit
| > | omega:=1; Tmax:=1; edp1,edp2; |
Resolution
| > | dsol:=dsolve({edp1,edp2,CI},numeric,output=listprocedure); |
| > | Phi1:=rhs(dsol[2]);Theta1:=rhs(dsol[4]);
dPhi1:=rhs(dsol[3]);dTheta1:=rhs(dsol[5]); |
| > | plot(Phi1(t),t=0..1,title="apparition de feston de nutation omega grand"); |
![[Plot]](images/Toupie_131.gif)
| > | plot([dTheta1(t),dPhi1(t),omega-cos(Phi1(t))*dTheta1(t)],t=0..Tmax,legend=["dTheta","dPhi","dPsi"],title="Vitesse angulaire"); |
![[Plot]](images/Toupie_132.gif)
| > | OG1:=vector([cos(Theta1(t))*sin(Phi1(t)),sin(Theta1(t))*sin(Phi1(t)),cos(Phi1(t))]);
sph := sphere([0,0,0], 0.95): traj:=spacecurve(OG1,t=0..4*Tmax,color=black,thickness=4,numpoints=400): |
| > | display({sph,traj},scaling=constrained, style=patchnogrid, axes=boxed,title="Trajectoire de G"); |
![[Plot]](images/Toupie_134.gif)
| > |
Omega très très petit (mouvement du pendule 3D)
| > | omega:=0.01;Tmax:=1; edp1,edp2; |
Resolution
| > | dsol:=dsolve({edp1,edp2,CI},numeric,output=listprocedure); |
| > | Phi1:=rhs(dsol[2]);Theta1:=rhs(dsol[4]);
dPhi1:=rhs(dsol[3]);dTheta1:=rhs(dsol[5]); |
| > | plot(Phi1(t),t=0..1,title="apparition de feston de nutation omega grand"); |
![[Plot]](images/Toupie_143.gif)
| > | plot([dTheta1(t),dPhi1(t),omega-cos(Phi1(t))*dTheta1(t)],t=0..Tmax,legend=["dTheta","dPhi","dPsi"],title="Vitesse angulaire"); |
![[Plot]](images/Toupie_144.gif)
| > | OG1:=vector([cos(Theta1(t))*sin(Phi1(t)),sin(Theta1(t))*sin(Phi1(t)),cos(Phi1(t))]);
sph := sphere([0,0,0], 0.95): traj:=spacecurve(OG1,t=0..5*Tmax,color=black,thickness=4,numpoints=400): |
| > | display({sph,traj},scaling=constrained, style=patchnogrid, axes=boxed,title="Trajectoire de G"); |
![[Plot]](images/Toupie_146.gif)
FIN !