The problem is that with the Euler-Langrange formulas, you need to be
able to do something like expr.diff(f(t)), which is not allowed by
SymPy because f(t) is not a Symbol.  You also need to be able to do
expr.diff(f(t).diff(t)).  So the idea is to have something that acts
like f(t) or f(t).diff(t) but looks and acts like a Symbol to
Derivative.

Aaron Meurer

On Fri, Jun 3, 2011 at 9:11 PM, Renato Coutinho
<renato.couti...@gmail.com> wrote:
> I'm probably missing something basic, but why not use functions x(t),
> v(t) etc. in the first place?
>
> Renato
>
> On Fri, Jun 3, 2011 at 11:56 PM, Aaron Meurer <asmeu...@gmail.com> wrote:
>> I see.  Yeah, that's because of the optimization built in to
>> Derivative.__new__ that does diff(expr, x) => 0 if x is not in
>> expr.free_symbols.  This should probably be factored out to just be a
>> default _eval_derivative action in Expr, so that subclasses can
>> override it.  On the other hand, if your object is going to be
>> something akin to x(t) or x'(t), then t should be in the free_symbols.
>>
>> Aaron Meurer
>>
>> On Fri, Jun 3, 2011 at 8:53 PM, Gilbert gede <gilbertg...@gmail.com> wrote:
>>> Yeah, if you try diff(x,y), the method is not called.
>>> Ronan, I'm not sure how to do what you're describing?  How would I
>>> call that?
>>>
>>> -Gilbert
>>>
>>>
>>> On Jun 3, 7:32 pm, Ronan Lamy <ronan.l...@gmail.com> wrote:
>>>> Le vendredi 03 juin 2011 à 19:16 -0700, Gilbert gede a écrit :
>>>>
>>>> > You're talking about Symbol._eval_derivative?  I tried that within my
>>>> > extended Symbol class.  It returns 0 or 1 testing self == symbol.  I
>>>> > tried making some changes to it, but I don't think I can use it.  I
>>>> > think it doesn't even get called unless you do something like:
>>>> > t = timevaryingsymbols('t')
>>>> > Derivative(2+3*t,t)
>>>> > I think only when t is both part of (expr, symbols, ...) within
>>>> > Derivative's __new__ definition does t's _eval_derivative() method get
>>>> > called.
>>>>
>>>> That seems to be a recent "optimisation" from commit 2361dd86. You
>>>> should revert this to the old behaviour: call
>>>> expr._eval_derivative(symbol) in all cases.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> > On Jun 3, 6:53 pm, Aaron Meurer <asmeu...@gmail.com> wrote:
>>>> > > Can you just get what you want by overriding _eval_derivative()?
>>>>
>>>> > > Aaron Meurer
>>>>
>>>> > > On Fri, Jun 3, 2011 at 7:48 PM, Gilbert gede <gilbertg...@gmail.com> 
>>>> > > wrote:
>>>> > > > I guess I should have asked this as well; is it considered bad to
>>>> > > > write diff() and replace the current Sympy diff() within my code? Or
>>>> > > > is that OK?
>>>>
>>>> > > > -Gilbert
>>>>
>>>> > > > On Jun 3, 6:38 pm, Gilbert gede <gilbertg...@gmail.com> wrote:
>>>> > > >> Yeah, I had read some of them.  I had already thought of writing my
>>>> > > >> own Diff method or something and do substitution with it, but was
>>>> > > >> hoping to have the functionality I want work like standard SymPy
>>>> > > >> operations.  That's what I've been trying to do with my PyDy 
>>>> > > >> classes;
>>>> > > >> make them work more like you would expect other SymPy objects to.
>>>> > > >> I have read through Derivative() and diff(), and couldn't really 
>>>> > > >> find
>>>> > > >> a way to make them do what I want (like I said about my symbol
>>>> > > >> extension no longer having its methods called once it is inside a
>>>> > > >> SymPy add or mul).  I guess what I was hoping for was input on 
>>>> > > >> whether
>>>> > > >> I could make Derivative do what I want with my extended Symbol, as I
>>>> > > >> couldn't really see how.  But if writing my own Diff method is the
>>>> > > >> only option, there's not much I can do then.
>>>>
>>>> > > >> Thanks,
>>>> > > >> -Gilbert
>>>>
>>>> > > >> On Jun 3, 5:53 pm, "Aaron S. Meurer" <asmeu...@gmail.com> wrote:
>>>>
>>>> > > >> > This has actually been discussed quite a bit before (a lot of 
>>>> > > >> > people want to use Lagrangians).  You can search the mailing 
>>>> > > >> > list.  From what I've seen, you will either have to write your 
>>>> > > >> > own custom diff routine or do clever substitution of functions 
>>>> > > >> > and derivatives with symbols.  I don't think I've ever seen 
>>>> > > >> > anyone suggest extending Symbol to hold a time derivative, which 
>>>> > > >> > is essentially just a more formal way of doing the substation 
>>>> > > >> > method.  It might work.
>>>>
>>>> > > >> > Aaron Meurer
>>>>
>>>> > > >> > On Jun 3, 2011, at 6:05 PM, Gilbert Gede wrote:
>>>>
>>>> > > >> > > Hi,
>>>> > > >> > > I was trying to implement some functionality for PyDy for this 
>>>> > > >> > > year's GSoC, and was looking for some advice.
>>>> > > >> > > In dynamics problems, you usually have time-varying quantities, 
>>>> > > >> > > like generalized coordinates, speeds, and accelerations.  
>>>> > > >> > > Often, you want to take the partial derivative of an expression 
>>>> > > >> > > with respect to the time derivative of one of these quantities. 
>>>> > > >> > >  This come up when using Lagrange's Method (or Kane's Method).  
>>>> > > >> > > It's described to some degree here:
>>>> > > >> > >http://en.wikipedia.org/wiki/Lagrangian_mechanics
>>>> > > >> > >https://gist.github.com/1005937
>>>> > > >> > > In Lagrange's Method, you end up taking the partial derivative 
>>>> > > >> > > of the energy with respect to the time derivative of a 
>>>> > > >> > > generalized coordinate.  I'm trying to figure out a way to make 
>>>> > > >> > > this work in PyDy/SymPy. Derivative won't take in anything but 
>>>> > > >> > > a Symbol.
>>>> > > >> > > The only idea I have come up with is to extend Symbol and write 
>>>> > > >> > > my own .diff() method for it which returns a new symbol 
>>>> > > >> > > representing the time differentiation of the original extended 
>>>> > > >> > > Symbol.  Once my new object is inside a Mul or Add sympy 
>>>> > > >> > > object, then my .diff() method is no longer called.
>>>> > > >> > > Can anyone give some insight into how I could get this desired 
>>>> > > >> > > behavior, taking the derivative of an expression wrt a 
>>>> > > >> > > time-differentiated symbol, to work in a way consistent with 
>>>> > > >> > > existing SymPy behavior?  Thanks.
>>>>
>>>> > > >> > > -Gilbert
>>>>
>>>> > > >> > > --
>>>> > > >> > > You received this message because you are subscribed to the 
>>>> > > >> > > Google Groups "sympy" group.
>>>> > > >> > > To post to this group, send email to sympy@googlegroups.com.
>>>> > > >> > > To unsubscribe from this group, send email to 
>>>> > > >> > > sympy+unsubscr...@googlegroups.com.
>>>> > > >> > > For more options, visit this group 
>>>> > > >> > > athttp://groups.google.com/group/sympy?hl=en.
>>>>
>>>> > > > --
>>>> > > > You received this message because you are subscribed to the Google 
>>>> > > > Groups "sympy" group.
>>>> > > > To post to this group, send email to sympy@googlegroups.com.
>>>> > > > To unsubscribe from this group, send email to 
>>>> > > > sympy+unsubscr...@googlegroups.com.
>>>> > > > For more options, visit this group 
>>>> > > > athttp://groups.google.com/group/sympy?hl=en.
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "sympy" group.
>>> To post to this group, send email to sympy@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> sympy+unsubscr...@googlegroups.com.
>>> For more options, visit this group at 
>>> http://groups.google.com/group/sympy?hl=en.
>>>
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "sympy" group.
>> To post to this group, send email to sympy@googlegroups.com.
>> To unsubscribe from this group, send email to 
>> sympy+unsubscr...@googlegroups.com.
>> For more options, visit this group at 
>> http://groups.google.com/group/sympy?hl=en.
>>
>>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To post to this group, send email to sympy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sympy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sympy?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sympy@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to