提出日:2014年 7 月18 日
課題 2(公開用)
T2C_(Twitter : @T2C_)
1
■課題内容
合成関数の確率密度を持つ乱数を生成し、ヒストグラムを作成し、また理論値との比較を行う。
■合成法
○計算内容・概要
一様分布乱数から合成関数の確率密度を持つ乱数を生成する。
n 個の確率密度 hi(x)の合成関数 f(x)の標準系は
f(x) = ∑ βi hi(x)
𝑛
𝑖=1
, (𝑎 ≤ x ≤ b), βi ∶ 合成比率。また βi ≥ 0
また
∫ ℎ𝑖(𝑥)𝑑𝑥
𝑏
a
= 1 , ∑ βi
𝑛
𝑖=1
= 1
を満たす。
この標準系を基に確率密度 hk(x)で x を生成する。
(1) a=0 , b =1 とし、区間(a , b)で一様乱数ξ1、ξ2 を生成する
(2) ξ1 により k を決める。
(3)
β0 = 0 として ∑ βi
𝑘−1
𝑖=0
< ξ1 < ∑ βi
𝑘
𝑖=0
(1 ≤ k ≤ n) である。
(4) ξ2 により確率密度 hk(x)に従って x を生成する。
これを利用して
例 1. f(x) =
3
5
(1 + 𝑥 +
1
2
𝑥2
) , (0 < x < 1)
例 2. f(x) =
1
4
(
1
√ 𝑥
+
1
√1 − 𝑥
) , (0 < x < 1)
2
の密度を持つ確率変数 x を生成する。
まず標準系への変換を施し、
例 1.f(x) =
3
5
× 1 +
3
5
×
1
2
× 2𝑥 +
3
5
×
1
2
×
1
3
× 3𝑥2
∴ β1 =
3
5
, β2 =
3
10
, β3 =
1
10
また h1(x) = 1 , h2(x) = 2𝑥 , h1(x) = 3𝑥2
これより以下の手順で生成する。
① ξ1 を発生
② ξ1 ≦
3
5
であればξ2 を発生し x とする
③
3
5
< ξ1 ≦
9
10
であればξ2、ξ3 を発生しその最大の値を x とする
④ ξ1 >
9
10
であればξ2、ξ3、ξ4 を発生しその最大の値を x とする
しかしこれはプログラミング上効率化が出来るので、
① ξ1 を発生、またもう一つ生成した乱数を x とする
② ξ1 <
3
5
でなければ再び乱数を発生し元の x と比較して大きい方を x とする
③ ξ1 <
9
10
でなければ再び乱数を発生し元の x と比較して大きい方を x とする
とする。
例 2.f(x) =
1
2
×
1
2√ 𝑥
+
1
2
×
1
2√1 − 𝑥
∴ β1 =
1
2
, β2 =
1
2
また h1(x) =
1
2√ 𝑥
, h2(x) =
1
2√1 − 𝑥
また H1(X) = ∫ ℎ1(𝑥)𝑑𝑥
𝑥
0
= √ 𝑥 , H2(X) = ∫ ℎ2(𝑥)𝑑𝑥
𝑥
0
= 1 − √1 − 𝑥
これより以下の手順で生成する。
① ξ1 を発生し 2 乗にしたものを x とする
② ξ2 を発生し
1
2
以上であれば x = 1 - x とする
以上を踏まえて VBA(Excel2010 上)でプログラミングを行った。
3
――――― 以下 ソースコード ―――――
Const beta1 As Double = 3 / 5, _
beta2 As Double = 9 / 10, _
beta3 As Double = 1 / 2
Function Rei1() As Double
Dim xi As Double
Randomize
xi = Rnd()
Rei1 = Rnd()
If (xi < beta1) Then
Else
Rei1 = max(Rei1, Rnd())
End If
If (xi < beta2) Then
Else
Rei1 = max(Rei1, Rnd())
End If
End Function
4
Function Rei2() As Double
Randomize
Rei2 = (Rnd()) ^ 2
If (Rnd() > beta3) Then
Rei2 = 1 - Rei2
End If
End Function
Function max(a As Double, b As Double) As Double
If (a > b) Then
max = a
Else
max = b
End If
End Function
Function F(ex As Integer, x1 As Double, x2 As Double)
If ex = 1 Then
F = 3 / 5 * ((x2 + 1 / 2 * x2 * x2 + 1 / 6 * x2 * x2 * x2) _
- (x1 + 1 / 2 * x1 * x1 + 1 / 6 * x1 * x1 * x1))
ElseIf ex = 2 Then
F = -1 / 2 * ((Sqr(1 - x2) - Sqr(x2)) - (Sqr(1 - x1) - Sqr(x1)))
End If
5
End Function
Function histogramming()
Dim N As Long, Nbin As Integer, Nbin1 As Integer, _
NRnd As Long, i As Integer, ex As Integer
Dim a As Double, b As Double, dx As Double, _
x As Double, x2 As Double, y As Double
With Sheet1
.Cells(4, 11) = InputBox("例題番号を入力してください(1 or 2)", "例題番号の決定")
.Cells(4, 12) = InputBox("Nbin 数を入力してください。(30-50)", "Nbin の決定")
.Cells(4, 13) = InputBox("発生する乱数の個数を入力してください。型:Long", "乱数の個数の決定")
ex = .Cells(4, 11)
Nbin = .Cells(4, 12)
Nbin1 = Nbin + 1
NRnd = .Cells(4, 13)
a = 0#
b = 1#
Dim H(0 To 51) As Long
For i = 0 To Nbin1
H(i) = 0
Next i
dx = (b - a) / Nbin
For N = 1 To NRnd
If ex = 1 Then
x1 = Rei1()
ElseIf ex = 2 Then
x1 = Rei2()
End If
6
x2 = x1 - a '3 つの乱数の最大値 0~1
i = Int(x2 / dx) + 1 '(x * Nbin) + 1 ->添字
If (i < 0) Then
i = 0
End If
If (i > Nbin) Then
i = Nbin1
End If
H(i) = H(i) + 1
Next N
For i = 1 To Nbin
x = a + (i - 0.5) * dx ' / Nbin
y = H(i) / (NRnd * dx)
.Cells(i + 3, 2) = x
.Cells(i + 3, 3) = y
Next i
End With
End Function
Sub Analytic()
Dim N As Long, Nbin As Integer, Nbin1 As Integer, _
i As Integer, a As Integer, b As Integer, ex As Integer
Dim dx As Double, H As Double, _
x As Double, x1 As Double, x2 As Double
7
With Sheet1
.Cells(4, 11) = InputBox("例題番号を入力してください(1 or 2)", "例題番号の決定")
.Cells(4, 12) = InputBox("Nbin 数を入力してください。(30-50)", "Nbin の決定")
.Cells(4, 13) = InputBox("発生する乱数の個数を入力してください。型:Long", "乱数の個数の決定")
ex = .Cells(4, 11)
Nbin = .Cells(4, 12)
Nbin1 = Nbin + 1
NRnd = .Cells(4, 13)
a = 0
b = 1
dx = (b - a) / Nbin
For i = 1 To Nbin
x1 = a + (i - 1) * dx
x2 = x1 + dx
x = (x1 + x2) / 2
H = F(ex, x1, x2) / dx
.Cells(i + 3, 4) = x
.Cells(i + 3, 5) = H
Next i
End With
End Sub
Sub clear()
With Sheet1
Range(.Cells(4, 2), Cells(100, 5)).clear
End With
End Sub
8
――――― ソースコード 終わり ―――――
○実行結果
例 1、例 2 のいずれもビンの数は 50 個、乱数の個数は 50 万個で行った。
実行結果とそのグラフは以下の様になった。
x Histogram X Theoritical Value
0.01 0.7152 0.01 0.60604
0.03 0.6728 0.03 0.61828
0.05 0.5958 0.05 0.63076
0.07 0.6875 0.07 0.64348
0.09 0.6543 0.09 0.65644
0.11 0.7266 0.11 0.66964
0.13 0.6355 0.13 0.68308
0.15 0.5861 0.15 0.69676
0.17 0.6384 0.17 0.71068
0.19 0.5642 0.19 0.72484
0.21 0.8228 0.21 0.73924
0.23 0.8703 0.23 0.75388
0.25 0.7671 0.25 0.76876
0.27 0.7129 0.27 0.78388
0.29 0.8393 0.29 0.79924
0.31 0.9365 0.31 0.81484
0.33 0.9266 0.33 0.83068
0.35 0.8699 0.35 0.84676
0.37 0.9245 0.37 0.86308
0.39 0.7719 0.39 0.87964
0.41 0.9901 0.41 0.89644
0.43 0.7176 0.43 0.91348
0.45 1.0522 0.45 0.93076
0.47 0.8322 0.47 0.94828
0.49 0.8968 0.49 0.96604
0.51 1.0948 0.51 0.98404
0.53 1.0348 0.53 1.00228
0.55 1.0004 0.55 1.02076
0.57 1.0629 0.57 1.03948
0.59 1.0859 0.59 1.05844
0.61 1.0651 0.61 1.07764
0.63 0.9816 0.63 1.09708
0.65 1.1712 0.65 1.11676
0.67 1.3133 0.67 1.13668
0.69 1.1663 0.69 1.15684
0.71 1.2546 0.71 1.17724
0.73 1.2766 0.73 1.19788
0.75 1.2152 0.75 1.21876
0.77 1.1574 0.77 1.23988
0.79 1.249 0.79 1.26124
0.81 1.2604 0.81 1.28284
0.83 1.1411 0.83 1.30468
0.85 1.2497 0.85 1.32676
0.87 1.4273 0.87 1.34908
0.89 1.2282 0.89 1.37164
0.91 1.3643 0.91 1.39444
0.93 1.4689 0.93 1.41748
0.95 1.3478 0.95 1.44076
0.97 1.4289 0.97 1.46428
0.99 1.5472 0.99 1.48804
x Histogram X Theoritical Value
0.01 3.8108 0.01 3.786796564
0.03 1.7192 0.03 1.718306008
0.05 1.368 0.05 1.380222498
0.07 1.1645 0.07 1.206585125
0.09 1.1282 0.09 1.096701504
0.11 1.0232 0.11 1.01956354
0.13 1.0023 0.13 0.961921989
0.15 0.918 0.15 0.917024297
0.17 0.8887 0.17 0.881017347
0.19 0.8458 0.19 0.85152124
0.21 0.8462 0.21 0.826977121
0.23 0.8057 0.23 0.806316762
0.25 0.7912 0.25 0.78878162
0.27 0.7501 0.27 0.773817503
0.29 0.7438 0.29 0.761010155
0.31 0.7587 0.31 0.750044221
0.33 0.7434 0.33 0.74067623
0.35 0.7719 0.35 0.732716274
0.37 0.7054 0.37 0.726015322
0.39 0.7028 0.39 0.720456247
0.41 0.6919 0.41 0.715947412
0.43 0.7267 0.43 0.712418037
0.45 0.7262 0.45 0.709814869
0.47 0.6879 0.47 0.708099811
0.49 0.6833 0.49 0.707248302
0.51 0.7262 0.51 0.707248302
0.53 0.7131 0.53 0.708099811
0.55 0.6952 0.55 0.709814869
0.57 0.6936 0.57 0.712418037
0.59 0.7342 0.59 0.715947412
0.61 0.7449 0.61 0.720456247
0.63 0.6946 0.63 0.726015322
0.65 0.7427 0.65 0.732716274
0.67 0.7314 0.67 0.74067623
0.69 0.7591 0.69 0.750044221
0.71 0.7435 0.71 0.761010155
0.73 0.8042 0.73 0.773817503
0.75 0.7761 0.75 0.78878162
0.77 0.7885 0.77 0.806316762
0.79 0.8547 0.79 0.826977121
0.81 0.8377 0.81 0.85152124
0.83 0.9191 0.83 0.881017347
0.85 0.905 0.85 0.917024297
0.87 0.9055 0.87 0.961921989
0.89 1.0345 0.89 1.01956354
0.91 1.0666 0.91 1.096701504
0.93 1.2394 0.93 1.206585125
0.95 1.4225 0.95 1.380222498
0.97 1.6871 0.97 1.718306008
0.99 3.7767 0.99 3.786796564
9
表 1 例 1 の実行結果 表 2 例 2 の実行結果
図 1 例 1 の実行結果のグラフ化
図 2 例 2 の実行結果のグラフ化
10
■考察
今回は合成関数の確率密度を持つ確率変数を生成してヒストグラムを出力するプログラムを作り、
生成されたヒストグラムと確率密度関数のグラフを同じグラフに可視化して一致することを確認した。
まず例 2 は数回行っても比較的に理論値とは相違が少なかったのに対し、
例 1 の方は回毎にバラつきが大きかったことについて考察する。
これはβの値による相違、つまり元の関数の係数や値による違いによるものであると考えられる。
今回の場合であれば β1 =
3
5
, β2 =
3
10
, β3 =
1
10
であったが、それぞれと(効率化もして)
比較を行い乱数を数個生成した為、よりランダム性が高まったのではないだろうか。
一方例 2 の方では乱数を一つ生成し 2 乗し次の乱数によって足して 1 となる数と入れ替えを行うのみで
あった為、バラつきは少なかったと考えられる。
或いはβの個数による違いであるかもしれないとも考えられるだろう。
また試しに例 1 を乱数は 50 万個で同じまま 500 ビンで行ってみると、
図 3 ビン数 500 の例 1
このように非常に理論値とのズレが顕著となった。
この状態で乱数生成数を 500 万個にすると、
図 4 ビン数 500 乱数 500 万個の例 1
と、当然なだらかにはなるもののそれでも大きくズレる。
0
0.5
1
1.5
2
2.5
0.001
0.085
0.169
0.253
0.337
0.421
0.505
0.589
0.673
0.757
0.841
0.925
Histogram
Theoritical Value
0
0.5
1
1.5
2
0.001
0.079
0.157
0.235
0.313
0.391
0.469
0.547
0.625
0.703
0.781
0.859
0.937
Histogram
Theoritical Value
11
この事からビン数の決定もプロットの上で大きな役割を果たしている事が見て取れるだろう。
速度は 3.4GHz 4 コアの PC 上で、例 1 乱数 50 万個でコンマ秒、500 万個で数秒、
それから 5000 万個で 30 秒ほどであった。
■課題・今後の展望
○別の合成関数(βが多くなるものや条件が面白いもの)との比較
○応用方法の検討
今回において合成関数の確率分布を持つ乱数生成法を習得したので、
その応用方法も考えてみるべきと感じた。
しかし不勉強からか日常においてあまり触れる機会が無かった為直感的に浮かばなかったので
書籍などを参照した上で考えると良いだろう。
■結び
様々な乱数を生成出来れば、それぞれ恐らく使い道が多岐に渡り、
またこれから始まる研究にも応用が利く事は想像に易いので、
自らの糧としてゆきたいとする想いを以て本レポートの結びとする。

