简化 sympy 中的根
Simplify roots in sympy
我在 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
定义为正数也没有成功。
这可能看起来很愚蠢,但它极大地复杂化了我从那时起所做的计算。
有什么想法吗?
我认为你需要在这里使用 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 对此进行了详细介绍。
我发现,通过使用假设 positive=True
定义变量,我的根简化问题通常会得到缓解,事实上,这种方法也能让您在这里得到想要的答案。您需要摆脱 if 语句并使用 g_inv=solve(G, x)[0]
因为 solve(...)
现在 return 只有一个解决方案。这种方法可能会导致一些通用性的损失,所以你只需要知道你的问题。
我在 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
定义为正数也没有成功。
这可能看起来很愚蠢,但它极大地复杂化了我从那时起所做的计算。
有什么想法吗?
我认为你需要在这里使用 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 对此进行了详细介绍。
我发现,通过使用假设 positive=True
定义变量,我的根简化问题通常会得到缓解,事实上,这种方法也能让您在这里得到想要的答案。您需要摆脱 if 语句并使用 g_inv=solve(G, x)[0]
因为 solve(...)
现在 return 只有一个解决方案。这种方法可能会导致一些通用性的损失,所以你只需要知道你的问题。