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

 
Previous Post Excel/엑셀] 가우스 난수/가우시안 랜덤 발생 함수; Gaussian Random VB...CMD 란? CMD.EXE 실행하는 법; WINDOWS XP가야금 연주 MIDI 파일 만들기 (미디; mid) お琴 - Koto, OkotoJava/자바] 한글 euc-kr (MS949) 파일을, 유니코드(UTF-8)로 변환 프로...Java/자바] 한글 확장 완성형; MS949 / cp949 인코딩(Encoding) 문제...Java/자바] 일본어 Shift-JIS 파일을, 유니코드(UTF-8)로 변환 프로그램일본어 Shift-JIS / EUC-JP 텍스트 파일 예제; Japanese Text Fi...도스용 V3.EXE 실행 배치파일; 도스창에서 백신III 실행 DOS BATeuc-kr(한글 완성형)문서 파일을, UTF-8 유니코드로 변환 방법; ANSI to U...Java/자바] 숫자(정수;int) 배열, 순서 거꾸로 뒤집기/역전시키기; Reverse ...

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

Sunday, November 26, 2006

가우스 분포 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에 가까운 숫자일수록 많이 나오고, 양극단의 숫자에 가까울수록 적게 나옵니다.


☞ Perl(펄)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

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