2013-08-04 4 views
3

가우시안 분포로 의사 난수를 생성하기 위해 Box-Muller transform을 구현하려고합니다. 분명히이 방법은 시그마 1과 평균 0의 수만 생성합니다. 임의의 시그마와 평균을 가진 수를 생성하는 데 어떻게 사용합니까?Box-Muller 변환을 사용하여 임의의 시그마와 평균으로 의사 난수를 생성합니다.

+3

시그마를 곱하면됩니다. 뮤 추가. –

+0

C 또는 어셈블리에서'fsincos' 또는'expi'를 호출 할 수 없다면 [log-polar method] (https://en.wikipedia.org/wiki/Marsaglia_polar_method)를 살펴볼 수도 있습니다. – horchler

+0

@horchler : 더 기본적인 개념은 여러분이 사용하는 메커니즘이 표준 법선에 가깝더라도 일반 법선으로 바꿀 수있는 간단한 변형이라고 생각합니다. – pjs

답변

2

Box-Muller는 단위 분산으로 분포를 생성하므로 질문에 대한 간단한 대답은 다음과 같습니다. Box-Muller를 사용하여 임의의 시그마가있는 숫자를 생성하지 마십시오.

그러나 더 긴 답변은 더 밝습니다. Here is a paper은 임의의 분산을 지원하는 수정 된 Box-Muller 알고리즘을 사용합니다. 매우 간단합니다.

의미는 간단합니다. 결과에 평균을 더하십시오.

리 다니엘 크로커 (Le Daniel Crocker)가 의견에서 언급 한 내용까지 끓었습니다. 시그마를 곱하고 평균을 더하십시오.

+1

고마워, 제이슨. 나는 당신을 업 그레 이드 하겠지만 충분한 점수가 없습니다. 변환의 변형 된 양식을 구현하는 온라인 코드를 발견했습니다. :) – user2561523

9

별도의 방법이 필요하지 않습니다. 통계의 결과는 표준 표준 (가우스) 값 Z와 평균 mu 및 표준 편차 σ가있는 일반적인 가우스 X를 간단한 변환 X = sigma*Z + mu 또는 그 반대로 Z = (x - mu)/sigma으로 변환 할 수 있다는 것을 잘 알고 있습니다. 이것이 통계 책이 왜 가우스 분포에 대한 하나의 표만 필요로하거나 제공하는지에 대한 이유입니다.

+0

정확히 어떤 것이 링크 된 기사에 설명되어 있습니다. Box-Muller는 그 자체로 단위 분산을 가진 분포를 생성합니다. 다른 배포판으로 변환하는 것은 매우 간단하지만 더 이상 Box-Muller가 아니며, 사소한 경우에도 별도의 방법입니다. –

+0

@ JasonC : 다른 배포본으로 변환하지 않습니다. 정규 분포의 다른 매개 변수화로 변환하고 있습니다. 표준 법선을 임의의 법선으로 변환하는 방법을 아는 것은 밑에있는 법선이 Box-Muller, polar, ziggurat 또는 기타 생성기에서 왔는지 여부를 초월합니다. – pjs

1
public function genererNombreLoiNormale($mu, $sigma) { 

    // On récupère deux nombres pseudo-aléatoires indépendants selon une loi uniforme sur l'intervalle [0;1] 
    $randNumUni = rand(0,999)/1000; 
    $randNumBi = rand(0,999)/1000; 

    // On récupère un nombre pseudo-aléatoire selon une loi normale centrée réduite 
    // (Paramètres : moyenne = 0, écart-type = 1) 
    // Utilisation de l'algorithme de Box-Muller 
    $randNumNorm = sqrt(-2.0*log($randNumUni))*cos((2.0 * 3.141592653589793238462643383279502884197169399375)*$randNumBi); 

    return ($mu + $sigma * $randNumNorm); 
} 

// 위원장 suffit 드 centrer 라 기능 쉬르 단한 valeur의 $ 뮤 동부 표준시 드 루이 도너 않은 écart의 $ 시그마 부어 s'approcher 플러스 OU moins 뒤 센터 드 라 기능 공들인

[가능한 영어 번역 : $ mu 값에 함수를 집중시키고 크기 $ sigma의 갭을 주면 충분합니다.]

+0

영어로 의견을 게시 할 수 있습니까? – Robert

+1

당신이 영어로 번역 하는게 좋을거야. – laaposto

관련 문제