简化sympy中的根

2024-04-19 00:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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定义为正值也没有起到作用。在

这看起来有点傻,但从那时起我的计算就变得非常复杂了。在

有什么想法吗?在


Tags: 代码fromimportlenif定义diffsimplify
2条回答

我发现,通过使用假设positive=True定义变量,我的根简化问题通常会得到缓解,实际上,这种方法也会让您在这里得到您想要的答案。您需要去掉if语句并使用g_inv=solve(G, x)[0],因为solve(...)现在只返回一个解决方案。这种方法可能会导致一些通用性的损失,所以您只需要知道您的问题。在

我认为您需要在这里使用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))

^{} docs将对此进行详细说明。在

相关问题 更多 >