Tính toán các biến symbolic trong MATLAB

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 Lagrang trong bài viết

Phương trình Lagrang

ddtLq˙Lq=f      (1)\begin{aligned} \dfrac{d}{dt}\dfrac{\partial\mathcal{L}}{\partial\dot{q}}-\dfrac{\partial\mathcal{L}}{\partial q}=f \;\;\;(1) \end{aligned}

Trong đó: L=KEPE\mathcal{L} = KE-PE

Phương trình (1) được viết lại thành:

B(q)q¨+C(q˙,q)+G(q)=F      (2)\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 BB CC GG FF 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 BB CC GG FF, 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

MatlabSymbolic


Đăng bởi@nvtienanh
Không gì là không thể.

GitHubTwitterFacebookLinkedIn