How to simplify logarithm of exponent in sympy?
Asked Answered
S

3

10

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?

Separates answered 9/9, 2017 at 9:39 Comment(2)
sympy.expand_log(..., force=True) seems to work.Giddy
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.Separates
I
11

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.

Intendance answered 9/9, 2017 at 10:1 Comment(0)
L
9

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
Leroylerwick answered 9/9, 2017 at 16:41 Comment(1)
Using assumptions real=true and positive=true did not work for me, but expand(force=True) did workEulaeulachon
P
2

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

>>> simplify(log(exp(x)), inverse=True)
x
Practical answered 4/5, 2021 at 12:23 Comment(1)
This is a nice note: inverse will decompose func(invfunc(x)) as x.Leroylerwick

© 2022 - 2024 — McMap. All rights reserved.