Advertisement
Abhisek92

IEM_W

Jun 3rd, 2021
953
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.53 KB | None | 0 0
  1. import numpy as np
  2. from scipy.stats import binom
  3.  
  4.  
  5. def calc(
  6.     n, k, theta, l1, l2, sigma1, sigma2 length, dist='ge'
  7. ):
  8.    
  9.     big_k = 2 * k * np.sin(theta)
  10.     sa = sigma1 ** 2
  11.     sb = sigma2 ** 2
  12.     a = sa / (sa + sb)
  13.     b = sb / (sa + sb)
  14.    
  15.     def f_ge(m):
  16.         x = binom.pmf(m, n, a)
  17.         c = ((l2 ** 2) / (2 * m)) * np.exp(
  18.             -(((big_k * l2) ** 2) / (4 * m))
  19.         )
  20.         return x * c
  21.    
  22.     def f_e(m):
  23.         x = binom.pmf(m, n, a)
  24.         lt2 = ((l1 * l2) / (((n - m) * l2) + ( m * l1))) ** 2
  25.         c = lt2 * ((1 + ((big_k ** 2) * lt2)) ** (-1.5))
  26.         return x * c
  27.    
  28.     def f_g(m):
  29.         x = binom.pmf(m, n, a)
  30.         le2 = ((l1 * l2) ** 2) / (((n - m) * (l2 ** 2)) + ( m * (l1 ** 2)))
  31.         c = (le2 / 2) * np.exp(((big_k ** 2) * le2) / -4)
  32.         return x * c
  33.    
  34.     fge = np.vectorize(f_ge)
  35.     fe = np.vectorize(f_e)
  36.     fg = np.vectorize(f_g)
  37.    
  38.     if dist.lower() == 'ge':
  39.         t1 = (
  40.             (a ** n ) * ((l1 / n) ** 2) * (
  41.                 (1 + (((big_k * l1) / n) ** 2)) ** 1.5
  42.             )
  43.         ) + (
  44.             (b ** n ) * ((l2 ** 2) / (2 * n)) * np.exp(
  45.                 -(((big_k * l2) ** 2) / (4 * n))
  46.             )
  47.         )
  48.         t2 = np.sum(fge(np.arange(1, n)))
  49.         return t1 + t2
  50.     elif dist.lower() == 'e':
  51.         return np.sum(fe(np.arange((n + 1))))
  52.     elif dist.lower() == 'g':
  53.         return np.sum(fg(np.arange((n + 1))))
  54.     else:
  55.         raise NotImplementedError("Unknown 'dist': {}".format(dist))
  56.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement