가우스 분포에 의해 퍼진 24 시간 동안 어떻게 점을 설정할 수 있습니까? 예를 들어 10시에 피크를 가지려면?24 시간 PHP로 가우시안 분포
3
A
답변
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
2
이있는 경우 문제가 발생 가우스 분산 임의의 지점은 그렇지
질문을 명확히하십시오 http://en.wikipedia.org/wiki/Box-Muller_transform를 찾아보십시오.
@Roel : 표준 편차는 중요하지 않습니다. PHP 로직 만 필요합니다. 우리는 8과 같은 것을 사용할 수 있습니다. – powtac
죄송합니다. 질문에 대한 오해와 제 대답 (처음에는 대답이 아니 었습니다)을 삭제했습니다. 소음에 사과드립니다. – Roel
필자는 PHP 함수의 형태로 필요한 것을 설명 할 것을 제안합니다 - 어떤 입력을 사용할 수 있고 무엇이 성공적인 출력을 특징 지을 것입니까? –