Как я могу получить символическую функцию в MATLAB в терминах другой символической функции? - PullRequest
0 голосов
/ 21 января 2019
gr = 9.81;     %gravity
syms phi(t) m l
theta=1/3*m*l^2;
phidot=diff(phi,t);
U=m*gr*l/2*cos(phi);
T=1/2*theta*phidot^2+(1/2*phidot*l)^2*m;
L=T-U;
frst=diff(L,phidot);

Код показан выше. Как вы видите, phi (t) является символической функцией, зависящей от времени, а phidot является ее производной (также зависящей от времени). L получается с использованием этих символических функций. Итак, проблема в том, что я не могу вывести L с точки зрения phidot в Matlab. Ошибка происходит следующим образом:

Error using sym/diff (line 26)
All arguments, except for the first one, must not be **symbolic** functions.

Error in pndlm (line 11)
frst=diff(L,phidot)

Есть ли способ вывести символическую функцию в терминах другой символической функции? Если нет, можете ли вы предложить мне другую альтернативу, чтобы избежать такого рода ошибок?

1 Ответ

0 голосов
/ 21 января 2019

Возможный дубликат этого

Если вы хотите дифференцировать L по q, q должно быть переменная. Вы можете использовать подпрограммы, чтобы заменить его на функцию и рассчитать d / dt (dL / dq ') позже.

Помните, что эти производные являются частичными. Следовательно, просто включите переменную явно и получите выражение.

% Variables
syms q qt m l g
theta=1/3*m*l^2;
% Lagrangian
U=m*g*l/2*cos(q);
T=1/2*theta*qt^2+(1/2*qt*l)^2*m;
L=T-U;
% Partial Derivatives
dLdq=diff(L,q)
dLdqt=diff(L,qt)
syms qf(t)
% Time Derivatives
qtf(t)=diff(qf,t)
dLdqf=subs(dLdqt,qt,qtf)
% Solution
m=1;l=1;g=9.81;
dsolve(diff(dLdqf,t)-dLdqf==0)
...