如何简化sympy中的指数对数?

How to simplify logarithm of exponent in sympy?

当我输入时

import sympy as sp
x = sp.Symbol('x')
sp.simplify(sp.log(sp.exp(x)))

我得到

log(e^x)

而不是 x。我知道 "there are no guarantees" 这个函数。

Question. Is there some specific simplification (through series expansion or whatsoever) to convert logarithm of exponent into identity function?

您必须将 x 设置为真实类型,您的代码才能正常工作:

import sympy as sp
x = sp.Symbol('x', real=True)
print(sp.simplify(sp.log(sp.exp(x))))

输出:x.

对于复杂的 x,此公式的结果并不总是等于 x。例如 here.

如果您想强制简化,expand 可以提供帮助,因为它提供了 force 关键字,基本上可以为您做出这样的某些假设,而无需将变量声明为真实变量。但要小心结果——当这些假设不合理时,您将不想使用它。

>>> log(exp(x)).expand(force=True)
x

您还可以在简化函数中将参数“inverse”设置为“True”:

>>> simplify(log(exp(x)), inverse=True)
x