減少する線形頻度分布に従う乱数を生成したいと思います。例として n=1-x を取ります。
ただし、numpy ライブラリは、より複雑なディストリビューションしか提供していないようです。
減少する線形頻度分布に従う乱数を生成したいと思います。例として n=1-x を取ります。
ただし、numpy ライブラリは、より複雑なディストリビューションしか提供していないようです。
密度のある非正規化 PDF の場合
1-x, in the range [0...1)
正規化定数は 1/2
CDF は次の値に等しい2x-x^2
したがって、サンプリングは非常に明白です
r = 1.0 - math.sqrt(random.random())
サンプル プログラムはほとんど同じプロットを作成しました
import math
import random
import matplotlib.pyplot as plt
bins = [0.1 * i for i in range(12)]
plt.hist([(1.0 - math.sqrt(random.random())) for k in range(10000)], bins)
plt.show()
アップデート
S
を積分とし、から までの定S_a^b
積分です。a
b
そう
Denormalized PDF(x) = 1-x
正規化:
N = S_0^1 (1-x) dx = 1/2
したがって、正規化された PDF
PDF(x) = 2*(1-x)
CDFを計算してみましょう
CDF(x) = S_0^x PDF(x) dx = 2x - x*x
チェック中: CDF(0) = 0
、CDF(1) = 1
サンプリングは逆 CDF 法を介して行われ、x
CDF(x) = U(0,1)
ここでU(0,1)
、[0,1) の一様ランダム
これは、解のある単純な二次方程式です。
x = 1 - sqrt(1 - U(0,1)) = 1 - sqrt(U(0,1))
Pythonコードに直接変換された