我在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)
问题是这给了我
^{pr2}$而不是我所期望的2*y**(-1./3)/3
。我试过simplify()
甚至cancel()
,但没有运气。另外,如果我用real=True
定义变量,由于某些原因,我不能用solve
来反转它。如果我只把y
定义为真实,我得到
2⋅sign(y)
─────────
3 _____
3⋅╲╱ │y│
哪个更接近(?)但仍然不是我想要的。将y
定义为正值也没有起到作用。在
这看起来有点傻,但从那时起我的计算就变得非常复杂了。在
有什么想法吗?在
我发现,通过使用假设
positive=True
定义变量,我的根简化问题通常会得到缓解,实际上,这种方法也会让您在这里得到您想要的答案。您需要去掉if语句并使用g_inv=solve(G, x)[0]
,因为solve(...)
现在只返回一个解决方案。这种方法可能会导致一些通用性的损失,所以您只需要知道您的问题。在我认为您需要在这里使用
sympy.factor
,而不是simplify
:^{} docs 将对此进行详细说明。在
相关问题 更多 >
编程相关推荐