2014-08-21 4 views
0

Matlab에서 교차로까지의 차량 도착 과정을 시뮬레이션하려고합니다. 차량은 포아송 분포로 무작위로 생성됩니다.Matlab에서 포아송 분포를 이용한 난수 생성

한 컷으로 교통 흐름의 강도가 시간당 600 대의 차량이라고 가정 해 봅시다. 이론에서 이해 한 바에 따르면 포아송 분포의 람다는 600/3600 (1 시간에 3600 초)이어야합니다.

for i = 1:3600 
    vehicle(i) = poissrnd(600/3600); 
end 

하나의 문제가 있습니다

: 다음

나는이주기 실행, 그것은 어떤 숫자가 주변에 항상 600 사람이 결코 내가 배열 vehicle에서 "사람"을 계산 할 때입니다, 595 567 등 등등.

질문이 잘못 되었나요? 즉 람다가 달라야합니까? 아니면 숫자가 결코 같지 않을 것이라는 평범한가?

+0

당신이 어려움이 여기에 기본적인 문제를 이해하기,이 장치가 있다면 : 4 개 동전을 플립 가정 , 당신은 항상 2 명의 머리를 가질 것입니까? 당신은 어떻게 항상 2와 함께 머리를 얻을 수 있습니까?! –

답변

3

임의의 숫자를 생성하는 경우 출력을 기대할 수 있습니다.

실제로 출력을 알고 있다면 더 이상 임의가 아닙니다.

이와 같이 여러분은 잘못된 행동을하지 않습니다.

코드를 좀 더 우아하게 만들 수 있습니다. 당신은 항상 숫자가 (결과를 재현 할 예) 무작위로 발전기의 상태를 설정하려고 동일 할 경우

vehicle = poissrnd(600/3600,3600,1) 

:

이 벡터화 된 접근 방법을 고려한다. 당신이 (이전 코드없이) 현대 버전이있는 경우

당신과 같이 그것을 할 수 : 경우

rng(983722) 

+0

어레이의 1과 0의 무작위 분포에는 문제가 없습니다. 즉, 사이클을 실행할 때마다 배열에서 변경된다는 의미입니다. 그러나 문제는 배열에서 정확히 600 개가되고 싶다는 것입니다. 강도가 600 대/h이면주기가 끝난 후 600 대가되어야합니다 ... – Mara

+0

@ 마라 항상 3600 개의 값으로 정확히 600 개의 자릿수가 있고 포아송 무작위 배분 **이 동시에 발생할 수 없습니다 . 분포로 3600 초를 생성 할 수도 있고, 관측치가 600 개가 될 때까지 초를 계속 추가 할 수도 있습니다. 이것은 동시에 발생하지 않습니다. 배포판에 관심이 없지만 항상 3600 개의 값 중에서 600 개를 원한다면 다음과 같이 해보십시오 :'randperm (3600,600)' –

+0

이제 문제가 생겼습니다. 3600 값의 포아송 분포를 가질 수 있다고 생각했습니다. 정확한 숫자. 방금 포아송 분포에 따라 3600 개의 값에서 정확히 600 개의 값을 분산시킬 수 있기를 바랐습니다. 해답은 고마워요. – Mara