2016-12-12 4 views
1
나는 다음과 같은 도전 온라인 자바 코스를 수강하고 주어진

:[-1, +1]

계산 단위 광장에 던지는 다트를 시뮬레이션하여 π의 추정치를 단위 원에있는 그들 중 일부분을 결정하는 것.

랜덤 x 좌표를 생성하는 방법에 대한 저의 아이디어는 범위 [0, 1]에서 두 개의 균일 한 난수를 선택한 다음이를 뺍니다. 결과 값의 범위는 -1에서 +1까지입니다.

public class MonteCarlo 
{ 
public static void main(String[] args) 
{ 
    System.out.println("Number of tries"); 
    Random generator = new Random(42); 
    Scanner in = new Scanner(System.in); 
    int tries = in.nextInt(); 

    int hits = 0; 
    for (int i = 1; i <= tries; i++) 
    { 
     // Generate two random numbers between -1 and 1 

     double x = generator.nextDouble() * 2 -1 ; 

     double y = generator.nextDouble() * 2 -1 ; 

     // Check whether the point lies in the unit circle 

     if (Math.sqrt((x - 0) * (x - 0) + (y - 0) * (y - 0)) <= 1) 
     { 
      hits++; 
     } 
    } 

    /* 
     The ratio hits/tries is approximately the same as the ratio 
     circle area/square area = pi/4 
    */ 

    double piEstimate = 4.0 * hits/tries; 
    System.out.println("Estimate for pi: " + piEstimate); 
} 
} 

내 질문은, 어떻게 내 강사의 접근 방식과 내 방식이 다른가요된다

강사의 대답은 (2)에 의해 생성 된 두 배를 곱하고 여기에 자신의 코드의 1을 빼야했다? 내 생각이 효과가 있니?

+0

두 개의 주사위 롤을 추가하는 것과 같은 이유 때문에 하나의 다이를 스케일링하는 것과 동일하지 않습니다. – harold

+0

강사의 답변과 왜 그것이 옳은지 설명하는 대신, 우리에게 당신의 대답을 제공하고 우리에게 설명하는 것이 더 나을 것이라고 생각합니다. 왜 틀렸어. –

+1

귀하의 방법은 -1과 1 사이의 값을 _evenly_ 배포하지 않습니다. 강사의 방법이됩니다. – GriffeyDog

답변

3

이것은 실제로 프로그래밍 문제보다 수학 문제입니다. 당신의 목표는 범위에서 균일하게 랜덤 실수를 샘플링하는 것입니다 [-1, 1], 당신은이 일을 두 가지 방법이 있습니다 범위

  1. 샘플 실수를 [0, 1] 2로 곱하고 1을 뺍니다.

  2. 범위 [0, 1]의 균일 한 두 개의 실수를 샘플링 한 다음이를 뺍니다.

(1) 방법이 올바르게 작동합니다. 방법 (2)는 그렇지 않습니다. 범위 [0, 1]에 대해 설명하기보다는 두 개의 공정한 주사위를 굴려서 두 번째 주사위에서 첫 번째 주사위를 뺀 -5에서 +5 사이의 임의의 숫자를 선택한다고 가정 해 봅시다. 모든 주사위 굴림이 공평하고 {1, 2, 3, 4, 5, 6} 중에서 일정한 것을 선택하더라도 결과 분포는 일정하지 않습니다. 첫 번째 다이에 한 두 번째 다이에 여섯 롤이 예를 들어 : 일어날 수에 대해 하나의 가능한 방법이 있기 때문에 점점

  • 확률 -5 서른 여섯에 하나 .
  • 0을 얻는 확률은 여섯 개입니다 (1/1, 2/2, 3/3, 4/4, 5/5 및 6/6).

두 개의 균일 한 난수를 뺀 것이 원하는 범위에서 균등하게 무작위로 분포하지 않는 이유를 설명하는 수학적 종류가 있습니다. 대신 삼각형 모양의 분포를 얻습니다.이 분포는 0에서 최고조에 달하며 +1과 -1로 갈수록 떨어집니다.

다른 말로하면, 당신은 무작위 수를 얻습니다 - 이것은 균일 한 확률로 단위 사각형에 다트를 던지는 것과 동일하지 않습니다.