from random import uniform
import matplotlib.pyplot as plt
import numpy as np
import scipy.optimize

def f(n, f0=100):
	result = f0
	for i in range(n):
		result *= np.exp(0.2 + uniform(-0.04, 0.04))
	return result

X = np.arange(0, 100, 1)
Y = np.array([f(int(x)) for x in X])

fitf = lambda x, k, a: k*np.exp(x*a)
(k, a), pcov = scipy.optimize.curve_fit(fitf, X, Y, p0=[100, 0.2])

fitted = lambda x: k*np.exp(x*a)

plt.plot(X, Y, X, fitted(X))
plt.show()