8

When I type

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

I obtain

log(e^x)

Instead of x. I know that "there are no guarantees" on this function.

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

Sergey Dovgal
  • 614
  • 6
  • 21
  • [`sympy.expand_log(..., force=True)`](http://docs.sympy.org/latest/tutorial/simplification.html#expand-log) seems to work. – jedwards Sep 09 '17 at 09:49
  • I think the accepted version is better because it gives a better understanding: instead of ignoring assumptions it is better to explicitly state them. It is useful to have a "force" version however. Your receipt also works if I do `expand_log` as a simplification at the end of computation. – Sergey Dovgal Sep 09 '17 at 10:32

3 Answers3

9

You have to set x to real type and your code will work:

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

Output: x.

For complex x result of this formula is not always is equal to x. Example is here.

Serenity
  • 35,289
  • 20
  • 120
  • 115
8

If you want to force the simplification, expand can help because it offers the force keyword which basically makes certain assumptions like this for you without you having to declare your variables as real. But be careful with the result -- you will not want to use it when those assumptions are not warranted.

>>> log(exp(x)).expand(force=True)
x
smichr
  • 16,948
  • 2
  • 27
  • 34
2

You can also set the argument "inverse" to "True" in the simplify function:

>>> simplify(log(exp(x)), inverse=True)
x
wirzip
  • 21
  • 1