가우시안 분포로 의사 난수를 생성하기 위해 Box-Muller transform을 구현하려고합니다. 분명히이 방법은 시그마 1과 평균 0의 수만 생성합니다. 임의의 시그마와 평균을 가진 수를 생성하는 데 어떻게 사용합니까?Box-Muller 변환을 사용하여 임의의 시그마와 평균으로 의사 난수를 생성합니다.
답변
Box-Muller는 단위 분산으로 분포를 생성하므로 질문에 대한 간단한 대답은 다음과 같습니다. Box-Muller를 사용하여 임의의 시그마가있는 숫자를 생성하지 마십시오.
그러나 더 긴 답변은 더 밝습니다. Here is a paper은 임의의 분산을 지원하는 수정 된 Box-Muller 알고리즘을 사용합니다. 매우 간단합니다.
의미는 간단합니다. 결과에 평균을 더하십시오.
리 다니엘 크로커 (Le Daniel Crocker)가 의견에서 언급 한 내용까지 끓었습니다. 시그마를 곱하고 평균을 더하십시오.
고마워, 제이슨. 나는 당신을 업 그레 이드 하겠지만 충분한 점수가 없습니다. 변환의 변형 된 양식을 구현하는 온라인 코드를 발견했습니다. :) – user2561523
별도의 방법이 필요하지 않습니다. 통계의 결과는 표준 표준 (가우스) 값 Z와 평균 mu 및 표준 편차 σ가있는 일반적인 가우스 X를 간단한 변환 X = sigma*Z + mu
또는 그 반대로 Z = (x - mu)/sigma
으로 변환 할 수 있다는 것을 잘 알고 있습니다. 이것이 통계 책이 왜 가우스 분포에 대한 하나의 표만 필요로하거나 제공하는지에 대한 이유입니다.
정확히 어떤 것이 링크 된 기사에 설명되어 있습니다. Box-Muller는 그 자체로 단위 분산을 가진 분포를 생성합니다. 다른 배포판으로 변환하는 것은 매우 간단하지만 더 이상 Box-Muller가 아니며, 사소한 경우에도 별도의 방법입니다. –
@ JasonC : 다른 배포본으로 변환하지 않습니다. 정규 분포의 다른 매개 변수화로 변환하고 있습니다. 표준 법선을 임의의 법선으로 변환하는 방법을 아는 것은 밑에있는 법선이 Box-Muller, polar, ziggurat 또는 기타 생성기에서 왔는지 여부를 초월합니다. – pjs
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의 갭을 주면 충분합니다.]
- 1. 임의의 사각형을 선택하고 난수를 생성합니다.
- 2. 지정된 평균으로 난수를 생성하는 방법
- 3. 주어진 평균으로 이항 분포에 대해 int를 생성합니다.
- 4. 어셈블리의 범위에서 난수를 생성합니다.
- 5. 하스켈은 임의의 숫자가 이전의 것과 다를 때마다 난수를 생성합니다.
- 6. 시나리오에서 sipp가 임의의 문자열을 생성합니다.
- 7. javascript는 두 자리수의 양수 난수를 생성합니다.
- 8. 이중 산술은 매번 C에서 난수를 생성합니다.
- 9. 배열에 임의의 정수 요소를 생성합니다.
- 10. Java는 Possion/Gaussian/Exponential/Geometric/Uniform 분포를 사용하여 난수를 생성합니다.
- 11. 안드로이드에서 매 30 초마다 자동으로 난수를 생성합니다.
- 12. 난수를 임의의 라벨로 설정하는 방법
- 13. Groovy AST 변환을 사용하여 임의의 리터럴을 처리하십시오.
- 14. 의사 임의의 문자열
- 15. 임의의 포인트 파이썬 포인트 주위에 임의의 클러스터를 생성합니다
- 16. RTC가없는 머신은 어떻게 의사 난수를 생성합니까?
- 17. 스프라이트에 임의의 Y를 생성합니다.
- 18. CURAND가 동일한 시드로 다른 난수를 생성합니다.
- 19. PHP는 임의의 암호를 생성합니다
- 20. 게임용 타이머는 카운트 다운 대신에 난수를 생성합니다.
- 21. SetTimer가 임의의 IDEvent을 생성합니다.
- 22. 임의의 열거 형을 생성합니다.
- 23. 숫자와 문자열을 결합하여 임의의 출력을 생성합니다.
- 24. 8 비트 (의사) 난수를 생성하여 특정 알려진 숫자를 제외하려면 어떻게합니까?
- 25. 난수를 사용하여 리소스 할당 최적화
- 26. Mongoid store_in이 임의의 결과를 생성합니다.
- 27. mySQL 쿼리가 복잡하고 잘못된 임의의 숫자를 생성합니다.
- 28. 작업 라이브러리가 임의의 결과를 생성합니다.
- 29. perl 스크립트가 임의의 이메일을 생성합니다
- 30. Java에서 임의의 아랍어 문자열을 생성합니다.
시그마를 곱하면됩니다. 뮤 추가. –
C 또는 어셈블리에서'fsincos' 또는'expi'를 호출 할 수 없다면 [log-polar method] (https://en.wikipedia.org/wiki/Marsaglia_polar_method)를 살펴볼 수도 있습니다. – horchler
@horchler : 더 기본적인 개념은 여러분이 사용하는 메커니즘이 표준 법선에 가깝더라도 일반 법선으로 바꿀 수있는 간단한 변형이라고 생각합니다. – pjs