반경 R 의 원 안에 임의의 점을 생성하는 방법 :
r = R * sqrt(random())
theta = random() * 2 * PI
( random()
0과 1 사이의 값을 균일하게 부여 한다고 가정 )
이것을 직교 좌표로 변환하려면 할 수 있습니다
x = centerX + r * cos(theta)
y = centerY + r * sin(theta)
왜 sqrt(random())
?
이어지는 수학을 보자 sqrt(random())
. 우리가 단위 원으로 작업하고 있다는 것을 간단하게 가정하십시오 (예 : R = 1).
점 사이의 평균 거리는 중심에서 얼마나 떨어져 있는지에 관계없이 동일해야합니다. 예를 들어 원주 2의 원 둘레를 보면 원주 1의 원 둘레 점 수의 두 배를 발견해야합니다.
원의 둘레 (2π r )가 r 과 함께 선형으로 성장 하기 때문에 임의의 점 수가 r 와 함께 선형으로 증가해야합니다 . 즉, 원하는 확률 밀도 함수 (PDF)가 선형으로 증가합니다. PDF의 면적이 1이고 최대 반지름이 1이므로
따라서 임의의 값의 원하는 밀도가 어떻게 보이는지 알고 있습니다. 지금: 우리가 가진 모든 것이 0과 1 사이의 균일 한 임의의 값일 때 어떻게 이러한 임의의 값을 생성합니까?
우리는라는 속임수를 사용합니다 역변환 샘플링
- PDF에서 누적 분포 함수 (CDF)를
- y = x를 따라 이것을 미러링
- 결과 함수를 0과 1 사이의 균일 한 값에 적용하십시오.
복잡한 소리? 직관을 전달하는 작은 트랙이있는 인용구를 삽입하겠습니다.
다음 분포를 사용하여 임의의 점을 생성한다고 가정합니다.
그건
- 1과 2 사이의 점의 1/5
- 점의 4/5는 2에서 3 사이에서 균일합니다.
CDF는 이름에서 알 수 있듯이 PDF의 누적 버전입니다. 직관적으로 : PDF ( x )는 x 의 난수 값 을 설명 하지만 CDF ( x )는 x보다 작은 난수 값을 설명합니다 .
이 경우 CDF는 다음과 같습니다.
이것이 어떻게 유용한 지 보려면, 균일하게 분포 된 높이에서 총알을 왼쪽에서 오른쪽으로 쏘는다고 상상해보십시오. 총알이 선에 부딪히면 땅에 떨어집니다.
지상의 총알 밀도가 원하는 분포와 어떻게 일치하는지 확인하십시오! 거의 다 왔어!
문제는이 함수의 경우 y 축이 출력 이고 x 축이 입력이라는 것입니다 입니다. 우리는 "땅에서 총알을 똑바로 쏴"만 할 수 있습니다! 우리는 역함수가 필요합니다!
이것이 우리가 모든 것을 반영하는 이유입니다. x 는 y가 되고 y 는 x 가됩니다 :
이 CDF -1 이라고합니다 . 원하는 분포에 따라 값을 얻기 위해 CDF -1 (random ())을 사용합니다.
… 따라서 PDF가 2 x 인 임의의 반경 값 생성으로 돌아갑니다. .
1 단계 : CDF를 작성하십시오.
실수로 작업하기 때문에 CDF는 PDF의 필수 요소로 표시됩니다.
CDF ( x ) = ∫ 2 x = x 2
2 단계 : y = x를 따라 CDF를 미러링합니다 .
수학적으로이 교환으로 귀결 X 와 Y를 하고 대한 해결 Y :
CDF : y = x 2
스왑 : x = y 2
풀기 : y = √ x
CDF -1 : y = √ x
3 단계 : 결과 함수를 0과 1 사이의 균일 한 값에 적용
CDF -1 (random ()) = √random ()
우리가 도출 한 것은 다음과 같습니다. :-)