-3

減少する線形頻度分布に従う乱数を生成したいと思います。例として n=1-x を取ります。

ただし、numpy ライブラリは、より複雑なディストリビューションしか提供していないようです。

4

2 に答える 2

2

密度のある非正規化 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積分です。ab

そう

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) = 0CDF(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コードに直接変換された

于 2015-07-02T01:10:44.313 に答える