More Related Content

PPTX
ベクトル空間と表現行列
PDF
ベクトル空間と表現行列
PPTX
TopCoder SRM614 解説
PDF
SGD+α: 確率的勾配降下法の現在と未来
PDF
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
PDF
高速フーリエ変換
PPTX
ガウス積分の問題
PPTX
Androidで画像処理リベンジ
ベクトル空間と表現行列
ベクトル空間と表現行列
TopCoder SRM614 解説
SGD+α: 確率的勾配降下法の現在と未来
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
高速フーリエ変換
ガウス積分の問題
Androidで画像処理リベンジ

What's hot (17)

PPTX
ガウス積分
PDF
PDF
複素数・四元数と図形の回転
PDF
線形識別モデル
PDF
ゼータへ続く素数の階段物語 第13回 数学カフェ「素数!!」
PDF
素数の分解法則(フロベニウスやばい) #math_cafe
PDF
FNA provime pranuese teste
PDF
上三角 Pascal 行列による多項式のシフト
PPT
Master Thesis
PDF
x^2+ny^2の形で表せる素数の法則と類体論
PDF
線形計画法入門
PDF
はじめてのパターン認識 第6章 後半
PDF
第8章 ガウス過程回帰による異常検知
PDF
パターン認識第9章 学習ベクトル量子化
PDF
パターン認識 第12章 正則化とパス追跡アルゴリズム
PDF
ガウス積分
ガウス積分
複素数・四元数と図形の回転
線形識別モデル
ゼータへ続く素数の階段物語 第13回 数学カフェ「素数!!」
素数の分解法則(フロベニウスやばい) #math_cafe
FNA provime pranuese teste
上三角 Pascal 行列による多項式のシフト
Master Thesis
x^2+ny^2の形で表せる素数の法則と類体論
線形計画法入門
はじめてのパターン認識 第6章 後半
第8章 ガウス過程回帰による異常検知
パターン認識第9章 学習ベクトル量子化
パターン認識 第12章 正則化とパス追跡アルゴリズム
ガウス積分
Ad

