Professional Documents
Culture Documents
Rigid Body Free 071213
Rigid Body Free 071213
m
% Analytical Solution for Free Rotational Motion
% Copyright (c) 2016 by John E. Cochran, Jr., All Rights Reserved
close all
clear all
clc
A = 100
B = 250
C = 300
psi0 = 0
omegax0 = 0.1
omegay0 = 0.15
omegaz0 = 0.16
Hx0 = omegax0*A
Hy0 = omegay0*B
Hz0 = omegaz0*C
T = (A*omegax0*omegax0 + B*omegay0*omegay0 + C*omegaz0*omegaz0)/2
H = sqrt(A*omegax0*A*omegax0 + B*omegay0*B*omegay0 + C*omegaz0*C*omegaz0)
P = sqrt((2*C*T - H*H)/(A*(C-A)))
Q = sqrt((2*C*T - H*H)/(B*(C-B)))
R = sqrt((H*H - 2*A*T)/(C*(C-A)))
p = A*P/H
q = B*Q/H
r = C*R/H
k = sqrt(((B-A)*(2*C*T - H*H))/((C-B)*(H*H - 2*A*T)))
lambda = sqrt(((C-B)*(H*H - 2*A*T))/(A*B*C))
snv = -omegay0*B/(q*H)
cnv = omegax0*A/(p*H)
dnv = omegaz0*C/(r*H)
m = k*k
N = 3000.0
for i =1:N
t(i) = (i - 1)/10;
lambdat = lambda*t(i);
[snlambdat, cnlambdat, dnlambdat] = ellipj(lambdat, m);
%snlambdat = sn(lambda*t(i));
%cnlambdat = cn(lambda*t(i));
%dnlambdat = dn(lambda*t(i));
delta = 1 - k*k* snlambdat^2*snv^2;
snu = (snlambdat*cnv*dnv - snv*cnlambdat*dnlambdat)/delta;
cnu = (cnlambdat*cnv + snlambdat*snv*dnv*dnlambdat)/delta;
dnu = (dnlambdat*dnv + k*k*snv*cnv*snlambdat*cnlambdat)/delta;
omegax(i) = P*cnu;
omegay(i) = Q*snu;
omegaz(i) = R*dnu;
tanphi(i) = (B/C)*(omegay(i)/omegaz(i));
phi(i) = atan(tanphi(i));
sinphisquared(i) = tanphi(i)^2/(1 + tanphi(i)^2);
psidot(i) = (H/C)*( 1 + ((C-B)/B)*sinphisquared(i));
if ( i - 2) < 0
psi(i) = psi0;
end
if i > 1
psi(i) = psidot(i)*(t(i) - t(i-1)) + psi(i-1);
end
Hx(i) = A*omegax(i);
Hy(i) = B*omegay(i);
Hz(i) = C*omegaz(i);
TT(i) = (Hx(i)^2/A + Hy(i)^2/B + Hz(i)^2/C)/2;
HH(i) = sqrt(Hx(i)^2 + Hy(i)^2 + Hz(i)^2);
1 of 2
2 of 2
-sin(theta(i));...
0; 0 0 1];