2013-06-18 5 views
1

Я пытаюсь получить Lagrangian equations of motion в Matlab, используя символическую панель инструментов. Это включает в себя частичные производные функции и ваших координат, но, похоже, Matlab этого не принимает.Частичная производная с Matlab Symbolic Toolbox для уравнений движения лагранжиана

Так что я хотел бы сделать это в Matlab:

syms t x(t)    % t: time, x(t) position dependent on time 
m = sym('m');   % mass, a constant parameter 
T = m/2*diff(x,t)^2; % kinetic energy 
dTdx = diff(T,x); 
ddTdxDotdt = diff(diff(T,diff(x,t)), t); 

Но как только я пытаюсь различать что-либо в х (или диф (х, т)), Matlab жалуется:

Error using mupadmex 
Error in MuPAD command: The variable is invalid. [stdlib::diff] 

Error in sym/diff (line 44) 
R = mupadmex('symobj::diff', S.s, x.s, int2str(n)); 

Кто-нибудь знает правильный способ справиться с этим?

ответ

1

Matlab должен быть в состоянии сделать это, как вы его написали, но я думаю, что он не любит брать производные по отношению к symfun. Введите whos в командном окне, и вы увидите, что x указан как symfun, а t - всего лишь sym. Справка для diff вид указывает это ограничение. Не будет случая попытаться взять производную от константы по отношению к x(t): diff(1,x) «жалуется» точно так же. Если новые версии Matlab не исправляют это (я на R2012b), я думаю, что вы можете выбрать только схему, используя два экземпляра x.

+0

Итак, используя функцию «subs» для переключения между symfun и sym версиями x, D (x) и т. Д.? –

+0

Да, я думаю, что это возможно с помощью 'subs', хотя и запутанного. См. [Эту тему в Matlab Central] (http://www.mathworks.com/matlabcentral/newsreader/view_thread/312204), например. Вы также можете посмотреть, что делает [этот файл обмена файлами] (http://www.mathworks.com/matlabcentral/fileexchange/23037-lagranges-equations/content/Lagrange.m). – horchler

Смежные вопросы