I'm a beginner in python. I've recently learned about Sympy and its symbolic manipulation capabilities, in particular, differentiation. I am trying to do the following in the easiest way possible:
I know how to do 1 and 2. The problem is, when I try to evaluate the derivative in step 3, I get an error that python can't calculate the derivative. Here is a minimal working example:
import sympy as sym
import math
def f(x,y):
return x**2 + x*y**2
x, y = sym.symbols('x y')
def fprime(x,y):
return sym.diff(f(x,y),x)
print(fprime(x,y)) #This works.
print(fprime(1,1))
I expect the last line to print 3. It doesn't print anything, and says "can't calculate the 1st derivative wrt 1".
Your function fprime
is not the derivative. It is a function that returns the derivative (as a Sympy expression). To evaluate it, you can use .subs
to plug values into this expression:
>>> fprime(x, y).evalf(subs={x: 1, y: 1})
3.00000000000000
If you want fprime
to actually be the derivative, you should assign the derivative expression directly to fprime
, rather than wrapping it in a function. Then you can evalf
it directly:
>>> fprime = sym.diff(f(x,y),x)
>>> fprime.evalf(subs={x: 1, y: 1})
3.00000000000000