Определить диапазон функции в Sympy (Python 2.7)?

Я работаю над проектом, который использует Sympy для определения ряда функций с двумя переменными с помощью оператора Eq() (например: «Eq (j, Abs (i))»), позже «симпифицируйте выражения, затем позже заменяет одну из переменных известным значением и находит отсутствующее значение.

Однако мой вопрос заключается в том, как, если возможно, я могу определить диапазон для этой работы? Например: используя приведенное выше уравнение, j = |i|, если мне нужны ответы только для j больше -5 > i > 5, есть ли элегантный способ заставить его возвращать False каждый раз, когда он подключает i не в этом диапазоне?


person David    schedule 02.08.2014    source источник
comment
Я так понимаю, вы действительно имеете в виду -5 < i < 5   -  person asmeurer    schedule 03.08.2014
comment
Ах, да. Случайная опечатка.   -  person David    schedule 05.08.2014


Ответы (1)


Вы можете комбинировать равенства и неравенства, используя логические операторы And, Or и Not (вы также можете использовать операторы &, | и ~ соответственно).

Я бы создал логическое выражение, представляющее ограничение, которое вы хотите удовлетворить, в данном случае And(-5 < i, i < 5), и подставил бы в него решение в конце. Что-то типа

In [10]: expr = Eq(i, abs(j))

In [14]: constraint = And(-5 < i, i < 5)

In [15]: d = {j: 6}

In [16]: sols = solve(expr.subs(d), dict=True)

In [17]: sols
Out[17]: [{i: 6}]


In [21]: for sol in sols:
   ....:     full_d = d.copy()
   ....:     full_d.update(sol)
   ....:     print(constraint.subs(full_d))
   ....:
False

Обратите внимание, что здесь я разрешил ограничениям включать как известные, так и неизвестные значения. Если они содержат только неизвестные значения, вам не нужно копировать и обновлять словарь известных значений. Вы, вероятно, захотите обернуть это в функцию.

person asmeurer    schedule 03.08.2014