- Đăng vào
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
Trong đó:
Phương trình (1) được viết lại thành:
Chương trình Matlab sau sẽ giúp tìm các ma trận 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 , 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