Opened 12 years ago

Last modified 5 years ago

#6480 new defect

.subs_expr() method doesn't work for argument of D derivative operator — at Version 6

Reported by: gmhossain Owned by:
Priority: major Milestone: sage-8.0
Component: symbolics Keywords:
Cc: kcrisman, mjo, eviatarbach, jakobkroeker Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description (last modified by kcrisman)

In computing functional derivative, one needs to vary a functional. For example, in sage-3.4 one can do as follows

sage: f(x) = function('f',x)
sage: df(x) = function('df',x)
sage: g = f(x).diff(x)
sage: g
diff(f(x), x, 1)
sage: g.subs_expr(f(x)==f(x)+df(x))
diff(f(x) + df(x), x, 1)

In new symbolics, if I do the same I get

sage: g
D[0](f)(x)
sage: g.subs_expr(f(x)==f(x)+df(x))
D[0](f)(x)

From #11842, the list of what does/doesn't work:

from sage.all import *


# 1. Fails.
x = var('x')
f = function('f', x)
g = function('g', x)
p = f
print p.substitute_function(f, g) # Outputs "f(x)"



# 2. Fails.
x = var('x')
f = function('f')
g = function('g')
p = f(x)
print p.substitute_function(f(x), g(x)) # Outputs "f(x)"



# 3. Works.
x = var('x')
f = function('f')
g = function('g')
p = f(x)
print p.substitute_function(f, g) # Outputs "g(x)"



# 4. Fails.
x = var('x')
f = function('f')
g = function('g')
p = f(1)
print p.substitute_function(f(1), g(1)) # Outputs "f(1)"



# 5. Works.
x = var('x')
f = function('f')
g = function('g')
p = f(1)
print p.substitute_function(f, g) # Outputs "g(1)"



# 6. Fails.
x = var('x')
f = function('f', x)
g = function('g', x)
p = f.diff()
print p.substitute_function(f, g) # Outputs "D[0](f)(x)"



# 7. Fails.
x = var('x')
f = function('f', x)
g = function('g', x)
p = f.diff()
print p.substitute_function(f(x), g(x)) # Outputs "D[0](f)(x)"



# 8. Works.
x = var('x')
f = function('f')
g = function('g')
p = f(x).diff()
print p.substitute_function(f, g) # Outputs "D[0](g)(x)"



# 9. Fails.
x = var('x')
f = function('f')
g = function('g')
p = f(x).diff()(1)
print p.substitute_function(f(x).diff(), g(x).diff()) # Outputs "D[0](f)(1)"



# 10. Works..
x = var('x')
f = function('f')
g = function('g')
p = f(x).diff()(1)
print p.substitute_function(f, g) # Prints D[0](g)(1).

Change History (6)

comment:1 Changed 11 years ago by kcrisman

  • Cc kcrisman added
  • Report Upstream set to N/A

comment:2 Changed 10 years ago by mjo

  • Cc mjo added

I duped this in #11842. We might be able to make use of the test cases there when this gets fixed.

comment:3 Changed 9 years ago by eviatarbach

  • Cc eviatarbach added

comment:5 Changed 9 years ago by mjo

One of the cases in #11842 that used to crash now works, but a lot of them still don't. I updated the list.

comment:6 Changed 9 years ago by kcrisman

  • Description modified (diff)

I feel like if that one is closed, we should have the list here, so I'm updating the description.

Note: See TracTickets for help on using tickets.