lagranian mechanics

i like this post (click again to cancel)
3
i dont like this post (click again to cancel)

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 "<stdin>", line 1, in <module>
  File "_sage_input_23.py", line 10, in <module>
    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 <module>

  File "/tmp/tmpTPoOKC/___code___.py", line 8, in <module>
    exec compile(u'diff(L,thdot)
  File "", line 1, in <module>

  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 gravatar image ehremington
31 1 4

updated Jun 16 '11

Kelvin Li gravatar image Kelvin Li
423 9 16
i like this answer (click again to cancel)
1
i dont like this answer (click again to cancel)

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

posted Jan 10 '11

kkumer gravatar image kkumer flag of Croatia
96 2 4 6

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[hide preview]

Question tools

Tags:

Stats:

Asked: Jan 08 '11

Seen: 236 times

Last updated: Jan 10 '11

powered by ASKBOT version 0.7.22
Copyright Sage, 2010. Some rights reserved under creative commons license.