我在sympy中有以下代码
from sympy import *
x,y,G=symbols('x y G')
G=x**(3./2.) - y
g_inv=solve(G, x)
if len(g_inv)>1: g_inv=g_inv[-1]
dginvdy=diff(g_inv, y)
问题在于这给了我
____
3 ╱ 2
2⋅╲╱ y
─────────
3⋅y
而不是我预期的2*y**(-1./3)/3
。我尝试了simplify()
甚至cancel()
,但没有运气。另外,如果我使用real=True
定义变量,由于某种原因我无法用solve
将其反转。如果我只将y
定义为真实的我
2⋅sign(y)
─────────
3 _____
3⋅╲╱ │y│
更接近(?)但仍然不是我想要的。将y
定义为正面也没有做到这一点。
这可能看似愚蠢但却使我从那时起的计算变得非常复杂。
有什么想法吗?
答案 0 :(得分:0)
我认为您需要在此使用sympy.factor
而不是simplify
:
In [2]: dginvdy
Out[2]: 2*(y**2)**(1/3)/(3*y)
In [3]: factor(dginvdy)
Out[3]: 2/(3*y**(1/3))
sympy
docs详细介绍了这一点。
答案 1 :(得分:0)
我发现通过假设positive=True
来定义我的变量,我的根简化头痛常常得到缓解,而且这种方法确实可以让你在这里得到你想要的答案。您需要删除if语句并使用g_inv=solve(G, x)[0]
,因为solve(...)
现在只返回一个解决方案。这种方法可能导致一般性失去,所以你只需要知道你的问题。