Viewers also liked (19)

PDF
Shuttle Weather Criteria
PDF
Prak9-Bandwith Limiter
PPT
Inspire at Leisure and Fitness Exchange June 2011
PDF
Presentación ii curso icld fundación cede - edición repsol (11 al 16 de novie...
PDF
TEVIZZ - Football PSG-RSCA / Social TV Analytics
PPT
biolock Presentation
RTF
Documento
PPTX
Universidad de cuenca
PPTX
Presentation1
PPTX
PPTX
PPTX
Propriedade e internet
PDF
20130603123113
PDF
B'ieg0984sort
PDF
App elogold Brasil
PPTX
परवरदिगार
PPTX
Aula 1 dr. argos - 04-09-2013
Shuttle Weather Criteria
Prak9-Bandwith Limiter
Inspire at Leisure and Fitness Exchange June 2011
Presentación ii curso icld fundación cede - edición repsol (11 al 16 de novie...
TEVIZZ - Football PSG-RSCA / Social TV Analytics
biolock Presentation
Documento
Universidad de cuenca
Presentation1
Propriedade e internet
20130603123113
B'ieg0984sort
App elogold Brasil
परवरदिगार
Aula 1 dr. argos - 04-09-2013
Ad

Similar to Simulation_assignment2 (20)

PDF
【Unity道場】ゲーム制作に使う数学を学習しよう
PDF
Casual learning machine learning with_excel_no5
PDF
回帰
PPTX
極限の問題
PPT
050 確率と確率分布
PDF
ゲーム理論 BASIC 演習134 -企業の協力と利益配分 :仁- #ゲーム理論 #gametheory #数学 #仁 #交渉 #協力ゲーム
PPTX
これならわかる最適化数学8章_動的計画法
PDF
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
PDF
一般化線形混合モデル isseing333
PDF
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
PDF
ーム理論 BASIC 演習120 -無限回繰り返しゲーム:しっぺ返し戦略④- #ゲーム理論 #gametheory #数学 #しっぺ返し戦略 #オウム返し...
PDF
代数トポロジー入門
PPT
K010 appstat201201
PDF
20170327_レムニスケートにまつわる色々な計算
PDF
代数的実数とCADの実装紹介
PDF
ベイズ推論による機械学習入門 第4章
PDF
HPC Phys-20201203
PDF
ゲーム理論 BASIC 演習119 -無限回繰り返しゲーム:しっぺ返し戦略④- #ゲーム理論 #gametheory #数学 #しっぺ返し戦略 #オウム返...
PDF
PRML 10.4 - 10.6
PDF
Rでシステムバイオロジー
【Unity道場】ゲーム制作に使う数学を学習しよう
Casual learning machine learning with_excel_no5
回帰
極限の問題
050 確率と確率分布
ゲーム理論 BASIC 演習134 -企業の協力と利益配分 :仁- #ゲーム理論 #gametheory #数学 #仁 #交渉 #協力ゲーム
これならわかる最適化数学8章_動的計画法
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
一般化線形混合モデル isseing333
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
ーム理論 BASIC 演習120 -無限回繰り返しゲーム:しっぺ返し戦略④- #ゲーム理論 #gametheory #数学 #しっぺ返し戦略 #オウム返し...
代数トポロジー入門
K010 appstat201201
20170327_レムニスケートにまつわる色々な計算
代数的実数とCADの実装紹介
ベイズ推論による機械学習入門 第4章
HPC Phys-20201203
ゲーム理論 BASIC 演習119 -無限回繰り返しゲーム:しっぺ返し戦略④- #ゲーム理論 #gametheory #数学 #しっぺ返し戦略 #オウム返...
PRML 10.4 - 10.6
Rでシステムバイオロジー

More from T2C_ (14)

PPTX
Back propagation
PPTX
単純パーセプトロン
PPTX
インターンシップ成果報告会 発表資料
PPTX
インターンシップ成果報告(修正前)
PPTX
Should Japanese Education Be Vocational Training School?
PPTX
Hello deeplearning!
PPTX
就活活動ゼミ プレゼンテーション2
PPTX
就職活動ゼミ プレゼンテーション1
PDF
Parallel Computation Foundation's assignment 2
PDF
Parallel Computation Foundation's assignment 1
PDF
Simulation_assignment9
PDF
Simulation_Report1
PPTX
論文読解:クイズ王ワトソン
PPTX
Spmv9forpublic
Back propagation
単純パーセプトロン
インターンシップ成果報告会 発表資料
インターンシップ成果報告(修正前)
Should Japanese Education Be Vocational Training School?
Hello deeplearning!
就活活動ゼミ プレゼンテーション2
就職活動ゼミ プレゼンテーション1
Parallel Computation Foundation's assignment 2
Parallel Computation Foundation's assignment 1
Simulation_assignment9
Simulation_Report1
論文読解:クイズ王ワトソン
Spmv9forpublic

Simulation_assignment2

  • 1. 提出日:2014年 7 月18 日 課題 2(公開用) T2C_(Twitter : @T2C_)
  • 2. 1 ■課題内容 合成関数の確率密度を持つ乱数を生成し、ヒストグラムを作成し、また理論値との比較を行う。 ■合成法 ○計算内容・概要 一様分布乱数から合成関数の確率密度を持つ乱数を生成する。 n 個の確率密度 hi(x)の合成関数 f(x)の標準系は f(x) = ∑ βi hi(x) 𝑛 𝑖=1 , (𝑎 ≤ x ≤ b), βi ∶ 合成比率。また βi ≥ 0 また ∫ ℎ𝑖(𝑥)𝑑𝑥 𝑏 a = 1 , ∑ βi 𝑛 𝑖=1 = 1 を満たす。 この標準系を基に確率密度 hk(x)で x を生成する。 (1) a=0 , b =1 とし、区間(a , b)で一様乱数ξ1、ξ2 を生成する (2) ξ1 により k を決める。 (3) β0 = 0 として ∑ βi 𝑘−1 𝑖=0 < ξ1 < ∑ βi 𝑘 𝑖=0 (1 ≤ k ≤ n) である。 (4) ξ2 により確率密度 hk(x)に従って x を生成する。 これを利用して 例 1. f(x) = 3 5 (1 + 𝑥 + 1 2 𝑥2 ) , (0 < x < 1) 例 2. f(x) = 1 4 ( 1 √ 𝑥 + 1 √1 − 𝑥 ) , (0 < x < 1)
  • 3. 2 の密度を持つ確率変数 x を生成する。 まず標準系への変換を施し、 例 1.f(x) = 3 5 × 1 + 3 5 × 1 2 × 2𝑥 + 3 5 × 1 2 × 1 3 × 3𝑥2 ∴ β1 = 3 5 , β2 = 3 10 , β3 = 1 10 また h1(x) = 1 , h2(x) = 2𝑥 , h1(x) = 3𝑥2 これより以下の手順で生成する。 ① ξ1 を発生 ② ξ1 ≦ 3 5 であればξ2 を発生し x とする ③ 3 5 < ξ1 ≦ 9 10 であればξ2、ξ3 を発生しその最大の値を x とする ④ ξ1 > 9 10 であればξ2、ξ3、ξ4 を発生しその最大の値を x とする しかしこれはプログラミング上効率化が出来るので、 ① ξ1 を発生、またもう一つ生成した乱数を x とする ② ξ1 < 3 5 でなければ再び乱数を発生し元の x と比較して大きい方を x とする ③ ξ1 < 9 10 でなければ再び乱数を発生し元の x と比較して大きい方を x とする とする。 例 2.f(x) = 1 2 × 1 2√ 𝑥 + 1 2 × 1 2√1 − 𝑥 ∴ β1 = 1 2 , β2 = 1 2 また h1(x) = 1 2√ 𝑥 , h2(x) = 1 2√1 − 𝑥 また H1(X) = ∫ ℎ1(𝑥)𝑑𝑥 𝑥 0 = √ 𝑥 , H2(X) = ∫ ℎ2(𝑥)𝑑𝑥 𝑥 0 = 1 − √1 − 𝑥 これより以下の手順で生成する。 ① ξ1 を発生し 2 乗にしたものを x とする ② ξ2 を発生し 1 2 以上であれば x = 1 - x とする 以上を踏まえて VBA(Excel2010 上)でプログラミングを行った。
  • 4. 3 ――――― 以下 ソースコード ――――― Const beta1 As Double = 3 / 5, _ beta2 As Double = 9 / 10, _ beta3 As Double = 1 / 2 Function Rei1() As Double Dim xi As Double Randomize xi = Rnd() Rei1 = Rnd() If (xi < beta1) Then Else Rei1 = max(Rei1, Rnd()) End If If (xi < beta2) Then Else Rei1 = max(Rei1, Rnd()) End If End Function
  • 5. 4 Function Rei2() As Double Randomize Rei2 = (Rnd()) ^ 2 If (Rnd() > beta3) Then Rei2 = 1 - Rei2 End If End Function Function max(a As Double, b As Double) As Double If (a > b) Then max = a Else max = b End If End Function Function F(ex As Integer, x1 As Double, x2 As Double) If ex = 1 Then F = 3 / 5 * ((x2 + 1 / 2 * x2 * x2 + 1 / 6 * x2 * x2 * x2) _ - (x1 + 1 / 2 * x1 * x1 + 1 / 6 * x1 * x1 * x1)) ElseIf ex = 2 Then F = -1 / 2 * ((Sqr(1 - x2) - Sqr(x2)) - (Sqr(1 - x1) - Sqr(x1))) End If
  • 6. 5 End Function Function histogramming() Dim N As Long, Nbin As Integer, Nbin1 As Integer, _ NRnd As Long, i As Integer, ex As Integer Dim a As Double, b As Double, dx As Double, _ x As Double, x2 As Double, y As Double With Sheet1 .Cells(4, 11) = InputBox("例題番号を入力してください(1 or 2)", "例題番号の決定") .Cells(4, 12) = InputBox("Nbin 数を入力してください。(30-50)", "Nbin の決定") .Cells(4, 13) = InputBox("発生する乱数の個数を入力してください。型:Long", "乱数の個数の決定") ex = .Cells(4, 11) Nbin = .Cells(4, 12) Nbin1 = Nbin + 1 NRnd = .Cells(4, 13) a = 0# b = 1# Dim H(0 To 51) As Long For i = 0 To Nbin1 H(i) = 0 Next i dx = (b - a) / Nbin For N = 1 To NRnd If ex = 1 Then x1 = Rei1() ElseIf ex = 2 Then x1 = Rei2() End If
  • 7. 6 x2 = x1 - a '3 つの乱数の最大値 0~1 i = Int(x2 / dx) + 1 '(x * Nbin) + 1 ->添字 If (i < 0) Then i = 0 End If If (i > Nbin) Then i = Nbin1 End If H(i) = H(i) + 1 Next N For i = 1 To Nbin x = a + (i - 0.5) * dx ' / Nbin y = H(i) / (NRnd * dx) .Cells(i + 3, 2) = x .Cells(i + 3, 3) = y Next i End With End Function Sub Analytic() Dim N As Long, Nbin As Integer, Nbin1 As Integer, _ i As Integer, a As Integer, b As Integer, ex As Integer Dim dx As Double, H As Double, _ x As Double, x1 As Double, x2 As Double
  • 8. 7 With Sheet1 .Cells(4, 11) = InputBox("例題番号を入力してください(1 or 2)", "例題番号の決定") .Cells(4, 12) = InputBox("Nbin 数を入力してください。(30-50)", "Nbin の決定") .Cells(4, 13) = InputBox("発生する乱数の個数を入力してください。型:Long", "乱数の個数の決定") ex = .Cells(4, 11) Nbin = .Cells(4, 12) Nbin1 = Nbin + 1 NRnd = .Cells(4, 13) a = 0 b = 1 dx = (b - a) / Nbin For i = 1 To Nbin x1 = a + (i - 1) * dx x2 = x1 + dx x = (x1 + x2) / 2 H = F(ex, x1, x2) / dx .Cells(i + 3, 4) = x .Cells(i + 3, 5) = H Next i End With End Sub Sub clear() With Sheet1 Range(.Cells(4, 2), Cells(100, 5)).clear End With End Sub
  • 9. 8 ――――― ソースコード 終わり ――――― ○実行結果 例 1、例 2 のいずれもビンの数は 50 個、乱数の個数は 50 万個で行った。 実行結果とそのグラフは以下の様になった。 x Histogram X Theoritical Value 0.01 0.7152 0.01 0.60604 0.03 0.6728 0.03 0.61828 0.05 0.5958 0.05 0.63076 0.07 0.6875 0.07 0.64348 0.09 0.6543 0.09 0.65644 0.11 0.7266 0.11 0.66964 0.13 0.6355 0.13 0.68308 0.15 0.5861 0.15 0.69676 0.17 0.6384 0.17 0.71068 0.19 0.5642 0.19 0.72484 0.21 0.8228 0.21 0.73924 0.23 0.8703 0.23 0.75388 0.25 0.7671 0.25 0.76876 0.27 0.7129 0.27 0.78388 0.29 0.8393 0.29 0.79924 0.31 0.9365 0.31 0.81484 0.33 0.9266 0.33 0.83068 0.35 0.8699 0.35 0.84676 0.37 0.9245 0.37 0.86308 0.39 0.7719 0.39 0.87964 0.41 0.9901 0.41 0.89644 0.43 0.7176 0.43 0.91348 0.45 1.0522 0.45 0.93076 0.47 0.8322 0.47 0.94828 0.49 0.8968 0.49 0.96604 0.51 1.0948 0.51 0.98404 0.53 1.0348 0.53 1.00228 0.55 1.0004 0.55 1.02076 0.57 1.0629 0.57 1.03948 0.59 1.0859 0.59 1.05844 0.61 1.0651 0.61 1.07764 0.63 0.9816 0.63 1.09708 0.65 1.1712 0.65 1.11676 0.67 1.3133 0.67 1.13668 0.69 1.1663 0.69 1.15684 0.71 1.2546 0.71 1.17724 0.73 1.2766 0.73 1.19788 0.75 1.2152 0.75 1.21876 0.77 1.1574 0.77 1.23988 0.79 1.249 0.79 1.26124 0.81 1.2604 0.81 1.28284 0.83 1.1411 0.83 1.30468 0.85 1.2497 0.85 1.32676 0.87 1.4273 0.87 1.34908 0.89 1.2282 0.89 1.37164 0.91 1.3643 0.91 1.39444 0.93 1.4689 0.93 1.41748 0.95 1.3478 0.95 1.44076 0.97 1.4289 0.97 1.46428 0.99 1.5472 0.99 1.48804 x Histogram X Theoritical Value 0.01 3.8108 0.01 3.786796564 0.03 1.7192 0.03 1.718306008 0.05 1.368 0.05 1.380222498 0.07 1.1645 0.07 1.206585125 0.09 1.1282 0.09 1.096701504 0.11 1.0232 0.11 1.01956354 0.13 1.0023 0.13 0.961921989 0.15 0.918 0.15 0.917024297 0.17 0.8887 0.17 0.881017347 0.19 0.8458 0.19 0.85152124 0.21 0.8462 0.21 0.826977121 0.23 0.8057 0.23 0.806316762 0.25 0.7912 0.25 0.78878162 0.27 0.7501 0.27 0.773817503 0.29 0.7438 0.29 0.761010155 0.31 0.7587 0.31 0.750044221 0.33 0.7434 0.33 0.74067623 0.35 0.7719 0.35 0.732716274 0.37 0.7054 0.37 0.726015322 0.39 0.7028 0.39 0.720456247 0.41 0.6919 0.41 0.715947412 0.43 0.7267 0.43 0.712418037 0.45 0.7262 0.45 0.709814869 0.47 0.6879 0.47 0.708099811 0.49 0.6833 0.49 0.707248302 0.51 0.7262 0.51 0.707248302 0.53 0.7131 0.53 0.708099811 0.55 0.6952 0.55 0.709814869 0.57 0.6936 0.57 0.712418037 0.59 0.7342 0.59 0.715947412 0.61 0.7449 0.61 0.720456247 0.63 0.6946 0.63 0.726015322 0.65 0.7427 0.65 0.732716274 0.67 0.7314 0.67 0.74067623 0.69 0.7591 0.69 0.750044221 0.71 0.7435 0.71 0.761010155 0.73 0.8042 0.73 0.773817503 0.75 0.7761 0.75 0.78878162 0.77 0.7885 0.77 0.806316762 0.79 0.8547 0.79 0.826977121 0.81 0.8377 0.81 0.85152124 0.83 0.9191 0.83 0.881017347 0.85 0.905 0.85 0.917024297 0.87 0.9055 0.87 0.961921989 0.89 1.0345 0.89 1.01956354 0.91 1.0666 0.91 1.096701504 0.93 1.2394 0.93 1.206585125 0.95 1.4225 0.95 1.380222498 0.97 1.6871 0.97 1.718306008 0.99 3.7767 0.99 3.786796564
  • 10. 9 表 1 例 1 の実行結果 表 2 例 2 の実行結果 図 1 例 1 の実行結果のグラフ化 図 2 例 2 の実行結果のグラフ化
  • 11. 10 ■考察 今回は合成関数の確率密度を持つ確率変数を生成してヒストグラムを出力するプログラムを作り、 生成されたヒストグラムと確率密度関数のグラフを同じグラフに可視化して一致することを確認した。 まず例 2 は数回行っても比較的に理論値とは相違が少なかったのに対し、 例 1 の方は回毎にバラつきが大きかったことについて考察する。 これはβの値による相違、つまり元の関数の係数や値による違いによるものであると考えられる。 今回の場合であれば β1 = 3 5 , β2 = 3 10 , β3 = 1 10 であったが、それぞれと(効率化もして) 比較を行い乱数を数個生成した為、よりランダム性が高まったのではないだろうか。 一方例 2 の方では乱数を一つ生成し 2 乗し次の乱数によって足して 1 となる数と入れ替えを行うのみで あった為、バラつきは少なかったと考えられる。 或いはβの個数による違いであるかもしれないとも考えられるだろう。 また試しに例 1 を乱数は 50 万個で同じまま 500 ビンで行ってみると、 図 3 ビン数 500 の例 1 このように非常に理論値とのズレが顕著となった。 この状態で乱数生成数を 500 万個にすると、 図 4 ビン数 500 乱数 500 万個の例 1 と、当然なだらかにはなるもののそれでも大きくズレる。 0 0.5 1 1.5 2 2.5 0.001 0.085 0.169 0.253 0.337 0.421 0.505 0.589 0.673 0.757 0.841 0.925 Histogram Theoritical Value 0 0.5 1 1.5 2 0.001 0.079 0.157 0.235 0.313 0.391 0.469 0.547 0.625 0.703 0.781 0.859 0.937 Histogram Theoritical Value
  • 12. 11 この事からビン数の決定もプロットの上で大きな役割を果たしている事が見て取れるだろう。 速度は 3.4GHz 4 コアの PC 上で、例 1 乱数 50 万個でコンマ秒、500 万個で数秒、 それから 5000 万個で 30 秒ほどであった。 ■課題・今後の展望 ○別の合成関数(βが多くなるものや条件が面白いもの)との比較 ○応用方法の検討 今回において合成関数の確率分布を持つ乱数生成法を習得したので、 その応用方法も考えてみるべきと感じた。 しかし不勉強からか日常においてあまり触れる機会が無かった為直感的に浮かばなかったので 書籍などを参照した上で考えると良いだろう。 ■結び 様々な乱数を生成出来れば、それぞれ恐らく使い道が多岐に渡り、 またこれから始まる研究にも応用が利く事は想像に易いので、 自らの糧としてゆきたいとする想いを以て本レポートの結びとする。