三角分布に従う乱数を発生させるプログラム
最頻値gで、0.8g~2.5gの範囲の三角分布(当然面積は1です)に従う乱数を発生させるプログラムを
書きたいと思っています。
この三角分布の確率密度関数をP(x)とすると、三角分布であるので最頻値gの左側である、傾きが正の直線h(x)と
最頻値gの右側である、傾きが負の直線f(x)で表せますよね
分布に従う乱数を発生させるためには、これら直線の関数を積分したものの逆関数x=P^-1(u) (Pのインバースです)
(uは区間[0, 1]の一様乱数)とすればいいというところまでわかったんですが、
とりあえずh(x)とf(x)をそれぞれ積分して逆関数H^-1(u)、F^-1(u)を求めたところまではいいんですが
x=H^-1(u)+F^-1(u)としてプログラムを実行すると、最頻値gの2倍あたりの値(例えば20に対して39など)
しか出ず、最頻値gより小さい値が出ません。
H^-1(u)+F^-1(u)としているのがダメだと思うのですが、逆関数が2つある場合、ここからどうすればいいですか?
また、初歩的な質問なのですが、区間[0, 1]の一様乱数というのはどう記述すればよいですか?
ぜひ多くの方の回答お待ちしています。
よろしくお願いします。
(最頻値gは入力で与えるものとします)
No.2ベストアンサー
- 回答日時:
最頻値がgで[a, b]の範囲で三角分布に従う乱数を発生させたいとします。
まず、確率密度関数を求めると、
(-∞, 0] : 0
(a, g] : 2(x-a)/{(g-a)(b-a)}
(g, b] : 2(x-b)/{(g-b)(b-a)}
(b, ∞) : 0
分布関数は確率密度関数を積分して、
(-∞, 0] : 0
(a, g] : (x-a)^2/{(g-a)(b-a)}
(g, b] : (g-a)/(b-a)+(x^2-2bx-g^2+2bg)/{(g-b)(b-a)}
(b, ∞) : 1
分布関数の逆関数を求めると、
(-∞, 0] : a
(0, (g-a)/(b-a)] : a+sqrt((g-a)(b-a)x)
((g-a)/(b-a), 1] : b-sqrt((b-g)^2-(b-g)(b-a)(x-(g-a)/(b-a)))
(1, ∞) : b
となりますので、xは0以上1以下の値が入っているとすれば、
if (x <= (g-a)/(b-a)) return a+sqrt((g-a)(b-a)x);
else return b-sqrt((b-g)^2-(b-g)(b-a)(x-(g-a)/(b-a)));
とでも書けばいいでしょう。
(実際に書く場合は、もう少し計算量が少なくなるように書くとは思いますが)
計算があっているかどうかは確認しておいてください。
分かりやすい回答をどうもありがとうございました。
おかげでちゃんと実行することができました。
私のはそもそも積分が間違っていたようです。
詳しい解説、本当にありがとうございました。
No.3
- 回答日時:
ANo.2
思いっきり間違いました。
こちらが正しいです。
if (x <= (g-a)/(b-a)) return a+sqrt((g-a)*(b-a)*x);
else return b-sqrt((b-g)*(b-g)-(b-g)*(b-a)*(x-(g-a)/(b-a)));
No.1
- 回答日時:
言語は何を使われているのかわかりませんが、if文等で条件分岐をするのは駄目なのでしょうか?
> また、初歩的な質問なのですが、区間[0, 1]の一様乱数というのはどう記述すればよいですか?
rand関数というような関数がありませんか?
名前は違うかもしれませんが、必ず乱数を発生させる関数があるはずです。
ひょっとして、0からnまでの整数の乱数は得られるけど、[0, 1]の一様乱数をどうやって得るのかわからないということでしょうか?
(C言語なら(double)rand() / RAND_MAXとでもすればいいですが)
回答ありがとうございます。
言語はC++です。乱数わかりました。
if文等で条件分岐をするというのは
どういう条件のときにどういう動作をすればよいのかが難しいです・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 確率について ①Xが実数値をとる確率変数で、f(x)=0(x<=-1),1/4x+1/4 (-1<= 2 2022/06/20 18:44
- 統計学 確率統計の問題です。 3 2022/04/07 04:39
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- 統計学 Excelによるサンプルの拡大について 6 2023/08/22 16:03
- 物理学 大学物理に詳しい方に質問です。 ラザフォードたちが実験で知りたかったことは衝突パラメータbと原子核の 1 2023/03/16 03:39
- 数学 至急!次の問題を教えてください。 ある市では、消防車の出動要請が平均して1時間当たり1回ある。 多く 2 2022/11/18 20:25
- 統計学 確率の問題です。 7 2022/05/07 01:08
- 大学・短大 累積分布関数F(x)の計算の仕方を教えてください。 3 2022/06/12 07:39
- 数学 以下の数学の問題を教えてください。 確率変数Xは標準正規分布N(0、1)に確率変数Yは平均3のポアソ 3 2022/12/02 19:13
- 統計学 統計検定2級の過去問について 1 2023/01/04 16:40
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
EXCELの分散分析表のP-値が....
-
数学 確率変数Xは、X=2またはX...
-
n^2-20n+91が素数とな...
-
ある商品のロス率を5%見込み、...
-
マイナスからプラスへ転じた時...
-
Aの値からBの値を除するとは??
-
lim{x→0} cos(1/x)...
-
行列です
-
Excelで1つしかない値だけを抽...
-
大きな負の値?負の大きな値???
-
楕円の外周の計算方法
-
パーセントの出し方を教えて下さい
-
パーセント点はP1 P5 P10 P25 P...
-
ある値に対して3番目に大きな値...
-
一次関数についてです。 y=5な...
-
定数と変数の違いがわかりません
-
第三離心率、第三扁平率の幾何...
-
「n進法から10進法への変換」
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マイナスからプラスへ転じた時...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
エクセルで可視セルにのみ値貼...
-
変数とパラメータとは違うもの...
-
ある商品のロス率を5%見込み、...
-
値差の%計算方法について
-
エックスの値は5cmですか?
-
a^2の√=a が成り立たない場合
-
Excelで1つしかない値だけを抽...
-
20'(角度)の計算がわかりま...
-
「an=(n-1)/(n+1)のときlim[n→∞...
-
EXCELの分散分析表のP-値が....
-
「Aに対するBの割合」と「Aに対...
-
10%引いた元の数字を出すには?
-
パーセントの出し方を教えて下さい
-
楕円の外周の計算方法
-
中学生で数学です。 √84nが自然...
-
教えてください。数学Bの二項分...
おすすめ情報