无法得到同情来减少区分表达
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
实际对其进行符号计算,因此我得到了一个不包含导数的表达式。 simplify
、cse
等我都试过了,好像什么都不管用。
当然我可以一开始就指定一个函数,这样就不会出现这个问题了。但问题是我想将所有内容都保持在 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 ⎠
考虑以下代码,最好在 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
实际对其进行符号计算,因此我得到了一个不包含导数的表达式。 simplify
、cse
等我都试过了,好像什么都不管用。
当然我可以一开始就指定一个函数,这样就不会出现这个问题了。但问题是我想将所有内容都保持在 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 ⎠