提出日: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 秒ほどであった。
■課題・今後の展望
○別の合成関数(βが多くなるものや条件が面白いもの)との比較
○応用方法の検討
今回において合成関数の確率分布を持つ乱数生成法を習得したので、
その応用方法も考えてみるべきと感じた。
しかし不勉強からか日常においてあまり触れる機会が無かった為直感的に浮かばなかったので
書籍などを参照した上で考えると良いだろう。
■結び
様々な乱数を生成出来れば、それぞれ恐らく使い道が多岐に渡り、
またこれから始まる研究にも応用が利く事は想像に易いので、
自らの糧としてゆきたいとする想いを以て本レポートの結びとする。

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() AsDouble 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() DimN 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 秒ほどであった。 ■課題・今後の展望 ○別の合成関数(βが多くなるものや条件が面白いもの)との比較 ○応用方法の検討 今回において合成関数の確率分布を持つ乱数生成法を習得したので、 その応用方法も考えてみるべきと感じた。 しかし不勉強からか日常においてあまり触れる機会が無かった為直感的に浮かばなかったので 書籍などを参照した上で考えると良いだろう。 ■結び 様々な乱数を生成出来れば、それぞれ恐らく使い道が多岐に渡り、 またこれから始まる研究にも応用が利く事は想像に易いので、 自らの糧としてゆきたいとする想いを以て本レポートの結びとする。