SymPy表达式包含被函数反函数取消的函数

时间:2018-08-04 11:11:12

标签: python regex sympy

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,'')

1 个答案:

答案 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