限定しりとり

合同式法をつかって(CPad)

(1)一様乱数(平均1、分散1)
(2)正規乱数(平均1、分散4)のヒストグラムを作成したいのですが、
どのようにしてすればよいのでしょうか?

ちなみに乱数のプログラムは作成しました。

よろしくお願いいたします。

A 回答 (4件)

0~1の一様乱数ができたのだから、それから計算してα~βの一様乱数に変換すればいいのです。


ヒント
・0~Aの一様乱数にするには、 A * drnd()
・B~B+1の一様乱数にするには、 B + drnd()


これでもわからないようなら、プログラムの本でも買ってきて熟読してください。
おそらくゲーム用の本には乱数のことも詳しく載ってるはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
よくわからないので本でも買って読んでみますね。

お礼日時:2010/07/14 07:41

> ちなみに乱数のプログラムは作成しました



とあったので、[0,1)の一様乱数くらいにはなっているのだと思ってました。

合同法で
x = (x * a + b) % m ; (C言語表記)
としたときに、
0≦x<m
になります。m>0より、各辺をmで割れば
0≦X(=x/m)<1
となります。

実際の場面でも、xをそのまま使うことは少なく、mで割った X を基に、欲しい範囲の乱数に加工します。
整数同士の割り算は整数に切り捨てられるため、doubleにキャストします。

#include <stdio.h>

unsigned rndnum=1;/*乱数の初期値*/
unsigned irnd(void);
unsigned drnd(void); /*実数版*/


void main(void)
{
int j;

for (j=0;j<10000;j++) {
printf("%8.6f \n",drnd());
}
}

unsigned irnd(void)
{
rndnum=(rndnum*48828125+0) % 2147483648;
Return rndnum;
}
double drnd(void)
{
return (double(irnd()) / 2147483648.0 ;
}


それから、CPadって、これですよね?
http://hp.vector.co.jp/authors/VA017148/pages/cp …
CPad自体は言語ではなく、開発環境です。
今後は使用している言語に合せたカテゴリーを使うことをお勧めします。
    • good
    • 0
この回答へのお礼

何回もすみません。
このプログラムでは
α=1-√(3)
β=1+√(3)
をどこにしようしたらよいのでしょうか?

お礼日時:2010/07/13 21:43

β≧αとする


平均から
(β+α)/2=1
β=2-α
分散から
(β-α)^2/12=1^2
(2-α-α)^2=12
4(α-1)^2=12
(α-1)^2=3
(α-1)=±√(3)
α=1±√(3) ..(1)

β=2-(1±√(3))
β=1?√(3) ...(2)

β≧αより
α=1-√(3)
β=1+√(3)
    • good
    • 0
この回答へのお礼

あいがとうございます。
もうひとつ疑問が浮かんだのですが

以下のプログラムだと範囲が(0<x>1)となりますよね。

これはどのようにして改善すればよろしいのでしょうか?


#include <stdio.h>

unsigned rndnum=1;/*乱数の初期値*/
unsigned irnd(void);

void main(void)
{
int j;

for (j=0;j<10000;j++) {
printf("%8d \n",irnd());
}
}

unsigned irnd(void)
{
rndnum=(rndnum*48828125+0) % 2147483648;
return rndnum;
}

お礼日時:2010/07/13 16:01

わからないのはどこですか?


・一様乱数の発生方法
・正規乱数の発生方法
・ヒストグラムの作り方

一様分布の平均、分散の公式に条件(平均1、分散1)をあてはめれば、発生させる一様乱数の範囲が求まります。

[0,1)の一様乱数からN(0,1)の正規乱数を作る式があります。

それぞれの方法で規定回数乱数を発生させ、その区間毎の個数を数えるとヒストグラムになります
    • good
    • 0
この回答へのお礼

返答ありがとうございます。

一様分布の平均、分散の公式に条件(平均1、分散1)をあてはめれるとαもβも2つずつでてきてどちらを採用すればよいかわからないんですよ。

お礼日時:2010/07/10 00:54

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