2016-02-23 6 views
2

Мне известно, что я могу разобрать выражение Sympy в виде дерева, переопределяя функцию Symbian, которая хорошо переносит выражение.sympy: изменение выражения вручную

Однако, возможно ли изменить определенный термин в выражении?

Ниже приведены два примера того, как я хочу изменить выражение.

1) Пример 1

Скажем, я следующее выражение,

ineq = x**2 > x + 2 

как бы я изменить 'х' только в RHS, так что она становится, например,

ineq = x**2 > z**2 + 2 

Использование subs или replace функций заменит все вхождения. Но я ищу способ заменить одно конкретное появление функции.

2) Пример 2

Можно ли изменить знак равенства/неравенства?

Например, можно ли изменить > на <, или > на = в выражении?

Например, если у меня есть выражение:

x**2 > z**2 + 2 

Я хотел бы изменить это,

x**2 == z**2 + 2 

Спасибо!

ответ

1

Пример 1

Используйте временную замену для х ** 2

In [1]: ineq = x**2 > x + 2 

In [3]: ineq.subs(x**2, t).subs(x, z**2).subs(t, x**2) 
Out[3]: 
2 2  
x > z + 2 

Вложения много .subs() вместо одной замены принуждают замены происходить один за другим время.

Пример 2

Передайте аргументы в объект конструкторами других relationals:

In [5]: Eq(*ineq.args) 
Out[5]: 
2   
x = x + 2 

In [6]: StrictLessThan(*ineq.args) 
Out[6]: 
2   
x < x + 2 

In [7]: LessThan(*ineq.args) 
Out[7]: 
2   
x ≤ x + 2 
1

Во-первых, обратите внимание, что SymPy выражения неизменны, так что вы не можете изменить их на месте (любая написанная вами функция вернет новое выражение).

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

In [27]: ineq = x**2 > x + 2 

In [28]: ineq.args 
Out[28]: 
⎛ 2  ⎞ 
⎝x , x + 2⎠ 

In [29]: ineq.args[0] > ineq.args[1].subs(x, z**2) 
Out[29]: 
2 2 
x > z + 2 

См. http://docs.sympy.org/latest/tutorial/manipulation.html для получения дополнительной информации.

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