Python 简化同理根
我有下面的代码Python 简化同理根,python,math,sympy,symbolic-math,Python,Math,Sympy,Symbolic Math,我有下面的代码 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()
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.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))
我发现,通过使用假设定义变量,我的根简化问题通常会得到缓解。
positive=True
,事实上,这种方法也能让你得到你想要的答案。您需要去掉if语句并使用g\u inv=solve(g,x)[0]
,因为solve(…)
现在只返回一个解决方案。这种方法可能会导致一些通用性的损失,因此您只需要了解您的问题。我发现,通过使用假设定义变量,我的根简化问题通常会得到缓解,而且这种方法确实也可以让您在这里得到所需的答案。您需要去掉if语句并使用g\u inv=solve(g,x)[0]
,因为solve(…)
现在只返回一个解决方案。这种方法可能会导致一些通用性的损失,所以您只需要了解您的问题