以下のExcelでは、式は平均10と分散1の正規分布から乱数を生成します。常に乱数の修正セットを取得するように修正シードを設定する方法はありますか? Excel 2010を使用しています
=NORMINV(Rand(),10,1)
スプレッドシート関数を使用して、独自の乱数ジェネレーターを実装できます。たとえば、C++ 11には、繰り返しによって取得される_minstd_Rand
_と呼ばれる Lehmer乱数ジェネレータ があります
_X = X*g (mod m)
_
ここで_g = 48271
_および_m = 2^31-1
_
_A1
_には、シード値を配置できます。 _A2
_に式を入力します。
_=MOD(48271*A1,2^31-1)
_
必要に応じてコピーしてください。
_B2
_に=A2/(2^31-1)
と入力し、_C2
_に=NORM.INV(B2,10,1)
と入力し、必要に応じてコピーします。 _A1
_のシード値はいつでも置き換えることができることに注意してください
_=RANDBETWEEN(0,2^31-2)
_
揮発性のランダム性をオンに戻したい場合。
次のスクリーンショットは、この方法で生成された25個のランダムな正規変数を示しています。
ヒストグラムからわかるように、分布はほぼ正規のように見えます。
[〜#〜] vba [〜#〜]UDF() Rnd()関数。見る:
私はそれが完璧な解決策であるふりをしているわけではありませんが、それは私にとってはうまくいきます。その美しさは、特定のセルに乱数を割り当てることができることです:
Public Function GetRandom(seed As Double, min As Double, max As Double) As Double
Dim colrow As Double
Dim range As Double
range = max - min
If (Application.Caller.Column() = Application.Caller.Row()) Then
colrow = (Log(Application.Caller.Column() + 1) * Log(Application.Caller.Row() + 1)) * seed
Else
colrow = (Log(Application.Caller.Column() + 1) / Log(Application.Caller.Row() + 1)) * seed
End If
Rnd (-1)
Randomize colrow
test = Rnd * range - range / 2
GetRandom = colrow
End Function
使用法:
=GetRandom($Z$1,1,-1)
私の例では、シード値はZ1セルにありますが、もちろん他のセルに入れることもできます。また、最小値と最大値を設定できます。