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

 
Saturday, April 21, 2007

PHP, 정규분포 난수 생성, 가우스 분포 랜덤 발생 함수; Normal Distribution


일반적인 난수 발생 함수는, 모든 난수들이 같은 확률로 나오는 단일분포(Uniform Distribution)의 난수를 출력합니다.

그런데 만약, 중간값이 가장 많이 나오고, 극단적인 값으로 갈수록 적게 나오는, 종 모양의 커브를 가진 정규분포(Normal Distribution) 즉, 가우스 분포(Gaussian Distribution)의 랜덤한 난수를 생성하려면 다음 예제의 gaussianRandom() 이라는 함수를 사용하면 됩니다.

가우시안 랜덤 생성 함수 예제


소스 파일명: example.php
<html>
<head>
<title>PHP Example</title>
</head>

<body>

<?php

  // 정규분포 난수 30개 출력
  for ($i = 0; $i < 30; $i++) {
    echo gaussianRandom(), "<br />\n";
  }



// 정규분포의 난수 1개 생성하여 반환하는 함수
// 평균 = 0, 표준편차 = 1
function gaussianRandom() {
  do {
    $v1 = 2 * (mt_rand() / mt_getrandmax()) - 1; // -1.0 ~ 1.0 까지의 값
    $v2 = 2 * (mt_rand() / mt_getrandmax()) - 1; // -1.0 ~ 1.0 까지의 값
    $s = $v1 * $v1 + $v2 * $v2;
  } while ($s >= 1 || $s == 0);

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

  return $v1 * $s;
}
?>

</body>
</html>



실행 결과 화면:
D:\Z>php example.php
<html>
<head>
<title>PHP Example</title>
</head>

<body>

-2.0845950757016<br />
-0.35979500237827<br />
0.22218742820725<br />
1.0644497497177<br />
-2.0797003781112<br />
0.62844815275418<br />
-0.087172913620228<br />
0.6749800116894<br />
-0.2902088394042<br />
-0.57489043468833<br />
1.1934244904599<br />
0.35665574667421<br />
-0.050937176200436<br />
0.91071381643465<br />
0.39313853425754<br />
-0.29876583048131<br />
-1.9499570862601<br />
-0.26122493615939<br />
-0.32481931374634<br />
-0.25033262336947<br />
-2.3331444476871<br />
-1.2430127522752<br />
0.019581623954708<br />
1.3716530253342<br />
1.1714325229861<br />
0.20364060217821<br />
-0.37612762289786<br />
1.2359605343293<br />
1.6116787156969<br />
-0.69716116108472<br />

</body>
</html>
D:\Z>
D:\Z>php example.php > out.html
D:\Z>



php example.php > out.html
이렇게 하면, 실행 결과가 out.html 이라는 파일로 저장됩니다.



일반적인 단일분포의 실수 난수 발생: ▶▶ PHP 프로그래밍] 실수 랜덤 난수 생성 0에서 1까지 출력, Float Random Rand

다른 언어로, 정규 분포 난수 구하기: ▶▶ 가우시안/가우스 랜덤/정규 분포 난수 구하기 함수 예제; C-자바-Perl-VBA; Gauss Random

정규분포 난수, 가우시안 랜덤 넘버 생성기: ▶▶ 정규분포 난수, 가우시안 랜덤 발생기; Normal Distribution Rand Generator

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

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