アプリ版:「スタンプのみでお礼する」機能のリリースについて

一様乱数を生成する関数rand()について
 ・Y = rand(n);

 ・rand('state',sum(100*clock));
  Y = rand(n);

という2つのやり方があるようなのですが,以下のmatlabの関数の説明
のページをみても2つの違いが理解できません.
http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/MATLA …

どういう違いがあるのでしょうか?
また,この関数は[0,1]の一様乱数としていますが,[-a,a]みたいに範囲指定はできないのでしょうか?

回答よろしくお願いします.

A 回答 (1件)

Y = rand(n);


は乱数発生器が固定されています。
ですので、rand関数を実行するたびに同じルールに従って乱数を生成します。

対して、
rand('state',sum(100*clock));
Y = rand(n);
は使用する乱数発生器を実行時の時間を基準に決定します。
ですので、rand関数を実行するたびにルールを変更して乱数を生成します。(変更した結果、同じルールが選択される場合もあります)

任意の範囲で正負を付けたい場合は、例えば以下のようにすれば可能です。

例:-1000~1000の乱数の場合
(1) 乱数1生成
(2) 乱数2生成
(3) Ans = 1000 * 乱数1
(4) 乱数2が奇数の場合 Ans = -Ans
    • good
    • 0
この回答へのお礼

回答ありがとうございました.
違いが理解できました.
乱数発生器を実行時の時間を基準に決定するほうがよさそうなので
そちらを採用しようと思います.
区間指定方法も回答を参考にさせていただきます.

お礼日時:2008/06/18 22:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!