有没有办法通过符号派生来定义函数?例如,
def f(x):return x**x
def df(x) : return diff(f(x),x)
此代码不起作用,因为df(1)
是不可能的(diff(f(1),1)
没有意义。)但是有没有办法利用“diff”的结果?打印df(x)
时,有一个漂亮的函数表单,变量x
,所以很整洁。
答案 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)