FreeMat v4.0日本語ドキュメント
乱数生成

 

ドキュメント目次

--------------------------------------------------------------------
seed 与えられた整数を使用して乱数のシードを生成

  [構文] 
 seed(s,t)
s,tはシードの値です。異なるシードは異なる乱数系列を生成します。
randlibの制限により、s,tは 0 <= s,t <= 2^30を満たす必要があります。
  [例] 
(1) 同じ乱数系列を発生させます。
--> seed(32,41);
--> rand(1,5)

ans =

0.8589 0.3727 0.5551 0.9557 0.7367

--> seed(32,41);
--> rand(1,5)

ans =

0.8589 0.3727 0.5551 0.9557 0.7367

--------------------------------------------------------------------
randbeta β偏差乱数

  [構文] 

  y = randbeta(alpha, beta)

alpha, betaは長さの等しいベクトルか、もしくはどちらかがスカラーになります。

β乱数変数の確率密度関数(PDF)を以下に示します。

f(x)=x(a-1)*(1-x)(b-1)/B(a,b)

xは、0から1の間の数であり、またB(a,b)はf(x)の積分が1となる関数です。

  [例]

(1) a=3,b=7の時のβ乱数変数の確率密度関数(PDF)

--> a = 3; b = 7;
--> x = (0:100)/100; t = x.^(a-1).*(1-x).^(b-1);
--> t = t/(sum(t)*.01);
--> plot(x,t);

 図:β乱数変数の確率密度
randbeta関数を使用して分布を見てみます。
--> y=randbeta(3*ones(1,5000),7*ones(1,5000));
--> hist(y,10)
--> grid
--> ylim([0 1500])

 2.5付近を中心に分布しているのがわかります。
※hist関数は提供されているものではなく、作成したものです。
http://bbs5.fc2.com/php/e.php/freemat/

--------------------------------------------------------------------
randi 整数型一様分布乱数

   [構文] 

 y = randi(low,high)
 lowおよびhighは整数配列です。スカラーの場合は、出力もスカラーと
なります。

   [例] 
(1)

--> randi(zeros(1,6),5*ones(1,6))

ans =

1 0 4 1 5 0


------------------------------------------------------------------------------------------------
ranchi カイ二乗分布乱数

  [構文] 

 y = randchi(n)
 nは、自由度を与える配列。
カイ二乗乱数変数は、正規分布乱数の二乗ユークリッドノルムとして
分布する。カイ二乗乱数変数の確率分布関数は以下のようになります。

  [例] 

(1)

