Giới thiệu
Bài viết này sẽ hướng dẫn tính toán đơn giản các phương trình chứa biến symbolic trong MATLAB. Ví dụ được sử dụng là xác định phương trình động lực học của cơ hệ thông qua phương trình LaGrange trong bài viết
Phương trình LaGrange
\begin{aligned} \dfrac{d}{dt}\dfrac{\partial\mathcal{L}}{\partial\dot{q}}-\dfrac{\partial\mathcal{L}}{\partial q}=f \;\;\;(1) \end{aligned}
Trong đó: \mathcal{L} = KE-PE
Phương trình (1) được viết lại thành:
\begin{aligned} B\left(q\right)\ddot{q}+C\left(\dot{q},q\right)+G\left(q\right)=F \;\;\; (2) \end{aligned}
Chương trình Matlab sau sẽ giúp tìm các ma trận B C G F giúp giảm sai sót khi tính bằng tay
Code MATLAB
clear all clc syms theta_1 theta_2 dtheta_1 dtheta_2 real syms g m_1 m_2 l_1 l_2 positive q = [theta_1 theta_2].'; dq = [dtheta_1 dtheta_2].'; p1=[ l_1*sin(theta_1), l_1*cos(theta_1)]; p2=[ l_1*sin(theta_1) + l_2*sin(theta_1 + theta_2), l_1*cos(theta_1) + l_2*cos(theta_1 + theta_2)]; % Potential Energy PE = g*m_1*p1(2) + g*m_2*p2(2); PE = simplify(PE); % Kinetic Energy v1=jacobian(p1,q)*dq; v2=jacobian(p2,q)*dq; KE1 = simplify((1/2)*m_1*v1.'*v1); KE2 = simplify((1/2)*m_2*v2.'*v2); KE = simplify(KE1+KE2); % % Model NOTATION: Spong and Vidyasagar, page 142, Eq. (6.3.12) % B(q)ddq + C(q,dq)*dq + G(q) = D*tau % G = jacobian(PE,q).'; G = simplify(G); B = simplify(jacobian(KE,dq).'); B = simplify(jacobian(B,dq)); syms C real n=max(size(q)); for k=1:n for j=1:n C(k,j)=0; for i=1:n C(k,j)=C(k,j)+(1/2)*(diff(B(k,j),q(i))+diff(B(k,i),q(j))-diff(B(i,j),q(k)))*dq(i); end end end C = simplify(C); ActLoc=[theta_1 theta_2]; D = jacobian(ActLoc,q).';
Hiển thị dạng công thức
Các ma trận B C G F, sau khi tính toán hiển thị khá dài và khó nhìn, có một cách để giúp chúng ta nhìn công thức dễ hơn là sử dung lệnh latex
của MATLAB. Ví dụ muốn hiển thị ma trận G dạng công thức thì gõ latex(G)
trên MATLAB Command Windows và copy kết quả trả về (dòng dưới dòng ans =
).
Tiếp theo vào trang http://www.hostmath.com/ paste như hình, công thức sẽ được hiển thị ở dưới
