How to increase the acceptance ratio

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 2K views
Othman0111
Messages
27
Reaction score
0
I trying to generate a random distribution

λe-λy
Which distributed exponentially.
Python:
%matplotlib inline
import numpy as np
from matplotlib import pyplot

N = 1000
r = np.random.random(N)

xlambda = 0.1
x = -np.log(r)/xlambda

binwidth=xlambda*5
pyplot.hist(x,bins=np.arange(0.,100., binwidth),density=True);
pyplot.plot(np.arange(0.,100.,binwidth),xlambda*np.exp(-xlambda*np.arange(0.,100.,binwidth)),ls='-',c='red',lw=3);N = 10000

xmax = 100
ymax = xlambda

rx = np.random.random(N)*xmax
ry = np.random.random(N)*ymax

values = []

Nin = 0
for i in range(N):
    if(ry[i] <= xlambda*np.exp(-xlambda*rx[i])):
        # Accept
        values.append(rx[i])
        Nin += 1    

x = np.asarray(values)

print("Acceptance Ratio: ",Nin/float(N))

binwidth=xlambda*5
pyplot.hist(x,bins=np.arange(0.,100., binwidth),density=True);
pyplot.plot(np.arange(0.,100.,binwidth),xlambda*np.exp(-xlambda*np.arange(0.,100.,binwidth)),ls='-',c='red',lw=3);

I want to Improve the acceptance ratio by using a linear function f(x)=1-ax. is there a certain choice for a?
 
on Phys.org
BvU said:
This homework ? Then please post in the homework forum.

Do you know that if ##F'=f## then a flat distribution of F yields a distribution like ##f## ?
I didn't get what you're saying
 
Thread closed. There's a duplicate of the question here: https://www.physicsforums.com/threads/how-to-increase-the-acceptance-ratio-in-python.966421/