Ask Your Question

lagranian mechanics

asked 2011-01-08 17:02:19 +0200

ehremington gravatar image

updated 2011-06-16 15:00:53 +0200

Kelvin Li gravatar image

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.

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

but that gives off the error:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "", line 10, in <module>
    exec compile(u'open("","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("dmFyKCdtLGwsZyx0aCx0aGRvdCx0aGRvdGRvdCx0JykKdGggPSBmdW5jdGlvbigndGgnLHQpCnRoZG90ID0gdGguZGlmZih0KQp0aGRvdGRvdCA9IHRoZG90LmRpZmYodCkKTCA9IDEvMiptKmxeMip0aGRvdF4yIC0gbSpnKmwqKDEtY29zKHRoKSkKZGlmZihMLHRoZG90KQ=="),globals())+"\\n"); execfile(os.path.abspath(""))
  File "", line 1, in <module>

  File "/tmp/tmpTPoOKC/", 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/", 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.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2011-01-10 05:45:01 +0200

kkumer gravatar image

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)
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2011-01-08 17:02:19 +0200

Seen: 1,643 times

Last updated: Jan 10 '11