Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
第7回乱数
1
確率モデル
• シミュレーションには,これまでに用いて来た決定論的な方法のほかに確率的な方法がある.
• 確率的な方法を用いてシミュレーションを行う場合,確率モデルを作成し,それを何度も実行して統計を取ることが多い.
• 確率モデルを実際に計算するためには,コンピュータで「でたらめな数」を用いる.
• この「でたらめな数」を「乱数(random number)という.
一様分布乱数
• 与えられた領域 [a,b) において,確率密度関数が一定である乱数を一様分布乱数という.
• 確率密度関数は以下のように定義できる.
• 平均と分散は以下の通り.
• 区間 [0,1) で定義された一様分布乱数がすべての計算のもとになる.
Excel の一様分布乱数
• Excel では RAND() を用いると一様分布乱数を発生させることができる.
• 右のヒストグラムは 10000 の RAND() の結果を0.05間隔で数えた結果.
Mathema>ca の一様分布乱数
• Mathema>ca では RandomReal[] を用いると一様分布乱数を発生させることができる.
• 右は Excel と同様に頻度分布をとった結果.(V5.2 の場合.V6の場合には Histgrams パッケージを読み込む)
今日の演習課題
• Excel のワークシートを用いて,今回紹介する乱数を実現してみよう(余裕がある人は Mathema>ca も同時にチャレンジ).
• 発生した乱数の平均や分散や標準偏差を計算しよう.
• 上の計算結果は自分の予想と一致しているのかを確認しよう.予想が当たっても外れてもその理由を考えてみること.
• 全部実現できたら,いろいろな乱数の見本ブックができるはず.
6
区間 [0,1) 以外の一様分布乱数
• 区間 [a, b) における一様分布乱数は,区間[0,1)における一様分布乱数に対して, (b-‐a) 倍して a を加える.
• たとえば [3,5) の場合, – Mathema>ca では RandomReal[ {3,5}]
– Excel では Rand()*(5-‐3)+3
7
整数の発生
• Mathema>ca では整数を発生させる方法(RandomInteger 関数)があるが, Excel にはない.そこで,一般に通用する整数の発生方法を二種類考えてみる. – 方法1:整数の範囲倍して丸める. – 方法2:条件分岐を用いる.
• Mathema>ca で直接発生させる場合. – V5.2 以前 Random[Integer, {最小値,最大値}] – V6 以降 RandomInteger[{最小値,最大値}]
8
方法1:整数の範囲倍して丸める
• 一様分布乱数に対して,発生させたい整数の範囲を乗じて小数部分を切り捨てる.
• 例えば 4 から 9 までの数を発生させたい場合. – Mathema>ca では IntegerPart[6 RandomReal[]+4]
– Excel では ROUNDDOWN(6*RAND(),0)+4
• 数値の増分が1以外の場合はどうする?(例えば -‐1 と 1 を発生させたい場合など)
9
方法2:条件分岐を用いる
• 区間 [0,1) を発生させたい整数の範囲で分割して,個々の範囲に整数を割り当てる.一様分布乱数を発生させて,どの範囲に入ったかで整数を選ぶ.
• 例えば 3 から 5 までの数を発生させたい場合. – Mathema>ca では If[(a=Random[])<1/3, 3, If[a<2/3, 4, 5]]
– Excel ではふたつのセルを使う(自分で考えてみること)
10
任意の確率密度関数を実現するには
• 一様分布乱数があると,それを用いて任意の確率密度関数についての乱数を実現することができる.
• 一様乱数を とし,関数 によって生成される値の確率密度関数を とおく. が与えられたとき, は,以下の式より の確率分布関数 を用いて, となる.
正規分布乱数
• 確率密度関数が平均 m と分散 σ2 を用いて以下の式で特徴付けられる分布.
• 前の結果を利用すると正規分布関数を密度関数にもつ乱数を使うことができる.
• Excel の場合には NORMINV 関数を用いる. • Mathema>ca の場合にはもとの確率密度関数を与えればよいのでより簡単に行える.
正規分布乱数の実現
• 平均 5 分散 10 の正規分布に従う乱数を発生させる.
• Excel の場合 – NORMINV[RAND(),5,Sqrt[10]]
• Mathema>ca の場合 – RandomReal[NormalDistribu>on[5,Sqrt[10]]]
13
少し考えてしまう分布
• 以下の分布について Mathema>ca の場合の実現方法を紹介する. – 正方形格子点に一様分布する. – 円周上に一様分布する. – 円の中に一様分布する.
14
格子点
• 50×50の格子点上に,300 個の点を発生させる.
• Mathema>ca では RandomInteger で可能.
15
円周上
• 半径 2 の円周上に一様分布する点を50個発生させる.
16
円の内部
• 半径 3 の円の内部に一様分布する点の発生.
• どうやら捨てている点があるようだ.もっと良い方法はないだろうか?
17
その他の分布
• 以下の分布を自分で作ることができますか? – 点 (4,3) を中心に x 方向と y 方向の分散がそれぞれ 2 と 4 になるように正規分布させる.
– 一辺2の正方形内に点を分布させる.ただし,半分から上のほうが点の密度が2倍になるようにする.
– 球の表面に一様に点を分布させる. – 球の中に一様分布させる.
18