Consider :

sage: f=function("f")
sage: m=var("m", domain="integer")
sage: assume(m>0)

Sage follows the Maxima convention for multiple derivation d^n/dx^n f(x) is 
diff(f(x),x,n) :

sage: diff(sin(x),x,3)
-cos(x) # Okay....
sage: diff(sin(x),x,m)
0 *## Huh ???*
sage: diff(f(x),x,3)
diff(f(x), x, x, x) # Okay, sort of
sage: diff(f(x),x,m)
0 *## Huh ???*

Note that Sage will silently return a mathematically false result when the 
degree of derivation is symbolic.

The problem doesn't seem to reside i Maxima, which returns results 
consistent to its convention :

sage: %maxima diff(sin(x),x,3)
-cos(x)
sage: %maxima diff(sin(x),x,m)
'diff(sin(x),x,m)
sage: %maxima diff(f(x),x,3)
'diff(f(x),x,3)
sage: %maxima diff(f(x),x,m)
'diff(f(x),x,m)

The problem is similar to the one seen in sympy *when incorrectly called :*

sage: import sympy
sage: sympy.diff(*[sympy.sympify(u) for u in [sin(x),x,3]])
-cos(x)
sage: sympy.diff(*[sympy.sympify(u) for u in [sin(x),x,m]])
0 # Huh again...
sage: sympy.diff(*[sympy.sympify(u) for u in [sin(x),[x,m]]])
Derivative(sin(x), (x, m)) # Unfulfilling but correct...
sage: sympy.diff(*[sympy.sympify(u) for u in [f(x),[x,m]]])
Derivative(f(x), (x, m)) # Unfulfilling but correct...

Note that sympy's alternative convention for multiple derivation gives 
consistent results :

sage: sympy.diff(*[sympy.sympify(u) for u in [sin(x),[x,m]]]).subs([(m, 3)])
Derivative(sin(x), (x, 3))
sage: sympy.diff(*[sympy.sympify(u) for u in [sin(x),[x,m]]]).subs([(m, 
3)]).doit
....: ()
-cos(x)
sage: sympy.diff(*[sympy.sympify(u) for u in [f(x),[x,m]]]).subs([(m, 3)])
Derivative(f(x), (x, 3))
sage: sympy.diff(*[sympy.sympify(u) for u in [f(x),[x,m]]]).subs([(m, 
3)]).doit()
....: 
Derivative(f(x), (x, 3))

Sage doesn't accept Sympy's convention for multiple derivation :

sage: diff(f(x), (x,3))
---------------------------------------------------------------------------
[ Snip ... ]

TypeError: no canonical coercion from <class 'tuple'> to Symbolic Ring

Therefore, Sage seems to interpret diff(<expression>, <variable>, 
<numerical value>) as d/d<variable> <expression> and diff(<expression>, 
<variable1>, <variable2>) as d/d<variable1> d/d<variable2> <expression>, 
with no way to express d^<variable2>/d<variable1)^<variable2> <expression>.

This is, IMNSHO, a serious mess. Which, as demonstrated above, *can silently 
return 
mathematically false results*.

The problem is that I cannot see a way to fix this that doesn't break 
backwards compatibility somehow.

Help about the way to efficiently file a (probably critical) ticket against 
this horror most welcome...

PS : One can note that Mathematica expresses its result in the symbolic 
case in a peculiar way :

sage: mathematica.D(f(x),[x,m])
Derivative[m][F][x]

One can also note that it may handle some special cases in a smarter way 
than Sage/Maxima/Sympy :

sage: mathematica.D(sin(x),[x,m])
Sin[(m*Pi)/2 + x]

but this is another story...

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-support/35fcf6d5-13b4-4ad8-8831-e61d229593c1o%40googlegroups.com.

Reply via email to