• ベストアンサー

乱数の評価方法について質問です.

乱数の評価方法について質問です. C言語にて一様乱数,正規乱数を100個作ってそのデータがどの程度一様分布,正規分布に従うか評価したいのですがどのような方法がありますか? ヒストグラムは作ってみました. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.1

一様乱数は組み込み関数、正規乱数は一様乱数をボックス-ミューラー法で変換して作っているのでしょうか。ボックス-ミューラー法に用いた平均値m、標準偏差sを用いるとこうして作った正規乱数はの確率密度関数f(x)は f(x)=(1/√2π)exp(-(x-m)^2/2s^2)   (1) となります。 m±5s位の範囲を数百の幅(層)に区切り、各層に入ってくる乱数の数、つまり度数分布を表示するプログラムを作って、まわしてみると、数万個~百万個位の乱数に関する頻度分布を表示すると(1)に完全に一致してくることが解ります。つまりシミュレーションです。これで十分なのかは議論のあるところかもしれませんが、理論曲線(1)とこのシミュレーションが一致することが確認できると大変満足します。 度数分布は乱数が一個入るたびにこれまでの度数分布点が消され新しい分布が表示するようにすると動きを感じます。

その他の回答 (1)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

分布に従うかどうかは分布検定の手法があったと思います。 基本的には、ヒストグラムの理論値との差の2乗和を取って判定します。理論値が1未満の部分は一まとめにするとか、値の判定はカイ二乗検定によるとかあったと思いますが、詳細は良く知りません。

