Python 用辛函数求函数的导数(用于以后的求值和替换)

Python 用辛函数求函数的导数(用于以后的求值和替换),python,sympy,Python,Sympy,我希望尽可能长时间地使用泛型函数,最后只使用替换函数。 我想把一个函数定义为另一个函数的导数,用这个函数及其导数定义一个泛型表达式,并在最后替换这个函数。 现在,我的尝试如下所示,但我得到一个错误,即“派生”对象不可调用 来自sympy导入函数的 x、 y,z=符号('x y z') f=函数('f') df=f(x).diff(x)#正如你所说,f.diff(x)不起作用,这是非常令人失望的。也许有人会在将来的某个时候创建并支持它。同时,有两种方法:用x代替y,z,或lambdifydf 我认

我希望尽可能长时间地使用泛型函数,最后只使用替换函数。 我想把一个函数定义为另一个函数的导数,用这个函数及其导数定义一个泛型表达式,并在最后替换这个函数。 现在,我的尝试如下所示,但我得到一个错误,即“派生”对象不可调用

来自sympy导入函数的

x、 y,z=符号('x y z')
f=函数('f')

df=f(x).diff(x)#正如你所说,
f.diff(x)
不起作用,这是非常令人失望的。也许有人会在将来的某个时候创建并支持它。同时,有两种方法:用
x
代替
y,z,
或lambdify
df

我认为从长远来看,第一种方法会更加有效(例如,如果你决定扩展到多元微积分)。但第二个选项中的
expr
要自然得多

使用替换:

来自sympy导入的
*
x、 y,z=符号('x y z')
X=符号('X')
f=函数('f')
df=f(x).差(x)
expr=f(x)*测向潜艇(x,z)+测向潜艇(x,y)+测向潜艇(x,0)
打印(expr.replace(f,Lambda(X,cos(X))).doit()
lambdizing
df

来自sympy导入的
*
x、 y,z=符号('x y z')
X=符号('X')
f=函数('f')
df=λt:f(t).diff(t)如果是恒量(t,符号),则为f(X).diff(X).subs(X,t)
expr=f(x)*df(z)+df(y)+df(0)
打印(expr.replace(f,Lambda(X,cos(X))).doit()

两者都提供了所需的输出。

正如您所说,
f.diff(x)
不起作用,这让人非常失望。也许有人会在将来的某个时候创建并支持它。同时,有两种方法:用
x
代替
y,z,
或lambdify
df

我认为从长远来看,第一种方法会更加有效(例如,如果你决定扩展到多元微积分)。但第二个选项中的
expr
要自然得多

使用替换:

来自sympy导入的
*
x、 y,z=符号('x y z')
X=符号('X')
f=函数('f')
df=f(x).差(x)
expr=f(x)*测向潜艇(x,z)+测向潜艇(x,y)+测向潜艇(x,0)
打印(expr.replace(f,Lambda(X,cos(X))).doit()
lambdizing
df

来自sympy导入的
*
x、 y,z=符号('x y z')
X=符号('X')
f=函数('f')
df=λt:f(t).diff(t)如果是恒量(t,符号),则为f(X).diff(X).subs(X,t)
expr=f(x)*df(z)+df(y)+df(0)
打印(expr.replace(f,Lambda(X,cos(X))).doit()

两者都提供所需的输出。

不要将python
函数
(或kambda
)与
sympy.function
混淆。它们可能都是
可调用的
,但我怀疑类
mro`是否连接。我认为在这方面它们是等价的(我可能弄错了)。我只是喜欢使用常规的
lambda
。它让我觉得它更快,因为它通过if语句运行,而不是逐段分析更复杂的
sympy.函数。不要将python
函数(或kambda
)与
sympy.函数
混淆。它们可能都是
可调用的
,但我怀疑类
mro`是否连接。我认为在这方面它们是等价的(我可能弄错了)。我只是喜欢使用常规的
lambda
。它让我感觉速度更快,因为它通过if语句运行,而不是解析更复杂的
sympy.pieclewise