How to define a mathematical function in SymPy?
Solution 1
sympy.Function
is for undefined functions. Like if f = Function('f')
then f(x)
remains unevaluated in expressions.
If you want an actual function (like if you do f(1)
it evaluates x**2 + 1
at x=1
, you can use a Python function
def f(x):
return x**2 + 1
Then f(Symbol('x'))
will give a symbolic x**2 + 1
and f(1)
will give 2
.
Or you can assign the expression to a variable
f = x**2 + 1
and use that. If you want to substitute x
for a value, use subs
, like
f.subs(x, 1)
Solution 2
Here's your solution:
>>> import sympy
>>> x = sympy.symbols('x')
>>> f = x**2 + 1
>>> sympy.diff(f, x)
2*x
Solution 3
Another possibility (isympy
command prompt):
>>> type(x)
<class 'sympy.core.symbol.Symbol'>
>>> f = Lambda(x, x**2)
>>> f
2
x ↦ x
>>> f(3)
9
Calculating the derivative works like that:
>>> g = Lambda(x, diff(f(x), x))
>>> g
x ↦ 2x
>>> g(3)
6
Robin
Knowledge about web technologies. Open source software user. Software developer. Digital native. Sports enthusiast. Salsa dancer. Backpacker. Get in touch with me: Telegram: https://t.me/reachrobin
Updated on November 25, 2020Comments
-
Robin over 3 years
I've been trying this now for hours. I think I don't understand a basic concept, that's why I couldn't answer this question to myself so far.
What I'm trying is to implement a simple mathematical function, like this:
f(x) = x**2 + 1
After that I want to derive that function.
I've defined the symbol and function with:
x = sympy.Symbol('x') f = sympy.Function('f')(x)
Now I'm struggling with defining the equation to this function
f(x)
. Something likef.exp("x**2 + 1")
is not working.I also wonder how I could get a print out to the console of this function after it's finally defined.
-
Robin almost 8 yearsFor what is sympy.Function uses, when not for defining functions?
-
enedil almost 8 yearsI suppose it's a base class for a whole range of standard functions.
-
asmeurer almost 8 years@Robin
sympy.Function
is for undefined functions. Like iff = Function('f')
thenf(x)
remains unevaluated in expressions. -
Bill over 4 yearsThanks for this. Do you still need to do
f = Function('f')
before defining the function or is that implicit from the python function definition? -
asmeurer over 4 years@Bill
def f(...)
sets the variablef
to be the Python function defined by the def. If you dof = Function('f')
, that will override the variablef
to be the SymPy objectFunction('f')
. The two options I show here do not useFunction
at all. That is only if you want something that is completely unevaluated. See also the section in the SymPy tutorial on symbols. -
sɐunıɔןɐqɐp over 4 yearsFrom Review: Hi, while links are great way of sharing knowledge, they won't really answer the question if they get broken in the future. Add to your answer the essential content of the link which answers the question. In case the content is too complex or too big to fit here, describe the general idea of the proposed solution. Remember to always keep a link reference to the original solution's website. See: How do I write a good answer?