関連するQ&A

  • EXCELで確率分布に従う乱数を発生させたい

    EXCELにて指数分布や正規分布、ポアソン分布などに従う 乱数を発生させたいのですがどうすればいいでしょうか? できれば、それらともとの分布関数とをヒストグラムで比較して意図した乱数が発生できているかを検討したいのですが・・・。

  • 正規分布に従う乱数

    C言語で平均,標準偏差を指定して正規分布に従う乱数を発生させるにはどうしたらよいのでしょうか?

  • 確率統計 プログラム

    (1) 正規乱数の発生–中心極限定理の利用  中心極限定理を利用して,区間[0, 1) の一様乱数から標準正規分布N(0, 1) に従う正 規乱数を100,000 個発生し,そのデータから得られる以下の各項目を報告しなさい. ここでは,一様乱数の生成は合同式法を用い,また,正規乱数の生成は中心極限定 理を利用して,いずれも自分で作成したC 言語プログラムで実現すること.(既存の RAND 関数などを用いない) 1. 100,000 個の正規乱数の平均値.なお,理論値は0 である. 2. 100,000 個の正規乱数の標準偏差.なお,理論値は1 である. 3. 100,000 個の正規乱数のヒストグラム(頻度分布).ただしここでのヒストグラ ムは,区間[−5, 5] を100 分割したものとする. 4. 100,000 個の正規乱数のヒストグラム.ただしここでのヒストグラムは,区間 [2.5, 5] を25 分割したものとする.これは,前項3 の右端部を取り出したもので ある. 5. 正規乱数を発生して上項1 ∼ 4 を求めるために作成した,プログラムのソース. (2) 正規乱数の発生–Box-Muller 法  ボックス・ミュラー法により,区間[0, 1) の一様乱数から標準正規分布N(0, 1) に従う 正規乱数を100,000 個発生し,そのデータから得られる以下の各項目を報告しなさい. ここでは,一様乱数の生成は合同式法を用い,また,正規乱数の生成はBox-Muller 法 を用いて,いずれも自分で作成したC言語プログラムで実現すること.(既存のRAND 関数などを用いない) 1. 正規乱数の平均値. 2. 正規乱数の標準偏差. 3. 正規乱数のヒストグラム.区間[−5, 5] を100 分割したものとする. 4. 正規乱数のヒストグラム.区間[2.5, 5] を25 分割したものとする. 5. プログラムのソース. (3) 両者の比較課題1, 2 で得られた結果を比較し,2 つの方法で得られた正規乱数の性質 に違いが見い出されれば,それを考察しなさい. 何ですけどお願いいたします 期限は2009/7/27

  • プログラムを教えてください!

    レポートの質問です。 以下の問題のプログラムを作らなければいけないのですが、いろいろと調べてみてもまったくわかりません。 わかる方プログラム教えてください! 課題1 合同式法を用いて,区間[0,1] (区間[0,1)でも良い) の 一様乱数を100 万個生成し,以下を報告せよ.ただし,一様乱数の生成にはC 言語で自作したプログラムを用いること. (1a) 平均の数値計算結果 (1b) 標準偏差の数値計算結果 (1c) 一様乱数のヒストグラム.ヒストグラムは区間[0,1] を100 分割して 作成すること. 課題2 中心極限定理に基づく「間便法」を用いて,区間[0,1] (区 間[0,1)でも良い) の一様乱数から標準正規分布N(0,1)に従う正規乱数を100 万 個生成し,以下を報告せよ.ただし,正規乱数の生成にはC言語で自作したプ ログラムを用いること. (2a) 平均の数値計算結果 (2b) 標準偏差の数値計算結果 (2c) 正規乱数のヒストグラム.ヒストグラムは区間[-5, 5] を100 分割して 作成すること.

  • Rにおいて、中心極限定理を確認するために、乱数の標本平均のヒストグラム

    Rにおいて、中心極限定理を確認するために、乱数の標本平均のヒストグラムと正規分布のグラフを重ね合わせたいのですが、軸ラベルがおかしくなってしまいます。例えば、1000個の標本平均のヒストグラム hist(x)と平均0,分散1の正規分布のグラフを上手く重ね合わせるにはどうしたらいいですか?

  • 乱数の評価方法

    放射線物質を用いた乱数生成機を開発しています。 そこで乱数の評価したいのですが、有料のソフトウェアを用いる以外に方法はないのでしょうか? また乱数として認められる基準値などあるのでしょうか? お答えできる方いましたらお願いいたします。

  • Mathematicaによる乱数生成について

    Mathematicaを用いて正規分布に係数をかけた物に従った乱数を生成したいのですが、ヘルプを調べても分からず困っています。 具体的に行いたいことは、 RandomReal[1/3*NormalDistribution[0,10], 100]          ~~~ のような事です。 正規分布の確率密度関数(平均0,分散10)に係数(ここでは1/3)をかけた分布に従う乱数を100個生成したいということです。 どなたか解決方法をご存知の方がいらっしゃいましたらよろしくお願いいたします。

  • 正規乱数に歪度を考慮したい

    あるソフトウェア上で正規分布に従う乱数を発生させる事は できています。そこから歪度を入れた分布で乱数を発生させたいと 考えています。そのソフトウェアではどうやら歪度を入れて 直接、乱数を発生させることはできなさそうなので 正規分布に従う乱数が一つずつ出てきたものを 何らかの数式で変換して 歪度を考慮したいと考えています。 この変換の方法はあるのでしょうか? どのような数式でできるのでしょうか?

  • 正規分布の乱数生成

    C言語で正規分布の乱数を発生させたいのですがどうすればいいのでしょうか? 自分なりにネットで検索して調べたのですが void gaussrand() { static double V1, V2, S; static int phase = 0; double X; if(phase == 0) { do { double U1 = (double)rand() / RAND_MAX; double U2 = (double)rand() / RAND_MAX; V1 = 2 * U1 - 1; V2 = 2 * U2 - 1; S = V1 * V1 + V2 * V2; } while(S >= 1 || S == 0); X = V1 * sqrt(-2 * log(S) / S); } else X = V2 * sqrt(-2 * log(S) / S); phase = 1 - phase; } こうありました。 例えば平均50の分散9の正規分布の乱数を1000個発生させて、配列seiki[1000]に代入したいときは、このプログラミングをどのようにすればいいのでしょうか? もちろん、このソースではなく、他のもので説明していただけても全然構いません。 また、もしよろしければ、正規分布の他に、二項分布など他の分布でのデータの生成方法もお教えいただけたら幸いです。 よろしくお願いいたします。

  • Excelの乱数について

    excelワークシート関数で乱数を求める方法について質問です。 乱数を求める際に、正規分布の形で特定の数値(例えば0以上1未満の乱数を求めるとき、0.4や0.7)が最も多く出るようにし、その値から離れた数値ほど出にくくなるといった具合に数値の頻度に偏りを持たせることができるでしょうか。 ExcelはExcel2000、OSはWindows2000を使用しています。 よろしくお願いします。