2014-12-19 3 views
3

У меня есть выражение, которое, я думаю, может быть несколько упрощено, и по какой-то причине 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). По крайней мере, я думал, что это то, что я делал, когда добавлял эти варианты ... –

ответ

4

Попробуйте real = True и positive = 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 положителен. Установка x как Symbol('x', positive=True) сообщает SymPy, что это так.

Смежные вопросы