3

Matlab を使用して奇数乱数を生成する方法について助けが必要です。1 から 100 の間など、特定の間隔内で奇数の乱数を生成するにはどうすればよいでしょうか?

4

1 に答える 1

9

まあ、ある間隔内で EVEN 乱数を生成できれば、1 を追加するだけです。:)

それは思ったほどばかげたことではありません。

ランダムな整数を生成できますか? できれば、2 を掛けてみませんか? 次に、偶数のランダムな整数があります。次に何をすべきかについては、上記を参照してください。

MATLAB には、間隔内でランダムな整数を生成するためのツールがあります。そうでない場合は、自分で簡単に書くことができます。たとえば、これは何をしますか:

r = 1 + 2*floor(rand(N,1)*50);

またはこれ:

r = 1 + 2*randi([0 49], N,1);

Rody がこの回答を編集しましたが、randi を使用して編集したときに間違いを犯したことに注意してください。問題を修正しました。randi は、私が変更したため、サンプリングで意図的に 49 までしか上がらないことに注意してください。2*49 + 1 = 99 であるため、これは機能します。

では、ランドの場合はどうでしょうか。49 ではなく 50 を掛けたのはなぜですか? これは、ランドのドキュメントから取得されます。

"r = rand(n) は、開区間 (0,1) の標準一様分布から抽出された疑似乱数値を含む n 行 n 列の行列を返します。"

したがって、rand は正確な 1 を生成することはありません。1 よりわずかに小さい数を生成することはできますが、1 になることはありません。したがって、50 を掛けると、正確に 50 になることはありませんが、50 をわずかに下回る可能性があるだけの数になります。次に、基本的に等しい確率で、0 から 49 までのすべての整数を生成します。0 は rand からの可能な結果ではないため、整数 0 はこの式によって eps のオーダーの量だけアンダーサンプリングされることを誰かが指摘すると思います。この程度のアンダーサンプリングを確認できるほど多くのサンプルを生成する場合は、作業を行うためにより大きく高速なコンピューターが必要になります。:)

于 2012-10-08T02:07:40.970 に答える