mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Sunday, November 26, 2006

Perl/펄] 가우스 난수/가우시안 랜덤 발생 함수; Gaussian Random


가우스 분포 Gaussian (Normal) Distribution 의 무작위 난수(Random Number)를 발생시키는 함수를 만드는 방법입니다.

펄의 rand() 함수는 모든 숫자가 같은 확률로 나옵니다. 그렇지만 가우시안 분포의 난수들은 종 모양 즉 Bell Curve 를 가집니다.

평균(Mean)은 0
표준편차(Standard Deviation)는 1 입니다.


정규 분포 랜덤 함수; (Gaussian Random; Gauss)


#!/usr/bin/perl
use strict; use warnings;

  my @a;


  # 가우시안 난수 만들어, 배열에 넣기
  for (my $i = 1; $i <= 50; $i++) {
    push @a, &gaussianRandom;
  }


  @a = sort {$a <=> $b} @a;    # 숫자 크기순 정렬
  print $_, "\n" foreach (@a); # 배열 출력




sub gaussianRandom {
  my ($v1, $v2, $s);

  do {
    $v1 = 2 * rand() - 1;        # -1.0 ~ 1.0 까지의 값
    $v2 = 2 * rand() - 1;        # -1.0 ~ 1.0 까지의 값
    $s = $v1 * $v1 + $v2 * $v2;
  } while ($s >= 1 || $s == 0);

  $s = sqrt( (-2 * log($s)) / $s );

  return $v1 * $s;
}


gaussianRandom 이라는 함수(Function)가 가우스 난수를 발생시키는 본체입니다.


그런데 실행 결과를 쉽게 알아보기 위해서, 가우스 난수들을 크기 순으로 정렬하여 출력하였습니다. (▶▶ 펄/Perl] 숫자 배열 정렬(소팅), sort 함수 사용법: Sort Number Array 참고)


실행 결과:
(50개의 가우스 난수들이 크기 순으로 소팅되어 출력됩니다.)
-2.02342968236564
-2.01633266126133
-1.92046262081684
-1.88268227559408
-1.87234425636353
-1.7084184140151
-1.55708670410055
-1.40806593452702
-1.26982308262832
-1.20558537064328
-0.893057665444112
-0.841678446608124
-0.714984722829145
-0.68434655170491
-0.656702010516672
-0.580209670489763
-0.514854717366368
-0.513271130187537
-0.464387581603892
-0.399022963285861
-0.376596539266183
-0.310459549805852
-0.298734652357049
-0.289914098153749
-0.280792272265552
-0.271282165909082
-0.170171518058607
-0.150130296235735
-0.0888330149672835
-0.050405436892452
0.029519296099437
0.046417155572673
0.0477392620510434
0.12803999889267
0.177885547411445
0.194191891902784
0.262040174664585
0.26274333338753
0.366901456855656
0.54684412251242
0.793745666489606
0.863831701049744
0.948502638378713
0.978857255850438
1.14056397919119
1.29123177711295
1.40297677395333
1.43824583889233
1.62502462197163
3.18618764130342


0에 가까운 숫자일수록 많이 나오고, 양극단의 숫자에 가까울수록 적게 나옵니다.




tag: perl
Perl | 펄

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top