无法得到同情来减少区分表达

Can't get sympy to reduce a differentiate expression

考虑以下代码,最好在 Jupyter notebook 中查看,因为数学输出变量 a,b,c 下面包含:

# cell1
import sympy as sp
from sympy import init_printing
init_printing() 
u, x = sp.symbols('u x')
f = sp.Function('f')

# cell2: building my function
a = f(x)**2
a

# cell3: doing some stuff to the function
b = a.diff(x).subs([(x,u**2)])
b

# cell4: now I have decided what f should be
c = b.replace(f, lambda x: x**2+x,)
c

但我无法 c 实际对其进行符号计算,因此我得到了一个不包含导数的表达式。 simplifycse 等我都试过了,好像什么都不管用。

当然我可以一开始就指定一个函数,这样就不会出现这个问题了。但问题是我想将所有内容都保持在 b 并且仅在该阶段轻松切换功能 - 出于数学原因 - 对我来说重要的是查看表达式 b 看起来如何“抽象”,当我还没有一个具体的功能时,然后才调查当我插入不同的具体功能时会发生什么。

您可以使用.doit()方法触发衍生品的评估:

In [25]: c                                                                                                                        
Out[25]: 
  ⎛ 4    2⎞ ⎛d ⎛ 2    ⎞⎞│    
2⋅⎝u  + u ⎠⋅⎜──⎝x  + x⎠⎟│   2
            ⎝dx        ⎠│x=u 

In [26]: c.doit()                                                                                                                 
Out[26]: 
  ⎛   2    ⎞ ⎛ 4    2⎞
2⋅⎝2⋅u  + 1⎠⋅⎝u  + u ⎠