有没有办法通过符号派生来定义函数?

时间:2017-05-31 14:10:43

标签: python function diff sympy

有没有办法通过符号派生来定义函数?例如,

def f(x):return x**x
def df(x) : return diff(f(x),x)

此代码不起作用,因为df(1)是不可能的(diff(f(1),1)没有意义。)但是有没有办法利用“diff”的结果?打印df(x)时,有一个漂亮的函数表单,变量x,所以很整洁。

1 个答案:

答案 0 :(得分:1)

不需要Maple或Mathematica。 Python有同情心。

import numpy as np
from sympy import symbols, diff, lambdify

x = symbols('x')

def f(x):
    return x**x

def df(x):
    return diff(f(x))

print(df(x))

这将返回符号派生词x**x*(log(x) + 1)。现在,这取决于你想用它做什么。看起来你想要计算数值而不必知道导数是x**x*(log(x) + 1)。 sympy推荐的计算多个数值的方法是使用lambdify

df_numeric = lambdify(x, df(x), modules=['numpy'])
df_numeric(5)

这给出了8154.4934763565643。您可以根据常规手动功能进行检查:

def df_manual(n):
    return n**n*(np.log(n) + 1)

df_manual(5)