2014-12-19 159 views
3

我有一個表達,我認爲可以簡化一些原因sympy不執行我認爲簡單的簡化。我與示例代碼如下: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的圖形輸出如下:

enter image description here

我會預料最終的結果是以下幾點:

enter image description here

我認爲,基於如何我定義了簡化會發生的變量,至少是sqrt((R + d)** 2)...我做錯了什麼?

+0

我指定當我創建變量(Positive = True,Real = True)。至少我認爲這就是我在添加這些選項時所做的... – 2014-12-19 04:29:25

回答

4

嘗試real = Truepositive = True(小寫):

import sympy as sp 

d, R, c = sp.symbols('d R c', positive = True, real = True) 
dt = sp.symbols('\Delta_t', real = True) 

dt = (1/c**2)*(-R*c+sp.sqrt(c**2*(R+d)**2)) 

print sp.simplify(dt) 

輸出:

d/c 
2

爲了擴大對@ user5402的回答,SymPy只做簡化的有效期爲在默認情況下一般複數。特別是,sqrt(x**2) = x一般不正確。確實如果x是肯定的。設置xSymbol('x', positive=True)告訴SymPy這種情況。