Python 平方根辛化简

Python 平方根辛化简,python,sympy,simplify,Python,Sympy,Simplify,我有一个表达式,我认为可以简化一些,出于某种原因,sympy没有执行我认为是简单简化的操作。我的示例代码如下所示: # coding: utf-8 # In[1]: from __future__ import division from sympy import * init_printing() # In[3]: d, R, c = symbols('d R c', Positive = True, Real = True) Δt = symbols('\Delta_t', Real

我有一个表达式,我认为可以简化一些,出于某种原因,sympy没有执行我认为是简单简化的操作。我的示例代码如下所示:

# coding: utf-8

# In[1]:

from __future__ import division
from sympy import *
init_printing()

# In[3]:

d, R, c = symbols('d R c', Positive = True, Real = True)
Δt = symbols('\Delta_t', Real = True)

# In[4]:

Δt = (1/c**2)*(-R*c+sqrt(c**2*(R+d)**2))
Δt

# In[5]:

simplify(Δt)
我把代码放在上面的剪切和粘贴的乐趣。。。iPython的图形输出如下所示:

# coding: utf-8

# In[1]:

from __future__ import division
from sympy import *
init_printing()

# In[3]:

d, R, c = symbols('d R c', Positive = True, Real = True)
Δt = symbols('\Delta_t', Real = True)

# In[4]:

Δt = (1/c**2)*(-R*c+sqrt(c**2*(R+d)**2))
Δt

# In[5]:

simplify(Δt)

我预计最终结果如下:


我认为基于我如何定义变量,简化会发生,至少是sqrt((R+d)**2)。。。我做错了什么?

试试
real=True
positive=True
(小写):

输出:

d/c

为了扩展@user5402的答案,SymPy只进行默认情况下对一般复数有效的简化。特别是,
sqrt(x**2)=x
通常不正确。如果
x
为正,则为真。将
x
设置为
Symbol('x',positive=True)
告诉Symphy情况就是这样

我在创建变量时指定了(正=真,实=真)。至少我认为这就是我在添加这些选项时所做的…你知道为什么在使用parse_expr时同样的事情不起作用吗?执行x=symbols('x',positive=True,real=True)和expr=simplify(parse_expr(“sqrt(x2)”)操作会返回“sqrt(x2)”而不是“x”。
parse_expr
创建新符号。如果希望它重用以前定义的
x
,则需要使用
parse_expr('sqrt(x**2),locals())