mercredi 15 novembre 2017

Generate random numbers from exponential distribution and model using python

My goal is to create a dataset of random numbers that looks like an exponential decay function and then plot an exponential decay function through those points.

First I tried to create a series of random numbers from an exponential distribution.

from pylab import *
from scipy.optimize import curve_fit
import random
import numpy as np
import pandas as pd

testx = pd.DataFrame(range(10)).astype(float)
testx = testx[0]

for i in range(1,11):
   x = random.expovariate(15) # rate = 15 arrivals per second
   data[i] = [x]

testy = pd.DataFrame(data).T.astype(float)
testy = testy[0]; testy

plot(testx, testy, 'ko')

The result could look something like this (but note, I need this to look like an exponential decay function always).

enter image description here

And then I define a function to draw a line through my points:

def func(x, a, e):
return a*np.exp(-a*x)+e

popt, pcov = curve_fit(f=func, xdata=testx, ydata=testy, p0 = None, sigma = None) 

print popt # parameters
print pcov # covariance

plot(testx, testy, 'ko')

xx = np.linspace(0, 15, 1000)
plot(xx, func(xx,*popt))

plt.show()

What I'm looking for is: (1) a more elegant way to create an array of random numbers from an exponential (decay) distribution and (2) how to test that my function is indeed going through the data points.

enter image description here




Aucun commentaire:

Enregistrer un commentaire