8

不均一なランダム数を生成する方法を教えてください。
私はJavaを使用していますが、コード例は任意のものにすることができます。

1つの方法は、2つの均一な乱数を足し合わせて(つまり、2つのサイコロを振って)偏った分布を作成することです。

4

3 に答える 3

11

一様分布の乱数を生成してから、それぞれに逆不均一累積分布関数を適用してみてください。

于 2009-06-10T18:27:55.310 に答える
7

どのような偏差の分布が必要ですか?

これは常に機能する手法ですが、常に最も効率的であるとは限りません。累積分散関数P(x)は、値がxを下回る時間の割合を示します。したがって、xの可能な最小値でP(x)= 0、xの可能な最大値でP(x)=1です。すべての分布には一意のCDFがあり、P(x)が0から1に上昇するように分布のすべてのプロパティをエンコードします。yが間隔[0,1]で均一に逸脱している場合、xはP(x )= yは、分布に応じて分布されます。これを完全に機能させるには、分布のP(x)の逆数を計算する方法が必要です。

Meta.Numericsライブラリは、一般的に使用される多数の分布(たとえば、正規、対数正規、指数、カイ2乗など)を定義し、それぞれのCDF(Distribution.LeftProbability)および逆CDF(Distribution.InverseLeftProbability)を計算する関数を備えています。。

特定の分散に対して高速な特殊な手法、たとえば、正規分布の偏差に対するボックスミュラー手法については、「数値レシピ」という本を参照してください。

于 2009-06-10T18:54:25.927 に答える
1

Javaを使用している場合は、私のUncommonsMathsライブラリが興味深いかもしれません。これには、一様分布、ガウス分布、ポアソン分布、二項分布、および指数分布の乱数を生成するためのクラスが含まれています。 この記事では、これらのディストリビューションをどのように使用するかを示します。

于 2009-06-21T10:06:19.860 に答える