Exponential functions and logarithms

In [1]:
import math
import numpy as np

Exponential functions

What is e? It is simply a number (known as Euler's number):

In [2]:
math.e
Out[2]:
2.718281828459045

e is a significant number, because it is the base rate of growth shared by all continually growing processes.

For example, if I have 10 dollars, and it grows 100% in 1 year (compounding continuously), I end up with 10*e^1 dollars:

In [3]:
# 100% growth for 1 year
10 * np.exp(1)
Out[3]:
27.18281828459045
In [4]:
# 100% growth for 2 years
10 * np.exp(2)
Out[4]:
73.890560989306508

Side note: When e is raised to a power, it is known as the exponential function. Technically, any number can be the base, and it would still be known as an exponential function (such as 2^5). But in our context, the base of the exponential function is assumed to be e.

Anyway, what if I only have 20% growth instead of 100% growth?

In [5]:
# 20% growth for 1 year
10 * np.exp(0.20)
Out[5]:
12.214027581601698
In [6]:
# 20% growth for 2 years
10 * np.exp(0.20 * 2)
Out[6]:
14.918246976412703

Logarithms

What is the (natural) logarithm? It gives you the time needed to reach a certain level of growth. For example, if I want growth by a factor of 2.718, it will take me 1 unit of time (assuming a 100% growth rate):

In [7]:
# time needed to grow 1 unit to 2.718 units
np.log(2.718)
Out[7]:
0.99989631572895199

If I want growth by a factor of 7.389, it will take me 2 units of time:

In [8]:
# time needed to grow 1 unit to 7.389 units
np.log(7.389)
Out[8]:
1.9999924078065106

If I want growth by a factor of 1, it will take me 0 units of time:

In [9]:
# time needed to grow 1 unit to 1 unit
np.log(1)
Out[9]:
0.0

If I want growth by a factor of 0.5, it will take me -0.693 units of time (which is like looking back in time):

In [10]:
# time needed to grow 1 unit to 0.5 units
np.log(0.5)
Out[10]:
-0.69314718055994529

Connecting the concepts

As you can see, the exponential function and the natural logarithm are inverses of one another:

In [11]:
np.log(np.exp(5))
Out[11]:
5.0
In [12]:
np.exp(np.log(5))
Out[12]:
4.9999999999999991