0

線形合同法を使用して、Matlabで以下の質問を解決しようとしています。この関数のコード行を以下に示します。m基本的には、期待できる値の範囲の最大値であるため、質問によって異なります。最初のシードxは最初にクロックによって決定され、次に各乱数が関数にフィードバックされて新しいものが生成されます。lcg値を選択するためのルールは、ここhttp://en.wikipedia.org/wiki/Linear_congruential_generatorに記載されています。私が必要としているのは、指定された期間の適切な値aですc

私のlcgコード

random_number = mod((a*x + c),m);
  • Q1には1から52までの乱数が必要です(ポーカーハンドの確率)
  • Q2には1から366までの乱数が必要です(誕生日のパラドックス)
  • Q3には1から3までの乱数が必要です(モンティホール問題)
  • Q4には1から1000までの数字が必要です

かなり単純に見えるかもしれませんが、これを狭い範囲で実装すると、短いピリオド、つまり4桁の数字が連続して繰り返されるパターンが生成される傾向があります。

また、別の値を使用して、必要な範囲外の値を除外することも可能かもしれmませんが、正直なところ、それは必要ではないと思います。どうもありがとう

4

1 に答える 1

0

私はこれに少し違ったアプローチをします:

  • いくつかの既知の値を取得します (ウィキペディアに表があります)
  • あなたがそれらを取るなら、あなたは仮定することができます*それらは一様分布を持っています
  • 結果を範囲に合わせてスケーリングします。たとえばrnd()*52 / m + 1、それを出力として取得します

    *心に留めておいてください、「あなたが想定するとき、あなたはあなたと私からお尻を作ります」;)

于 2013-03-29T21:01:27.133 に答える