3

Matlab の関数 exprnd() と同じ分布から C# の数値を取得する方法は?

4

3 に答える 3

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は、より注意する必要があります。

于 2013-04-14T13:32:14.827 に答える
2

このブログ投稿はあなたを助けるかもしれません:

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

必要な分布の分位数関数がわかっている場合、または解決できる場合は、既に持っている (ほぼ) 一様分布を特定の分布に変換できます。

私のブログ投稿で説明しているように、分位関数は累積分布の逆関数であり、累積分布は分布の下の領域です。必要な分布は e -xであるため、積分と逆関数を計算するのは簡単です。

于 2013-04-14T13:36:19.910 に答える
1

meta.numericsのような外部信号処理ライブラリを使用できます

Meta.Numerics.Statistics.Distributions名前空間の下で、ExponentialDistributionクラスと対応するGetRandomValue(Random)メソッドを見てください。

于 2013-04-14T11:51:11.857 に答える