Matlab exprnd(a,b,c)C#的模拟?

时间:2013-04-14 10:53:55

标签: c# matlab

如何在Matlab中从与函数exprnd()相同的分布中获取C#中的数字?

3 个答案:

答案 0 :(得分:3)

尝试类似:

static readonly Random randomNumberGenerator = new Random();

public static double ExpRnd(double mu)
{
    return -Math.Log(randomNumberGenerator.NextDouble()) * mu;
}

如果您想要m×n矩阵,请使用

public static double[,] ExpRnd(double mu, int m, int n)
{
    var arr = new double[m, n];
    for (int i = 0; i < m; ++i)
    {
        for (int j = 0; j < n; ++j)
            arr[i, j] = ExpRnd(mu);
    }
    return arr;
}

注意:System.Random是线程安全的。如果你有多个线程在上面调用ExpRnd,你必须更加小心。

答案 1 :(得分:2)

此博文可能会对您有所帮助:

http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/

如果您知道 - 或者可以解决 - 您想要的分布的分位数函数,那么您可以将已经存在的(粗略)均匀分布转换为给定的分布。

正如我在博文中描述的那样,分位数函数是累积分布的倒数,累积分布是分布下的面积。由于您想要的分布是e -x ,因此应该很容易计算出积分和逆。

答案 2 :(得分:1)

您可以使用某些外部信号处理库,例如meta.numerics

Meta.Numerics.Statistics.Distributions命名空间下,查看ExponentialDistribution类和相应的GetRandomValue(Random)方法。