5

matlab でガウス分布と一様分布で数値を生成したい。私はこの関数を知って randirand()ますが、それらはすべて正規 (ガウス) 分布です。一様分布で乱数を生成するにはどうすればよいですか?

4

6 に答える 6

14

0 と 1 の間の一様分布に使用rand(dimensions)します。

平均がmuで標準偏差がsigmaのガウス分布に使用randn(dimensions) * sqrt(sigma) + muします。

一様分布

正規分布

于 2012-12-12T17:58:25.787 に答える
7

randnガウス分布変数を生成する関数です (一様分布変数を生成します) randirand

于 2012-12-12T17:17:19.453 に答える
5

rand() から任意の分布を生成できます。

たとえば、レイリー距離の 100000 サンプルを生成したいとします。これを行う方法は、その特定の関数の累積分布関数を逆にすることです。基本的な考え方は、累積分布関数が 0 と 1 の間でなければならないので、次を見つけることができるということです。 cdf b/w 0 と 1 の値を入力することによる確率変数の値。レイリーの場合、次のようになります。

for i = 1:100000
  data(i) = (2*sigma^2 *(-(log(1 - rand(1,1)))))^.5;
end

ガウス分布についても同様のことができます。

于 2013-11-19T18:58:34.317 に答える
4

おめでとう、あなたはすでにガウス分布で疑似乱数を生成しています。正規分布はそれと同義です。

私があなたの質問から得ることができる他の唯一の解釈は、平均 != 0 および/または分散 != 1 を持つものが欲しいということです。それを行うには、単純にmean + sqrt(var) * randn(X).

于 2012-12-12T17:16:39.620 に答える
2

raj の回答に続いて、Box-Muller Transformを使用すると、独立した標準正規/ガウス乱数を生成できます。

N = 1e6; z = sqrt(-2*log(rand(N, 1))) .* cos(2*pi * rand(N, 1)); figure; hist(z, 100)
N = 1e6; z = sqrt(-2*log(rand(N, 1))) .* sin(2*pi * rand(N, 1)); figure; hist(z, 100)

逆変換法を適用する場合は、逆相補誤差関数 (erfcinv) を使用できます。

N = 1e6; z = -sqrt(2) * erfcinv(2 * rand(1e6, 1)); figure; hist(z, 100)

randnしかし、私はうまくいくことを願っています。

于 2013-11-19T20:04:59.473 に答える