Giải phương trình chuyển động của con lắc đơn- lò xo

conlacdon-loxo

%mo phong con lac don-lo xo
function conlacdon-loxo
clc;close all;clear all;
% 1. Pt Lagrange trong he toa do cuc
syms m L0 g r Dphi phi Dr k D2phi D2r
% Dong nang= dong nang chuyen dong cua lo xo+ dong nang chuyen dong quay
T=m/2*(Dr^2+r^2*Dphi^2);
% The nang= the nang trong truong+the nang lo xo, goc the nang trong truong tai goc 0
U=-m*g*r*cos(phi)+1/2*k*(L0-r)^2;
L=T-U;

% Phuong trinh lagrange: d/dt(dL/dq')-dL/dq=0;
%bien r
dLdr=diff(L,Dr); % Tinh dao ham tung phan dL/dr'
%dao ham ham hop: cac bien r,Dr,phi,Dphi deu phu thuoc vao t
ptL1=diff(dLdr,r)*Dr+diff(dLdr,Dr)*D2r+diff(dLdr,phi)*Dphi+...
diff(dLdr,Dphi)*D2phi-diff(L,r);
ptL1=simple(ptL1); % d/dt(dL/dr')-dL/dr

%bien phi
dLdphi=diff(L,Dphi);
ptL2=diff(dLdphi,r)*Dr+diff(dLdphi,Dr)*D2r+diff(dLdphi,phi)*Dphi+...
diff(dLdphi,Dphi)*D2phi-diff(L,phi);
ptL2=simple(ptL2); % d/dt(dL/dr')-dL/dr

%giai 2 phuong trinh lagrange =0 voi bien la D2r, D2phi, nhu vay 2 bien nay duoc bieu
%dien theo cac bien con lai
sol=solve(ptL1,ptL2,D2r,D2phi);
% Giai 2 PT tim D2r,D2phi (doi chieu ket qua)
D2r=simple(sol.D2r); pretty(D2r);
D2phi=simple(sol.D2phi); pretty(D2phi);

% 2. Tinh va ve dong nang, the nang va nang luong
m=1; k=4; L0=4; g=9.8;
d2r=char(subs(D2r,{'L0', 'k', 'm', 'g', r, Dr, phi, Dphi },...
{4, 4, 1, 9.8,'u(1)','u(2)','u(3)','u(4)'}));
d2phi=char(subs(D2phi,{'L0', 'k', 'm', 'g', r, Dr, phi, Dphi },...
{4, 4, 1, 9.8,'u(1)','u(2)','u(3)','u(4)'}));
fu=inline(['[u(2);',d2r,';u(4);',d2phi,']'],'t','u');
opt=odeset('reltol',1e-6,'abstol',1e-9);
[t,u]=ode45(fu,[0 10],[ 4, 0, pi/2, 0],opt);
r=u(:,1); Dr=u(:,2); phi=u(:,3); Dphi=u(:,4);
T=m/2*(Dr.^2+r.^2.*Dphi.^2);
U=m*g*(-r.*cos(phi))+1/2*k*(L0-r).^2;
E=T+U;
figure(1); plot(t,T,t,U,t,E); grid on; legend('E_k','E_p','E');
figure(2);
subplot(211);plot(t,r,'r'); xlabel('thoi gian'); ylabel('r'); title('r theo t');
subplot(212);plot(t,phi,'g');xlabel('thoi gian'); ylabel('phi'); title('phi theo t');
figure(4); plot(r,phi)
% 3. Ve khong gian pha quy dao cua con lac
figure(3); plot(r,Dr); title('khong gian pha'); xlabel('r'); ylabel('Dr');
x=r.*sin(phi); y=(-1).*r.*cos(phi);
figure(4); % Ve quy dao
plot(x,y,':b'); grid on; hold on;
axis equal; title('Quy dao cua con lac');
% Ve trang thai ban dau cua con lac
h=plot([0 x(1)],[0 y(1)],':b',x(1),y(1),'.r','markersize',50);
axis([-6 6 -12 0]);
%hinh chuyen dong
for k=2:length(y)
set(h(1),'xdata',[0 x(k)],'ydata',[0 y(k)]);
set(h(2),'xdata',x(k),'ydata',y(k)); pause(0.02);
end;
%-----------------------------------End------------------------------------

câu 1 yêu cầu ta chứng minh biểu thức giải tích nên ta sẽ khai báo các biến kiểu sym:

syms m L0 g r Dphi phi Dr k D2phi D2r

biểu thức của động năng:

T=m/2*(Dr^2+r^2*Dphi^2);

ở đây ngoài chuyển động của lò xo ( quả nặng) ta còn có chuyển động quay như trong con lắc lò xo, khi con lắc lò xo ở góc nhỏ thì ta có x=r\phi nên x'= r \phi' (trong matlab hiểu Dphi là đạo hàm cấp 1 của phi )

biểu thức thế năng:

U=-m*g*r*cos(phi)+1/2*k*(L0-r)^2;   

số hạng đầu là thế năng trọng trường, ta chọn mốc thế năng ở vị trí gốc tọa độ, số sạng thứ 2 là thế năng lò xo.

Lagrange của hệ: L=T-U
phương trình Lagrange theo r:
\frac{d}{dt} \left(\frac{\partial L}{\partial r'} \right)-\frac{\partial L}{\partial r}=0
Dòng 14: ta đặt biến dLdr tức là đạo hàm của L theo Dr.
Dòng 16: biểu diễn phương trình Lagrange cho Matlab hiểu, dLdr là biểu thức phụ thuộc vào r, r',  \phi, \phi ' nên ta lấy đạo hàm của nó thì phải lấy đạo hàm từng phần theo từng biến.
tương tự cho biến \phi
Dòng 28: khi đã có được hệ phương trình Lagrange, ta giải lấy nghiệm giải tích ( hê 2 phương trình 2 biến, biểu diễn r'', \phi '' theo các biến còn lại)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

Up ↑

mlcvGru

Random thoughts on Machine Learning, Deep Learning and (sometimes) Computer Vision

LazyT

Góc nhỏ của Quyền

phanlan

we get what we give, sống là cho đi

Codeaholicguy

software engineer, team lead at #kobiton, blogger at @codeaholicguy

Maths 4 Physics & more...

Blog Toán Cao Cấp (M4Ps)

Vatlyvietnam's Blog

Thế Giới Song Song

Darren Wilkinson's research blog

Statistics, computing, data science, Bayes, stochastic modelling, systems biology and bioinformatics

Ông Xuân Hồng

Chia sẻ kiến thức và thông tin về Machine learning

Từ coder đến developer - Tôi đi code dạo

Lập trình viên giỏi không phải chỉ biết code

Computational Biology and Molecular Modelling

An interface between biology, chemistry and computer science

Moriator - I can do it!

Linux dễ dàng hơn bạn nghĩ!

VinaCode

Lập trình & Cuộc sống

Blog của Chiến

Học. Thực hành. Sáng tạo

Bespoke Blog

Science! Culture! Computational Engines!

Vuhavan's Blog

Just another WordPress.com weblog

%d bloggers like this: