Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.18 KB | None | 0 0
  1. public double Gamma(double alpha, double beta)
  2.         {
  3.             int d = (int) alpha;
  4.             double delta = alpha - d;
  5.  
  6.             double dlr = 0;
  7.  
  8.             if (delta > 0)
  9.             {
  10.                 double r = Math.E / (Math.E + delta);
  11.                 double n1 = 0, n2 = 1;
  12.  
  13.                 do
  14.                 {
  15.  
  16.                     double alpha1 = rand.NextDouble();
  17.                     double alpha2 = rand.NextDouble();
  18.  
  19.                    
  20.  
  21.                     if (alpha1 < r)
  22.                     {
  23.                         n1 = Math.Pow(alpha1 / r, 1.0 / delta);
  24.                         n2 = alpha2 * Math.Pow(n1, delta - 1);
  25.                     }
  26.                     else
  27.                     {
  28.                         n1 = 1 - Math.Log((alpha1 - r) / (1 - r));
  29.                         n2 = alpha2 * Math.Exp(-n1);
  30.                     }
  31.                 } while (n2 > Math.Pow(n1, delta-1) * Math.Exp(-n1));
  32.  
  33.                 dlr = n1;
  34.             }
  35.  
  36.             double dr = 0;
  37.             for (int i = 0; i < d; i++)
  38.             {
  39.                 dr += Exponential(1);
  40.             }
  41.  
  42.            
  43.  
  44.             return (dlr + dr) / beta;
  45.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement