Hello,
Consider the following Sage code:
x = var('x')
y = 2*x
diff(y,x) #gives 2 as expected
diff(x,y) #expected 1/2, complains: "argument symb must be a symbol"
This can be resolved via (kind-off) Leibniz's notation approach:
x = var('x')
y = 2*x
diff(y)/diff(x) #gives 2 as expected
diff(x)/diff(y) #gives 1/2 as expected
Example above illustrates issue I keep having (Sage expressions of type diff(x,y) giving error where there exist a derivative)
Questions are:
Does example below shows "limitations" of what Sage can compute ?
Is there a difference between diff(y)/diff(x) and diff(y,x) ?
Is there a way to help Sage "recognize" that diff(x,y) = 1/2 ? If yes, how?
P.S. (If 3 is "Yes") This seems very basic problem, yet I was unable to find any related examples online.
Is there a reference that explains described behavior o diff?
Update after Emmanuel Charpentier's answer
It appears that I am conflicting symbolic "function" and "expression" types you mentioned, i.e. I expect diff(x)
to return the total differential of f(x)=x. And it seems diff(...)
does dive differential when defining x using "function" syntax (although both x(x)=x
and var('x')
cases have the same "<'...Expression'>" type).
x = var('x')
diff(x) #same as diff(x,x), as explained by Emmanuel Charpentier
type(x) #<class 'sage.symbolic.expression.Expression'>
x(x) = x
type(x) #<class 'sage.symbolic.expression.Expression'>
diff(x) #gives differential "x |--> 1", what I assumed it does for single argument diff()
#"function" approach works for multivirable where "expression" gave error
myCos(x,y) = cos(x*y)
diff(myCos) #gives differential "(x, y) |--> (-y*sin(x*y), -x*sin(x*y))"
My last remaining question is:
Given object "x", how to tell whether it's a "function" or "expression" ?
P.S. There is good reading on the "expression vs. function" business in docs.
https://doc.sagemath.org/html/en/tutorial/tour_functions.html