У меня есть две функции, sqrt(x)
и pow(x, y)
, которые я хочу передать «локальному» аргументу sympify при получении «sqrt (pow (x, 2))» в виде строки.После этого цель состоит в том, чтобы упростить выражение от «sqrt (pow (x, 2))» до «x» с помощью функции упрощения.
Приведенный ниже код выводит sqrt (x ** 2), давая мне подсказку, что функция pow(x, y)
подобрана, но не упрощена по неизвестной причине.
import sympy as sp
# Function Definitions
def pow(x, y):
return x ** y
def sqrt(x):
return sp.sqrt(x)
sp.symbols('x', positive=True, real=True)
input_exp = 'sqrt(pow(x, 2))'
eqn = sp.sympify(input_exp, locals={'sqrt': sqrt, 'pow': pow})
print("Simplification: ", sp.simplify(eqn))
Приведенный ниже код корректно выводит 'x', но имеет в качестве входного значения симпатичное выражение.Для моего варианта использования это должна быть строка.Замена этого выражения с помощью вызова sp.sympify(input_exp, locals={'sqrt': sqrt, 'pow': pow})
также не работает.
import sympy as sp
from sympy import Function
# Function definitions
class pow(Function):
@classmethod
def eval(cls, x, y):
return x ** y
class sqrt(Function):
@classmethod
def eval(cls, x):
return sp.sqrt(x)
# Simplify the expression.
x = sp.symbols('x', positive=True, real=True)
print("Simplification: ", sp.simplify(sqrt(pow(x, 2))))
Любые предложения или решения приветствуются.Спасибо!