Tell me more ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

I know that if you take random and uniformly continuous number that are generated by the sum of x1+x2 (so y=x1+x2), the probability $P(0.9<y<=1.8)$ the calculated results are:

y~u(0,1) = 0.575

y~exp(2) = 0.3371

x1~u(0,1) x2~u(0,2)

P(y=0.25)=0.8 P(y=1.5)=0.2 = 0.2

3 of the 4 simulated values are way off, and I'm concerned it's because of the mathematical logic behind the way I'm trying to generate and then sort the numbers by $P(0.9<Y<=1.8)$. My code in Python is:

n = 10000
x11 = [random.random() for i in range(n)]
x12 = [random.random() for i in range(n)]
x21 = [-0.5*(log(1-random.random())) for i in range(n)]
x22 = [-0.5*(log(1-random.random())) for i in range(n)]
x31 = [random.random() for i in range(n)]
x32 = [random.uniform(0,2) for i in range(n)]
x41 = [0.25 if random.random() < 0.8 else 1.5 for r in range(n)]
x42 = [0.25 if random.random() < 0.8 else 1.5 for r in range(n)]

x11 through x42 are pairs of cases that I'm trying to get the probability that they'll fall between 0.9 and 1.8 where the pairs of lists generated are combined and then operated on. So x11 and x12 are combined and then expected value, variance, and the 0.9 to 1.8 p(x) is found.

def test():
  x1,x2,c = 0.0,0.0,0.0
  for i in range(10000):
    if random.random()< 0.8:
      x1 += 0.25
    else:
      x2 += 1.5
    y = x1 + x2
    if y>0.9 and y<=1.8:
      c = c + 1
  return x1,x2,c

I tried to do it by a for loop above and that gave similarly wrong results to what I've included at the bottom.

Right below here, you'll see about 3 ways I tried unsuccessfully to simulate this in the function sim(a,b)

def sim(a,b):
  #pyab1 = sum([a for a in a if a>0.9 and a<=1.8])/10000
  #pyab2 = sum([b for b in b if b>0.9 and b<=1.8])/10000
  #print "*****",float(pyab1+pyab2)
  #print a+b
  #array1 = [[a],[b]]
  array1 = a+b
  #array1.extend(a)
  #array1.extend(b)
  #c = 0
  #for y in array1:
    #if y>0.9 and y<=1.8:
      #c = c + 1
  pyab = sum([y for y in array1 if y>0.9 and y<=1.8])/10000
  print("P(a < x <= b) : {0:8.4f}".format(pyab))

Here's the output followed by the values it's supposed to give, but this shows how far off the results are.

case 1: P(a < x <= b) : 0.7169 #should be 0.575 
case 2: P(a < x <= b) : 0.4282 #should be 0.3371 
case 3: P(a < x <= b) : 0.5966 #should be 0.4413 
case 4: P(a < x <= b) : 0.5595 #should be 0.2 

This isn't really a coding problem as the mathematical logic is the problem here and the math went a little outside of what SO usually does. I'm very new to Python so please be patient if my question seems to have an obvious solution that I missed.

share|improve this question

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.