示例#1
0
 static IEnumerable<double> SamplesUnchecked(System.Random rnd, double scale)
 {
     return rnd.NextDoubleSequence().Select(x => scale*Math.Sqrt(-2.0*Math.Log(x)));
 }
示例#2
0
 static IEnumerable<int> SamplesUnchecked(System.Random rnd, double p)
 {
     return rnd.NextDoubleSequence().Select(r => r < p ? 1 : 0);
 }
示例#3
0
 static IEnumerable<double> SamplesUnchecked(System.Random rnd, double scale, double shape)
 {
     var power = -1.0/shape;
     return rnd.NextDoubleSequence().Select(x => scale*Math.Pow(x, power));
 }
示例#4
0
 static IEnumerable<double> SamplesUnchecked(System.Random rnd, double shape, double scale)
 {
     var exponent = 1.0/shape;
     return rnd.NextDoubleSequence().Select(x => scale*Math.Pow(-Math.Log(x), exponent));
 }
示例#5
0
        static IEnumerable<int> SamplesUnchecked(System.Random rnd, double p)
        {
            if (p == 1.0)
            {
                return Generate.RepeatSequence(1);
            }

            double rp = 1.0 - p;
            return rnd.NextDoubleSequence().Select(r => (int)Math.Ceiling(Math.Log(1.0 - r, rp)));
        }
示例#6
0
 static IEnumerable<double> SamplesUnchecked(System.Random rnd, double rate)
 {
     return rnd.NextDoubleSequence().Where(r => r != 0.0).Select(r => -Math.Log(r)/rate);
 }
示例#7
0
        static IEnumerable<double> SamplesUnchecked(System.Random rnd, double lower, double upper, double mode)
        {
            double ml = mode - lower, ul = upper - lower, um = upper - mode;
            double u = ml/ul, v = ul*ml, w = ul*um;

            return rnd.NextDoubleSequence().Select(x => x < u ? lower + Math.Sqrt(x*v) : upper - Math.Sqrt((1 - x)*w));
        }