AMTL - Dvojité kyvadlo (úkol c. 4)

Transkript

AMTL - Dvojité kyvadlo (úkol c. 4)
AMTL - Dvojité kyvadlo (úkol č. 4)
Martin Bodlák
22/05/2011
1
Dvojité kyvadlo
Budeme popisovat chaotické chovánı́ dvojitého kyvadla v čase. Vstupnı́
parametry kyvadla popisuje následujı́cı́ obrázek:
Našı́m cı́lem bude postupně z těchto hodnot počı́tat změnu polohy dvojitého
kyvadla v čase. S rostoucı́m časem se budou měnit pouze parametry ϕ1 a
ϕ2 . Pohyb kyvadla budeme tedy popisovat pomocı́ těchto dvou úhlů.
2
Chovánı́
Chovánı́ dvojitého kyvadla v čase můžeme popsat soustavou diferenciálnı́ch
rovnic pro známé parametry l1 , l2 , m1 , m2 , ϕ1 , ϕ2 a g:
2
∆ϕ = ϕ1 − ϕ2 , M = m1m+m
, L = ll12 , ω 2 = lg1
2
ϕ001 =
02
ω 2 L(− sin ϕ1 + M cos ∆ϕ sin ϕ2 ) − M L(ϕ02
1 cos ∆ϕ + Lϕ2 ) sin ∆ϕ
L − M L cos2 ∆ϕ
ϕ002 =
02
ω 2 cos ∆ϕ sin ϕ1 − ω 2 sin ϕ2 + (ϕ02
1 + M Lϕ2 cos ∆ϕ) sin ∆ϕ
L − M L cos2 ∆ϕ
1
3
Realizace v MATLABu
3.1
Pomocná funkce drawPendulumInit
Tato funkce počı́tá aktuálnı́ polohu obou kyvadel v závislosti na délkách l a
úhlech ϕ.
function [a b c d] = drawPendulumInit(l,phi)
a
b
c
d
=
=
=
=
3.2
l(1)*sin(phi(1));
-l(1)*cos(phi(1));
a + l(2)*sin(phi(2));
b - l(2)*cos(phi(2));
Soustava diferenciálnı́ch rovnic
function dPhi = PendulumDE(t,Phi)
Phi1 = Phi(1);
dPhi1 = Phi(2);
Phi2 = Phi(3);
dPhi2 = Phi(4);
l1 = Phi(5);
l2 = Phi(6);
m1 = Phi(7);
m2 = Phi(8);
g = Phi(9);
dP = Phi1 - Phi2;
M = m2/(m1+m2);
L = l2/l1;
omega = g/l1;
denum = L - M*L*(cos(dP))^2;
dPhi = zeros(9,1);
dPhi(1) = Phi(2);
dPhi(3) = Phi(4);
dPhi(2) = (omega*L*(-sin(Phi1)+M*cos(dP)*sin(Phi2)) M*L*(dPhi1^2*cos(dP)+L*dPhi2^2)*sin(dP))/denum;
dPhi(4) = (omega*cos(dP)*sin(Phi1)-omega*sin(Phi2)+
(dPhi1^2+M*L*dPhi2^2*cos(dP))*sin(dP))/denum;
3.3
Vlastnı́ model
function drawPendulum(l,m,phi)
clear All; clf; pause on;
p = 0.05;% pauza
2
l1 = l(1);% délka kyvadel
l2 = l(2);
phi1 = phi(1);% počátečnı́ úhly kyvadel
phi2 = phi(2);
dphi1 = 0;% počátečnı́ posuny
dphi2 = 0;
m1 = m(1);% hmotnost kyvadel
m2 = m(2);
g = 9.81;% gravitačnı́ zrychlenı́
param = [phi1; dphi1; phi2; dphi2; l1; l2; m1; m2; g];
sol=ode45(@PendulumDE,[0 100], param);
y = sol.y;
phi1arr=y(1,:);
phi2arr=y(3,:);
dtphi1=y(2,:);
dtphi2=y(4,:);
n = length(phi1arr);
%vykreslenı́
range=1.1*(l1+l2);
color = ’b’;
line1color = ’g’;
line2color = ’r’;
linesize = 3;
size = 10;
suspcolor = ’k’;
suspsize = 30;
[a b c d] = drawPendulumInit(l,phi);
move(1,1) = c;
move(1,2) = d;
figure(1)
for i = 1:n
phi1 = phi1arr(i);
phi2 = phi2arr(i);
plot(0,0,’MarkerSize’,suspsize,’Marker’,’.’,’MarkerEdgeColor’,suspcolor);
hold on
[a b c d] = drawPendulumInit([l1 l2],[phi1 phi2]);
plot(a,b,’MarkerSize’,size*m1,’Marker’,’.’,’MarkerEdgeColor’,color);
line([0, a],[0, b],’Color’,line1color,’LineWidth’,linesize);
3
plot(c,d,’MarkerSize’,size*m2,’Marker’,’.’,’MarkerEdgeColor’,color);
line([a, c],[b, d],’Color’,line2color,’LineWidth’,linesize);
axis([-range range -range range]);
axis square;
move(i,1) = c;
move(i,2) = d;
hold off
pause(p);
end
figure(2)
plot(move(1,1),move(1,2),’MarkerSize’,1,’Marker’,’.’,’MarkerEdgeColor’,’k’);
for k=2:length(move(:,1))
plot(move(k,1),move(k,2),’MarkerSize’,1,’Marker’,’.’,’MarkerEdgeColor’,’k’);
line([move(k-1,1), move(k,1)],[move(k-1,2), move(k,2)],
’Color’,’k’,’LineWidth’,1);
hold on;
end
axis([-range range -range range]);
axis square;
hold off;
figure(3)
FFTPLOT(move(:,1));
figure(4)
FFTPLOT(move(:,2));
3.4
Frekvenčnı́ analýza
function FFTPLOT(x)
n = length(x);
x = x-mean(x);
x = fft(x);
k = 1:floor(n/2);
y = 20*log10(abs(x(2:floor(n/2)+1)));
x = log10(2*pi/n*k);
plot(x,y,’k-’)
axis tight
xlabel(’log_{10}{\it\omega}’)
ylabel(’P({\it\omega})[dB]’)
3.5
Atraktor
function drawPendulumAttr(l,m)
l1 = l(1);% délka kyvadel
4
l2 = l(2);
dphi1 = 0;% počátečnı́ posuny
dphi2 = 0;
m1 = m(1);% hmotnost kyvadel
m2 = m(2);
g = 9.81;% gravitačnı́ zrychlenı́
range=1.1*(l1+l2);
for phi1 = 0:0.01*pi:2*pi
for phi2 = 0:0.01*pi:2*pi
param = [phi1; dphi1; phi2; dphi2; l1; l2; m1; m2; g];
sol=ode45(@PendulumDE,[0 50], param);
y = sol.y;
phiC=y(1,end);
phiD=y(3,end);
[a b c d] = drawPendulumInit(l,[phiC phiD]);
plot(c,d,’MarkerSize’,5,’Marker’,’.’,’MarkerEdgeColor’,’k’);
hold on
end
end
hold off
axis([-range range -range range]);
axis square;
3.6
Ukázky výstupu
Ukázka kyvadla, trasy, po které se pohyboval jeho konec, a frekvenčnı́ analýzy
v obou souřadnicı́ch. Budeme uvažovat g = 9.81.
l1 = 1, l2 = 1, m1 = 10, m2 = 10, ϕ1 = π, ϕ2 = π2 :
5
l1 = 2, l2 = 1, m1 = 1, m2 = 3, ϕ1 = π, ϕ2 = π2 :
l1 = 2, l2 = 3, m1 = 3, m2 = 3, ϕ1 = π, ϕ2 = π2 :
6
l1 = 2, l2 = 3, m1 = 3, m2 = 3, ϕ1 = − π2 , ϕ2 = π2 :
7
Atraktor
Atraktor pro l1 = 1, l2 = 1, m1 = 10, m2 = 10:
Atraktor pro l1 = 2, l2 = 1, m1 = 1, m2 = 3:
8

