Oscar Benjamin writes: > I think that the basic problem is just this (which is a bug): > > In [86]: expr = f(y(t)).diff(y(t)) > > In [87]: print(expr) > Derivative(f(y(t)), y(t)) > > In [88]: print(expr.subs(t, 0)) > Derivative(f(y(0)), y(0))
Thank you for your detailed answer. Arguably, it's already the first expression that should not be allowed, or must be forced into the respective Subs-expression immediately. Is that your understanding of where the bug is? However it is fixed, the resulting Subs must then be undoable by doit()... There is one related annoyance I noticed: The expression returned by 'series' contains Subs-expressions with a dummy variable 'xi' which is not defined in the global context. Hence, output from 'print' is not pastable into the console, which is an impediment to interactive exploration of expressions. --Marcel > There is code to detect this in some cases but it doesn't work for your > example. If y(t) was just t then you'd get: > > In [89]: expr2 = f(t).diff(t) > > In [90]: print(expr2) > Derivative(f(t), t) > > In [91]: print(expr2.subs(t, 0)) > Subs(Derivative(f(t), t), t, 0) > > The two cases diverge at this line: > https://github.com/sympy/sympy/blob/6dd5c539952c2e8a6a611a421af373689709e726/sympy/core/function.py#L1693 > > Also yes you are right that this would be a lot easier if sympy had functions > as first class objects and could represent abstract derivatives. > > -- > Oscar > > On Tue, 5 Oct 2021 at 18:44, [email protected] <[email protected]> wrote: > > Marcel, > > I believe you are correct that sympy has a problem with this. I ran into > issues when trying to define the behavior of integration and > differentiation for the equation class I have defined. Unfortunately, I > am > completely swamped with committee and large class administration duties > right now, so cannot really spend time on this. My basic thoughts are > that > to make this work well, SymPy would need to be expanded to include the > concept of a partial differential. I believe some of that has been > discussed on this list. I will write again, if I find time to dig up the > discussions. > > Jonathan > > On Tuesday, October 5, 2021 at 12:34:08 PM UTC-5 > [email protected] wrote: > > Hello, > > I am currently converting, for teaching purposes, a number of code > examples from Mathematica to sympy in order to have a purely > Python-based teaching environment (the numerical part has long been > done in Numpy/Scipy). > > I have now run into a situation where I can get some code to work in > a > mathematically correct way, but produce output that makes me think I > am not doing things quite right. > > The task is to use sympy to verify the order of a finite difference > time integrator for an ODE (for the sake of simplicity, autonomous), > which involves Taylor expanding the error with respect to the > stepsize > parameter, the substituting the differential equation and its > derivatives. > > The attached code does just that, here with the implicit midpoint > rule > as a simple example. The issue I have is that sympy does not seem > to > have the notion of an abstract derivative, so the series expansion > produces terms where Subs is used to represent derivatives with an > argument that is not simply a symbol. In the end, however, I have to > force evaluation with doit((), so that terms cancel properly, which > has the side effect that all Subs are resolved and I get nonsense > terms like > > Derivative(f(y(0)), y(0)) > > Of course, I could just ignore this as I have already achieved my > goal, but I am trying to teach "good" sympy and this result strikes > me > as not being formulated the way it should. > > Any comments highly appreciated! > > Marcel > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > > https://groups.google.com/d/msgid/sympy/3a35d4c8-c439-4259-bf03-5ba8a27e4cf3n%40googlegroups.com > . > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/CAHVvXxTW0Dj1BDJBPM9W36L%2BXr-tv7dG9BDEMk6WGkUN-Es88g%40mail.gmail.com > . > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/24925.28896.886178.787285%40localhost.localdomain.
