Advertisement
reeps

Untitled

Apr 5th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.38 KB | None | 0 0
  1. from ROOT import gRandom, TF2
  2. from math import cos, sqrt
  3.  
  4. x_a = 0.01
  5. x_b = 1
  6. y_a = 0
  7. y_b = 1
  8. n = 1000
  9. m = 10
  10. N = 10000
  11.  
  12. def norm():
  13.     return  1.0 / (2 * x_a ** 2) - 1.0 / (2 * x_b ** 2)
  14.  
  15. def func(x,y):
  16.     return 1.0 / (x ** 3 * (y + cos(x) ** 2 / 3))
  17.  
  18. def g(x,y):
  19.     return 1.0 / (x ** 3) / norm()
  20.  
  21. def F(x,y):
  22.     return func(x,y) / g(x,y)
  23.  
  24. def integrate(func, xlim, ylim):
  25.     xa, xb = xlim
  26.     ya, yb = ylim
  27.     x = gRandom.Uniform(xa, xb)
  28.     y = gRandom.Uniform(ya, yb)
  29.     return (xb - xa) * (yb - ya) * func(x,y)
  30.  
  31. def fndirect(pp):
  32.     xa = pp[0]
  33.     xb = pp[1]
  34.     ya = pp[2]
  35.     yb = pp[3]
  36.     ua = 1.0 / (2 * xb ** 2)
  37.     ub = 1.0 / (2 * xa ** 2)
  38.     u = gRandom.Uniform(ub, ua)
  39.     r1 = 1.0 / sqrt(2 * u + 1.0 / xa ** 2)
  40.     r2 = gRandom.Uniform(ya, yb)
  41.     return r1, r2
  42.  
  43. def meanmethod():
  44.     res = []
  45.     print "MEAN METHOD"
  46.     for i in range(m):
  47.         cres = []
  48.         for j in range(n):
  49.         r = (integrate(func, (x_a, x_b), (y_a, y_b)))
  50.         res.append(r)
  51.         cres.append(r)
  52.         avg = sum(res) / len(res)
  53.         var = (sum(r ** 2 for r in res) - avg ** 2) / len(res)
  54.         cavg = sum(cres) / len(cres)
  55.         cvar = (sum(r ** 2 for r in cres) - cavg ** 2) / len(cres)
  56.         rms = sqrt(var / len(res))
  57.         crms = sqrt(cvar / len(cres))
  58.         print "%d iteration: average is %e, rms is %e " % ( i, avg, rms)
  59.         print "%d iteration: caverage is %e, crms is %e " % ( i, cavg, crms)
  60.  
  61. def sampling():
  62.     res = []
  63.     print "SAMPLING METHOD"
  64.     for i in range(m):
  65.     cres = []
  66.     for j in range(n):
  67.         r1, r2 = fndirect([x_a, x_b, y_a, y_b])
  68.         r = F(r1, r2)
  69.             res.append(r)
  70.         cres.append(r)
  71.     avg = sum(res) / len(res)
  72.         var = (sum(r ** 2 for r in res) - avg ** 2) / len(res)
  73.         cavg = sum(cres) / len(cres)
  74.         cvar = (sum(r ** 2 for r in cres) - cavg ** 2) / len(cres)
  75.         rms = sqrt(var / len(res))
  76.         crms = sqrt(cvar / len(cres))
  77.         print "%d iteration: average is %e, rms is %e " % ( i, avg, rms)
  78.         print "%d iteration: caverage is %e, crms is %e " % ( i, cavg, crms)
  79.        
  80. def drawfunc( xx, pp):
  81.     return func(xx[0], xx[1])
  82. def drawF(xx,pp):
  83.     return F(xx[0], xx[1])
  84. meanmethod()
  85. sampling()
  86. h = TF2("f", drawfunc, x_a, x_b, y_a, y_b, 1)
  87. h.Draw("surf")
  88. raw_input()
  89. h1 = TF2("F", drawF, x_a, x_b, y_a, y_b, 1)
  90. h1.Draw("surf")
  91. raw_input()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement