2008-09-30 4 views
3

가우스 분포에 의해 퍼진 24 시간 동안 어떻게 점을 설정할 수 있습니까? 예를 들어 10시에 피크를 가지려면?24 시간 PHP로 가우시안 분포

+0

@Roel : 표준 편차는 중요하지 않습니다. PHP 로직 만 필요합니다. 우리는 8과 같은 것을 사용할 수 있습니다. – powtac

+0

죄송합니다. 질문에 대한 오해와 제 대답 (처음에는 대답이 아니 었습니다)을 삭제했습니다. 소음에 사과드립니다. – Roel

+0

필자는 PHP 함수의 형태로 필요한 것을 설명 할 것을 제안합니다 - 어떤 입력을 사용할 수 있고 무엇이 성공적인 출력을 특징 지을 것입니까? –

답변

8

다음 코드는 주어진 시간에 중심을두고 주어진 표준 편차로 가우스 분산 된 임의 시간 (시간 단위 및 한 시간 단위)을 생성합니다. 무작위 시간은 시계를 감싸고, 특히 표준 편차가 몇 시간이면 정확하게 처리 할 수 ​​있습니다. 표준 편차가 매우 큰 경우 (수일) 다른 '랩핑'알고리즘이 더 효과적 일 수 있지만 어쨌든이 경우 분포가 거의 균일합니다.

$peak=10; // Peak at 10-o-clock 
$stdev=2; // Standard deviation of two hours 
$hoursOnClock=24; // 24-hour clock 

do // Generate gaussian variable using Box-Muller 
{ 
    $u=2.0*mt_rand()/mt_getrandmax()-1.0; 
    $v=2.0*mt_rand()/mt_getrandmax()-1.0; 
    $s = $u*$u+$v*$v; 
} while ($s > 1); 
$gauss=$u*sqrt(-2.0*log($s)/$s); 

$gauss = $gauss*$stdev + $peak; // Transform to correct peak and standard deviation 

while ($gauss < 0) $gauss+=$hoursOnClock; // Wrap around hours to keep the random time 
$result = fmod($gauss,$hoursOnClock);  // on the clock 

echo $result; 
+1

나는이 형태의 알고리즘이 "Marsaglia polar method"라고 생각한다. – lapo