アルゴリズム/正規乱数の生成
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
''[[FrontPage]]''
* 正規乱数(ガウス乱数)を生成する [#zfb5bbce]
正規乱数とは、生成結果が正規分布に従うような乱数である。(...
その生成の方法は数種類あるが、今回はボックス-ミューラー法...
ボックス-ミューラー法の最大の特長は、オーバーヘッドの大き...
従って、12個の一様乱数の平均値をもって近似させる方法に比...
~
** C++言語による正規乱数の生成 [#z166f32b]
gaussianRand.cpp
#include <stdio.h> ...
#include <stdlib.h> ...
#include <math.h> ...
#include <time.h> ...
...
const double PI = 3.14159265358979; ...
...
double gaussianRand( double vd_stdev, double vd_meanValu...
...
/* Rand Test *******************************************...
int main( void ) ...
{ ...
clock_t start, end; ...
unsigned int cnt; ...
double randNum = 0.0; ...
...
start = clock(); ...
srand( (unsigned int)time( NULL ) ); ...
...
for( ; ; ) ...
{ ...
for( cnt = 0; cnt < 10; cnt++ ) ...
{ ...
randNum = gaussianRand( 1.0, 0.0 ); ...
printf( "%02d: %f\n", cnt, randNum ); ...
} ...
...
end = clock(); ...
printf( "%d msかかりました\n", end-start ); ...
...
break; ...
} ...
...
return( 0 ); ...
} ...
//*Rand Test *******************************************...
/* Gaussian Rand ***************************************...
double gaussianRand( double vd_stdev, ...
double vd_meanValue ) ...
{ ...
double rtnNum = 0.0; ...
static int sw = 0; ...
...
double randNum_1; ...
double randNum_2; ...
double whiteGaussianNoise_1; ...
static double whiteGaussianNoise_2; ...
...
if( sw == 0 ) ...
{ ...
sw = 1; ...
randNum_1 = ((double)rand()) / RAND_MAX; ...
randNum_2 = ((double)rand()) / RAND_MAX; ...
...
whiteGaussianNoise_1 = vd_stdev * sqrt( -2.0 * l...
cos( 2.0 * PI * randN...
whiteGaussianNoise_2 = vd_stdev * sqrt( -2.0 * l...
sin( 2.0 * PI * randN...
...
rtnNum = whiteGaussianNoise_1; ...
} ...
else ...
{ ...
sw = 0; ...
...
rtnNum = whiteGaussianNoise_2; ...
} ...
...
return( rtnNum ); ...
} ...
//*Gaussian Rand ***************************************...
** 表示結果: [#h490a3d2]
>gaussianRand.exe
00: 0.977696
01: 1.646302
02: 2.349632
03: 0.509217
04: 1.080539
05: -0.208485
06: -1.016973
07: -0.839387
08: 0.177065
09: 0.619993
8 msかかりました
*** 修正履歴 [#ac7bb6e6]
~
*** 課題 [#b4d4b5b3]
-備考~
~
これ、1個目と2個目の平均と標準偏差が違う場合に問題がある。
標準正規乱数でとっておいて2を出力する際に平均を足して標準...
*** 参考ページ [#k250ca50]
[[Wikipedia:http://www.google.co.jp/url?q=http://ja.wikip...
終了行:
''[[FrontPage]]''
* 正規乱数(ガウス乱数)を生成する [#zfb5bbce]
正規乱数とは、生成結果が正規分布に従うような乱数である。(...
その生成の方法は数種類あるが、今回はボックス-ミューラー法...
ボックス-ミューラー法の最大の特長は、オーバーヘッドの大き...
従って、12個の一様乱数の平均値をもって近似させる方法に比...
~
** C++言語による正規乱数の生成 [#z166f32b]
gaussianRand.cpp
#include <stdio.h> ...
#include <stdlib.h> ...
#include <math.h> ...
#include <time.h> ...
...
const double PI = 3.14159265358979; ...
...
double gaussianRand( double vd_stdev, double vd_meanValu...
...
/* Rand Test *******************************************...
int main( void ) ...
{ ...
clock_t start, end; ...
unsigned int cnt; ...
double randNum = 0.0; ...
...
start = clock(); ...
srand( (unsigned int)time( NULL ) ); ...
...
for( ; ; ) ...
{ ...
for( cnt = 0; cnt < 10; cnt++ ) ...
{ ...
randNum = gaussianRand( 1.0, 0.0 ); ...
printf( "%02d: %f\n", cnt, randNum ); ...
} ...
...
end = clock(); ...
printf( "%d msかかりました\n", end-start ); ...
...
break; ...
} ...
...
return( 0 ); ...
} ...
//*Rand Test *******************************************...
/* Gaussian Rand ***************************************...
double gaussianRand( double vd_stdev, ...
double vd_meanValue ) ...
{ ...
double rtnNum = 0.0; ...
static int sw = 0; ...
...
double randNum_1; ...
double randNum_2; ...
double whiteGaussianNoise_1; ...
static double whiteGaussianNoise_2; ...
...
if( sw == 0 ) ...
{ ...
sw = 1; ...
randNum_1 = ((double)rand()) / RAND_MAX; ...
randNum_2 = ((double)rand()) / RAND_MAX; ...
...
whiteGaussianNoise_1 = vd_stdev * sqrt( -2.0 * l...
cos( 2.0 * PI * randN...
whiteGaussianNoise_2 = vd_stdev * sqrt( -2.0 * l...
sin( 2.0 * PI * randN...
...
rtnNum = whiteGaussianNoise_1; ...
} ...
else ...
{ ...
sw = 0; ...
...
rtnNum = whiteGaussianNoise_2; ...
} ...
...
return( rtnNum ); ...
} ...
//*Gaussian Rand ***************************************...
** 表示結果: [#h490a3d2]
>gaussianRand.exe
00: 0.977696
01: 1.646302
02: 2.349632
03: 0.509217
04: 1.080539
05: -0.208485
06: -1.016973
07: -0.839387
08: 0.177065
09: 0.619993
8 msかかりました
*** 修正履歴 [#ac7bb6e6]
~
*** 課題 [#b4d4b5b3]
-備考~
~
これ、1個目と2個目の平均と標準偏差が違う場合に問題がある。
標準正規乱数でとっておいて2を出力する際に平均を足して標準...
*** 参考ページ [#k250ca50]
[[Wikipedia:http://www.google.co.jp/url?q=http://ja.wikip...
ページ名: