2013-06-18 6 views
1

Symbol 도구 상자를 사용하여 Matlab에서 Lagrangian equations of motion을 도출하려고합니다. 이것은 함수와 좌표의 편미분을 포함하지만 matlab은 이것을 받아들이지 않는 것 같습니다.Matlab의 편미분 Lagrangian 운동 방정식을위한 Symbolic Toolbox

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); 

을하지만 최대한 빨리 X 아무것도 차별화하는 시도로 (또는 DIFF를 (X는 t))는, matlab에 불평 :

그래서 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을 입력하면 이 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