How to define a mathematical function in SymPy?

32,518

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
Share:
32,518
Robin
Author by

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, 2020

Comments

  • Robin
    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 like f.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
    Robin almost 8 years
    For what is sympy.Function uses, when not for defining functions?
  • enedil
    enedil almost 8 years
    I suppose it's a base class for a whole range of standard functions.
  • asmeurer
    asmeurer almost 8 years
    @Robin sympy.Function is for undefined functions. Like if f = Function('f') then f(x) remains unevaluated in expressions.
  • Bill
    Bill over 4 years
    Thanks 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
    asmeurer over 4 years
    @Bill def f(...) sets the variable f to be the Python function defined by the def. If you do f = Function('f'), that will override the variable f to be the SymPy object Function('f'). The two options I show here do not use Function 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
    sɐunıɔןɐqɐp over 4 years
    From 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?