2009-04-15 3 views

답변

5

사실 standard generator은 균일 한 배포 용입니다. 모든 언어/라이브러리의 기본 난수 생성기는 모든 일반적인 의사 난수 생성기 알고리즘에서 나오는 것이기 때문에 항상 균일 한 분포를 사용합니다. 기본적으로 균일 한 난수가 가장 쉽습니다.

나는

+0

실제로 링크는 정상 변량을 만드는 "nextGaussian"메서드도 지적합니다. – gnovice

4

날이 아무도 내가 진정으로 무작위 없다는 사실이 모든 서문 보자 ... 에디 아직 나는이의 나머지 부분을 작성 건너 뛸 수 있습니다 다른 배포판에 대한 링크로 지적 참조 의사 난수 생성기에 대해 이야기하고 있습니다.

생산 품질 코드에 대해이 작업을 수행 한 적이 없다고도하겠습니다. 나는 파이썬에서 hw 할당을 위해 이것을했다. Poisson 확률 변수를 시뮬레이션했습니다.

  1. 포아송 확률 변수는 지수 확률 변수의 합이다 : 나는 그것을했다

    방법은 다음과 같은 사실을 이용했다.

  2. 역변환 방법을 사용하여 지수 임의 변수를 생성 할 수 있습니다. http://en.wikipedia.org/wiki/Inverse_transform_sampling. 특히

, 넌 사실을 사용할 수있다 : X 1 : X 1 ..., X N표준 지수 확률 변수 후 Z = 분 (무관 K 만약 + ... + X k <) - 1은 포아송 (λ)이다. 클래스의

class Poisson: 
    """Generate Poisson(lambda) values by using exponential 
    random variables.""" 

    def __init__(self, lam): 
     self.__lam = lam 

    def nextPoisson(self): 
     sum = 0 
     n = -1 
     while sum < self.__lam: 
      n += 1 
      sum -= math.log(random.random()) 
     return n 

사용 예제는 다음과 같습니다 :이 좋기 때문에

# Generates a random value that is Poisson(lambda = 5) distributed 
poisson = Poisson(5) 
poisson_value = poisson.nextPoisson 

내가 여기를 게시

그래서, 그와 함께, 나는 포아송 값을 생성하기 위해 파이썬에서 다음 코드를 작성 이러한 종류의 관계가 있음을 알기 위해이 역변환 방법을 사용하면 특정 연속 분포에 따라 임의의 값을 생성하는 일반적인 방법을 얻을 수 있습니다.

+0

번호가 매겨진 목록의 서식을 내가 의도 한 것으로 수정했습니다. 이것이 의도 한 것이 아닌 경우, 물론 변경 사항을 되돌릴 수 있습니다. – Eddie

12

David가 지적했듯이 제공된 의사 난수 생성기는 Uniform 분포를 사용합니다.,

이 라이브러리 함수는 쉽게 각 유통에서 찍은 임의의 숫자를 찾을 수 있습니다 : 다른 두

, 나는 Cern Colt 라이브러리 함수를 사용합니다 확률 밀도 함수 또는 누적 밀도 함수를 제공하고 자신이 파생 된 수를 기대하기보다는 (Apache Commons-Math 접근법 인 것처럼 보임) :

RandomEngine engine = new DRand(); 
Poisson poisson = new Poisson(lambda, engine); 
int poissonObs = poisson.nextInt(); 

Normal normal = new Normal(mean, variance, engine); 
double normalObs = normal.nextDouble(); 

또한, 큰 λ에 대한 포아송 분포 P (λ) 은 정규 분포 N (λ, sqrt (λ))에 의해 매우 잘 근사 될 수있다.

+0

그들이 사용하는 최소값과 최대 값을 지정하는 방법이 있습니까? 내가 본 것을 그 것처럼 보이지 않는다. –

+0

포아송 분포와 정규 분포가 최대 또는 최소를 갖지 않기 때문입니다 (물론 포아송은 최소 0으로 고정되어 있습니다). –

+0

아주 좋은 도서관, 고마워! – peq

6

표준 Java RNG (java.util.Random) 및 하위 클래스 (예 : java.security.SecureRandom)는 이미 균일하게 분포 된 값을 생성합니다.

또한 정규 분포 값을 반환하는 nextGaussian 메서드가 있습니다. 기본적으로 분포는 평균이 0이고 표준 편차가 1이지만 사소한 수정이 있습니다. 필요한 s.d.를 곱하면됩니다. 필요한 평균을 더하십시오.

double value = rng.nextGaussian() * 2.5 + 6; 

는 포아송 분포가 명시 적으로 지원되지 않습니다,하지만 당신은에 의해 가짜 수 : 그래서, 예를 들어, 당신이 (6)의 평균과 2.5의 표준 편차 일반적으로 분산 값을 경우 원하는, 당신은이 작업을 수행 할 것 Tom's Python code과 동일하게 수행합니다.

또는 Uncommons Maths library, Normal, Poisson 및 기타 배포 용 유틸리티 클래스를 제공합니다.

+0

) Uncommons에 대한 링크는 404입니다. –