from sympy import exp,log
import sympy as sym
x = sym.Symbol('x')
expr = log(exp(x))
print(expr)
print(sym.simplify(expr))
diff_expr = x - log(exp(x))
if diff_expr == 0:
print('Expression was simplified!')
显然,SymPy无法简化此类表达式。有什么方法可以不必通过字符串操作来处理它吗?即像这样的东西:
func_comb = ['exp(log(','cos(acos(','log(exp(','acos(cos(','sin(asin(']
# replace string expression with '' and remove surplus ')'
expr = str(expr)
for func in func_comb:
if func in expr:
expr = expr.replace(func,'')
答案 0 :(得分:4)
默认情况下,SymPy符号允许为复数。对于复数,关系int theBalance = (int) items.get(1);
通常是不正确的:例如log(exp(x)) == x
。
通过将符号声明为真实的来避免这种情况。
log(exp(2*pi*I)) = 0
对于>>> x = sym.Symbol('x', real=True)
>>> log(exp(x))
x
,仅靠真实是不够的:例如,asin(sin(x)) == x
。这种关系仅在一定间隔内成立。从SymPy 1.2开始,功能asin(sin(2*pi)) = 0
允许您使用simplify
强制进行此类简化;此标志使SymPy假定提供的输入确实符合预期的“逆”关系。
inverse=True