def transform(sample_size,ps=0): """creates uniformly distr. r.v. transforms them to be distributed as g(y)=y/50 (disty) transforms the latter to be distributed as h(u)=1./(10.*sqrt(u)) via two transformations: either u(y)=(y-5)^2 (green) or u'(y)=(5/100)^2*y^4 (white) both transformations should give (and give!) identical results. analytical distribution in red. plots distributions as histograms. """ import numpy as np import my_hist import matplotlib.pyplot as plt ss=sample_size np.random.seed(5) distx=np.random.uniform(size=ss) # create sample which is xdx-distributed disty=10.*np.sqrt(distx) # transform via u'(y) distup=(5./100.)**2*disty**4 bins=0.02 umin=0. umax=25. h,xx=my_hist.hist(distup,bins,mi=umin,ma=umax,norm=1) plt.ylim(0.,0.3) #;or via u(y) distu=(disty-5.)**2 h,u=my_hist.hist(distu,bins,mi=umin,ma=umax,norm=1,oplot=1,color='g') plt.plot(u,0.1/np.sqrt(u),'r') if ps: plt.savefig('transform_py.ps')