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

Python 有没有办法通过符号派生来定义函数?,python,function,diff,sympy,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的漂亮函数表单,非常整洁。不需要Maple或Mathematica。Python有同情心 import numpy as np from sympy import symbols, diff, la

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

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

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

不需要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)
。Symphy推荐的计算许多数值的方法是使用其
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)

一切皆有可能。因此,问题应该是:是否已经有了一个内在的机制?没有。有这样的图书馆吗?不太可能,因为这需要对Python的内部结构(即函数对象)进行一些非常核心的黑客攻击。Python函数毕竟不是数学函数。如果你真的需要,那么我建议使用一些专门的数学语言(例如maple)。你对
diff
的定义在哪里?diff是一个进行符号微分的python命令。你也可以执行
打印(df(x).subs(x,5))
。这首先是针对x推导的,然后在结果中将x替换为1。@Hannebambel是的!我刚才提到了
lambdify
,因为我假设询问者会对许多值使用该函数。但是
subs
对于一次性结果来说是可以的,正如这里的文档在比较两者时提到的(对于任何阅读的人来说都是一个有用的链接):答案和评论都可以回答我的问题!Thanksworth完美地绘制了原始函数及其导数。lambdify中“modules=['numpy']”的作用是什么?lambdify(x,df(x),模=['numpy'])