Podobné dokumenty

URL

URL fpůda = 0.01 · (f3 + f3d ) + 0.03 · (f4 + f4d ) + 0.06 · (f5 + f5d ) + 0.1 · (f6 + f6d ) + 0.2 · (f7 + f7d ) + 0.5 · (f8 + f8d ) + 0.1 · (f9 + f9d ). Numerické metody v testovaných softwareových sy...

Více

integrál po krivce

integrál po krivce Příklad. Spočtěte C (z − w)n dz pro n ∈ Z, kde C je kružnice se středem v bodě w. Řešení. Popis kružnice je w + reit, t ∈ [0, 2π], výsledek je 0 pro n 6= −1, 2πi pro n = −1. Příklad. Spočte...

Více

Hypertextová podpora výuky v oblasti automatického řízení

Hypertextová podpora výuky v oblasti automatického řízení tvorbu modelů systémů. Pro obvyklého uživatele však není nutné o implementaci a programování modelů přemýšlet. Základní a již dále nedělitelné jsou pouze bloky obsahující takzvané s-funkce. Jedná s...

Více

rukovet programatora v os unix

rukovet programatora v os unix protect – určuje práva procesu k mapovanému souboru (paměti). Jsou určena konstantami PROT READ (právo ke čtenı́), PROT WRITE (právo k zápisu) a PROT EXEC (právo ke spuštěnı́) a musı́ b...

Více

offline v PDF - Mathematical Assistant on Web

offline v PDF - Mathematical Assistant on Web Veličina x0 (t) je x-ová komponenta rychlosti (udává jak rychle se měnı́ souřadnice x). Totéž platı́ pro ostatnı́ nezávislé proměnné. Vektor (x0 (t), y 0 (t), z 0 (t)) je vektor rychlos...

Více