1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
function pendule()
% ---------- %
% Parametres %
% ---------- %
r = 5; % rayon du pendule
m = 2; % masse du pendule
L = 6; % L = P_{\phi} = cst = moment cinetique
dt = 0.002;
duree = 7;
nbpts = duree/dt; % NomBre de PoinTS
% -------------- %
% Initialisation %
% -------------- %
tab = zeros(duree/dt,6); % [t,theta, phi, P_{\theta}, x, y]
tab(1,1) = 0;
tab(1,2) = 0.2*pi; % theta
tab(1,3) = 0; % dans le plan vertical passant pas l'axe des x
tab(1,4) = 0; % P_{\theta} = m*r^2*\dot{\theta} =0 : vitesse angulaire \dot{\theta}=0
tab(1,5) = r*sin(tab(1,2))*cos(tab(1,3)); % x
tab(1,6) = r*sin(tab(1,2))*sin(tab(1,3)); % y
% ---------------------------- %
% Resolution par Runge-Kutta 4 %
% ---------------------------- %
for k = 1:nbpts
a1 = dt * f(tab(k,4), m, r);
b1 = dt * g(tab(k,2), L, m, r);
c1 = dt * h(tab(k,2), L, m, r);
a2 = dt * f(tab(k,4) + a1/2, m, r);
b2 = dt * g(tab(k,2) + b1/2, L, m, r);
c2 = dt * h(tab(k,2) + c1/2, L, m, r);
a3 = dt * f(tab(k,4) + a2/2, m, r);
b3 = dt * g(tab(k,2) + b2/2, L, m, r);
c3 = dt * h(tab(k,2) + c2/2, L, m, r);
a4 = dt * f(tab(k,4) + a3, m, r);
b4 = dt * g(tab(k,2) + b3, L, m, r);
c4 = dt * h(tab(k,2) + c3, L, m, r);
tab(k+1,1) = tab(k,1) + dt;
tab(k+1,2) = tab(k,2) + (a1 + 2*a2 + 2*a3 + a4)/6; % theta
tab(k+1,3) = tab(k,3) + (b1 + 2*b2 + 2*b3 + b4)/6; % phi
tab(k+1,4) = tab(k,4) + (c1 + 2*c2 + 2*c3 + c4)/6; % P_{\theta}
tab(k+1,5) = r*sin(tab(k+1,2))*cos(tab(k+1,3)); % x
tab(k+1,6) = r*sin(tab(k+1,2))*sin(tab(k+1,3)); % y
end;
% --------- %
% Graphique %
% --------- %
plot(tab(:,5),tab(:,6),'r-');
% --------- %
% Fonctions %
% --------- %
function dottheta = f(pth,m,r)
dottheta = pth/(m*r*r);
function dotphi = g(theta,L,m,r)
dotphi = L/(m*r*r*sin(theta)*sin(theta));
function dotp = h(theta,L,m,r)
dotp = (L*L*cos(theta)/(m*r*r*sin(theta)*sin(theta)*sin(theta))) - (m*9.81*r*sin(theta)); |
Partager