C#中的征费分配

时间:2016-10-06 15:22:27

标签: c# math normal-distribution

我为一个程序实现了自己的Levy发行版,但似乎我从中得到了错误的值,经过一段时间后,我仍然无法找到我做错的地方。

这用于生成随机统一数字(此处为double)以及法线。

public class RandomProportional : Random
{
   protected override double Sample()
    {
        return Math.Sqrt(base.Sample());
    }

    public override double NextDouble()
    {
        return (double)(Sample());
    }

    public double NextStdNormal()
    {
        double d1 = NextDouble();
        double d2 = NextDouble();
        return (double)(Math.Sqrt(-2.0 * Math.Log(d1)) * Math.Sin(2.0 * Math.PI * d2));
    }
}

以下是我如何为Levy分布计算Sigma:

static double sigma_lev = Math.Pow(var_class.Gamma(1.0 + var_class.beta) * Math.Sin(Math.PI * var_class.beta / 2.0) / (var_class.Gamma((1.0 + var_class.beta) / 2.0) * var_class.beta * Math.Pow(2.0, (var_class.beta - 1.0) / 2.0)), 1.0 / var_class.beta);

使用此处的代码计算var_class.Gamma(double x):Gamma function

Where var_class.beta = 1.5 (all the time)

实际功能:

public static double[] levy(int n)
    {
        RandomProportional randObj = new RandomProportional();
        double[] step = new double[n];
        for (int i = 0; i < n; ++i)
        {
            step[i] = var_class.gam * randObj.NextStdNormal() * sigma_lev / Math.Pow(Math.Abs(randObj.NextStdNormal()), 1.0 / var_class.beta);
        }
        return step;
    }

var_class.gam

 0.075

我正在使用这个公式来实现:

Levy

我得到的结果的一些例子:

Values

从那里我想我做错了什么但仍然找不到。

0 个答案:

没有答案