# lagranian mechanics

 3 I'm working on using sage to help with the Euler-Lagrange equation in my mechanics class. I have this worked up so far for a simple pendulum. var('m,l,g,th,thdot,thdotdot,t') th = function('th',t) thdot = th.diff(t) thdotdot = thdot.diff(t) L = 1/2*m*l^2*thdot^2 - m*g*l*(1-cos(th)) diff(L,thdot)  but that gives off the error: Traceback (most recent call last): File "", line 1, in File "_sage_input_23.py", line 10, in exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("dmFyKCdtLGwsZyx0aCx0aGRvdCx0aGRvdGRvdCx0JykKdGggPSBmdW5jdGlvbigndGgnLHQpCnRoZG90ID0gdGguZGlmZih0KQp0aGRvdGRvdCA9IHRoZG90LmRpZmYodCkKTCA9IDEvMiptKmxeMip0aGRvdF4yIC0gbSpnKmwqKDEtY29zKHRoKSkKZGlmZihMLHRoZG90KQ=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in File "/tmp/tmpTPoOKC/___code___.py", line 8, in exec compile(u'diff(L,thdot) File "", line 1, in File "/home/eric/sage/local/lib/python2.6/site-packages/sage/calculus/functional.py", line 130, in derivative return f.derivative(*args, **kwds) File "expression.pyx", line 2502, in sage.symbolic.expression.Expression.derivative (sage/symbolic/expression.cpp:11917) File "derivative.pyx", line 216, in sage.misc.derivative.multi_derivative (sage/misc/derivative.c:2191) File "expression.pyx", line 2570, in sage.symbolic.expression.Expression._derivative (sage/symbolic/expression.cpp:12263) TypeError: argument symb must be a symbol  I don't have any idea what all this means other than I'm guessing it doesn't like that I am trying to take the derivative with respect to a function? Any help would be appreciated. asked Jan 08 '11 ehremington 31 ● 2 ● 4 Kelvin Li 443 ● 10 ● 17

 1 Yes. It seems that direct differentiation with respect to function is not possible in sage. See also this ticket. You might try the workaround by using variables in place of functions and then subtituting the functions after differentiation e.g. var('m l g th_fun thdot_fun t') th = function('th',t) L = 1/2*m*l^2*thdot_fun^2 - m*g*l*(1-cos(th_fun)) EulerLagrange = diff(diff(L, thdot_fun).subs(thdot_fun=diff(th)), t) - diff(L, th_fun).subs(th_fun=th)==0 desolve(EulerLagrange, th, ivar=t)  posted Jan 10 '11 kkumer 96 ● 2 ● 4 ● 6

[hide preview]