最初にカイ二乗分布の確率密度分布をプロットします。 
--> f = zeros(7,100);
--> x = (1:100)/10;
--> for n=1:7;t=x.^(n/2-1).*exp(-x/2);f(n,:)=10*t/sum(t);end
--> plot(x,f');

--> y=randchi(10*ones(1,3000));
--> hist(y,10)

※hist関数は提供されているものではなく、作成したものです。
http://bbs5.fc2.com/php/e.php/freemat/


-------------------------------------------------------------------
randexp 指数乱数


  [構文] 

 y = randexp(lambda)
lambdaは以下の式のλになります。また指数乱数変数は、ポアソン分布
プロセスにあるイベント間の待ち時間に関連します。この確率密度関数
は、以下のようになります。
	f(x)=λ・exp(-λ・x) 

  [例]
--> y=randexp(10*ones(1,1000));
--> hist(y,10)
--> grid


------------------------------------------------------------------
randp ポアソン分布乱数

  [構文] 

 y = randp(nu)
nuは以下の式のnuです。

   [例] 
 (1)
--> y=randp(33*ones(1,5000));
--> hist(y,15)
--> grid
--> ylim([0 1200])


------------------------------------------------------------------
randbin 二項分布乱数

  [構文] 

 y = randbin(N,p)
 N,pは下記の式を参考にしてください。ベルヌーイ分布とも呼ばれます。

   [例] 

(1)
--> randbin(10000,0.5)

ans =

4946
(2)
0.1の確率で「0」もしくは「1」を発生させます。この操作をrandbin
関数およびrand関数を用いて100回実行します。「1」が発生する回数
は、おおよそ10回となります。 

--> randbin(100,0.1*ones(1,10))

ans =

13 6 8 9 11 9 6 9 7 10

--> sum(rand(100,10)<0.1)

ans =

8 12 10 7 12 4 11 8 9 6

-------------------------------------------------------------------
randnbin 負の二項分布乱数

  [構文] 

 y = randnbin(r,p)
  [例] 
--> randnbin(3*ones(1,4),.01)

ans =

150 274 304 159

--> randnbin(6*ones(1,4),.01)

ans =

657 626 357 663

------------------------------------------------------------------
randf F分布乱数

  [構文] 

 y = randf(n,m)
n、mは以下の式の通りです。
Fn,mはカイ二乗乱数変数の比として与えられます。

また確率密度関数はBをβ関数として、

 になります。

  [例] 

--> randf(5*ones(1,9),7)

ans =

1.1944 0.9069 0.7558 1.5029 0.0621 1.3860 1.8161 0.3755 3.5794
-------------------------------------------------------------------
randgamma ガンマ分布乱数

  [構文] 
y = randgamma(a,r)

ガンマ乱数はポアソン乱数過程において発生します。平均時間aのr番目の事象

が起こるまでの待ち時間を表します。

  [例] 
 --> randgamma(1,15*ones(1,9))

ans =

22.7804 11.5514 16.8537 12.7457 16.2303 10.7442 19.3942 16.3612 17.4772


-----------------------------------------------------------------
randmulti 多項分布乱数

  [構文]

y = randmulti(N,pvec)
 Nは試行回数pvecは結果の分布を表す確率です。多項分布はN回の試行
の中でmとなりうる回数を表します。 

  [例]

--> randmulti(10000,[0.4999,0.4999,0.0002])

ans =

5026 4973 1



-------------------------------------------------------------------
randnchi 非心カイ二乗分布乱数

  [構文] 

 y = randnchi(n,mu)

nは自由度(n >= 1)、muは非心シフト(mu>0)。

  [例] 
--> randnchi(5*ones(1,9),0.3)

ans =

0.1157 0.0020 0.0029 0.0764 0.0035 0.0669 0.4731 0.0469 0.0662



-------------------------------------------------------------------
randnf 非心F分布乱数


  [構文] 

 y = randnf(n,m,c)


nは自由度の分子係数、mは自由度の分母係数。cは分子係数の非心シフト。

  [例] 

--> randnf(5*ones(1,9),7,1.34)

ans =

2.0107 0.1890 0.7468 2.3759 8.2553 1.8047 0.2222 2.2680 1.9690




-------------------------------------------------------------------
randn 正規分布乱数


  [構文] 

 y = randn(d1,d2,...,dn)
diは整数。次元を決めます。yはdouble型。 
 y = randn('state') %625個の整数を持ちます。

randn('state',y)

状態の取得および設定。

  [例] 

(1) 乱数の生成

--> randn(2,2,2)

ans =

(:,:,1) =

-1.7375 -0.5664
-0.2634 -1.0112

(:,:,2) =

-0.4020 0.0557
-1.8966 0.2098
(2) 乱数の生成およびその計算
--> x = 10+sqrt(5)*randn(1,10000);
--> mean(x)

ans =

10.0135

--> var(x)

ans =

4.9458
(3) 状態の設定
--> randn('state',0) % 状態の初期化
--> a = randn(1,3) % 1×3乱数配列の生成

a =

-0.0362 -0.1404 0.6934

--> b = randn('state'); % 状態の取得
--> c = randn(1,3) % 1×3乱数配列の生成(2回目)

c =

0.5998 0.7086 -0.9394

--> randn('state',b); % 状態を取得した状態へ再設定
--> c = randn(1,3) % 再度1×3乱数配列の生成
c =

0.5998 0.7086 -0.9394
2回目の生成時と同じ乱数が生成されています。

-------------------------------------------------------------------
rand 一様分布乱数

  [構文] 
y = rand(d1,d2,...,dn)
 diは整数。次元を決めます。yはdouble型。[0,1)の範囲に分布
 しています。
 y = rand('state') %625個の整数を持ちます。
 rand('state',y) 

状態の取得および設定。

  [例]
(1) 乱数の生成 
--> rand(2,2,2)

ans =

(:,:,1) =

0.3478 0.5313
0.0276 0.9958

(:,:,2) =

0.2079 0.7597
0.4921 0.3365


(2) 乱数の生成およびその計算
--> x = rand(1,10000);
--> mean(x)

ans =

0.5023

--> var(x)

ans =

8.3981e-02
(3) 状態の設定
--> rand('state',0) % 状態の初期化
--> a = rand(1,3) % 1×3乱数配列の生成
a =

0.3759 0.0183 0.9134

--> b = rand('state'); % 状態の取得
--> c = rand(1,3) % 1×3乱数配列の生成(2回目)

c =

0.3580 0.7604 0.8077

--> rand('state',b); % 状態を取得した状態へ再設定
--> c = rand(1,3) % 再度1×3乱数配列の生成
c =

0.3580 0.7604 0.8077


-------------------------------------------------------------------
randperm 乱数配置

  [構文]

   y = randperm(n)

出力yは、整数1~nまでの乱数配置となる。

 
  [例]
--> y = randperm(10)

y = 
  4  9  6  3 10  7  2  8  1  5