2014-02-12 3 views
0

길이가 n 인 벡터를 0에서 1까지의 값 (또는 비슷하게 .01에서 .99까지 사용 가능)으로 반환하는 함수를 만들어야합니다.이 함수는 지정된 정규 분포를 따르고 있습니다. mu 및 sd를 의미합니다. 즉, 벡터의 값 중 ~ 68 %가 ± 1 초 이내에 들어갑니다. 사용자가 지정한 평균값. 따라서 함수의 입력은 n, mu, s.d입니다. 하나의 벡터가 반환됩니다.Matlab에서 분포를 사용하는 난수

도움을 주시면 대단히 감사하겠습니다. 감사

+0

나는 그것이 똑같은 것은 아니란 것을 알았다. 범위는 (0,1)이어야하며 데이터의 약 98 %를 포함해야합니다. 아래 내 의견을 참조하십시오. – user2502079

답변

1

사용 randn는 :

v = randn(1,n)*sd+mu; 

randn(1,n) 함수는 표준 정규 분포로부터 그려 의사 랜덤 값을 포함하는 1 바이 N 행렬을 반환한다.

sd를 곱하고 mu를 추가하면 평균 mu 및 표준 편차 sd으로 정상적으로 분배되는 일련의 숫자가 제공됩니다.

+0

+1'randn'을 호출하는'normrnd' (Statistics Toolbox)도 참조하십시오. –

+0

고마워요,하지만 통계 도구 상자가 없거나 시작하는 방법을 알 수 없습니다. 사용하는 코드가 숫자를 0에서 1 (예 : hist (randn (1,500) * 2 + .5);)의 범위에 맞지 않으므로 블랙 박스를 피하려고합니다. 다음은 Linspace에 적절한 경계를 파악할 수 없다는 것을 제외하고는 거의 작동하는 코드입니다. 'xsigma = 1; xmu = .5 * 6 * xsigma; x = linspace (0,6 * xsigma, 1000); y = (xsigma * sqrt (2 * pi))^- 1 * exp (- ((x-xmu)) 2)/(2 * xsigma^2)); 6 시그마는 그렇게 할 것이라고 생각했지만 그렇지 않았습니다. 나는 (0,1)에서 곡선의 98 %를 포착하고 싶다. – user2502079

+0

수정 사항을 참조하십시오. 0.5의 평균과 2의 std를 사용하면 0에서 1 범위 밖에서 많은 값을 얻을 수 있습니다. 0에서 1까지의 값 중 98 %를 원한다면 평균을 0.5로 사용하고 std를 2보다 훨씬 작게 사용해야합니다 (0.1을 시도하십시오) –

0

은 어쩌면 내가 요청을 잘못 해석하고 당신은 임의의 숫자를 싶지 않는,하지만입니다

가우시안 방정식 또는 정규 분포 0과 1 사이의 정상 분포 곡선 평가 :

x = (1:n)/n; 
y = 1/(sigma*sqrt(2*pi)).*exp(-((x-mu).^2)/(2*sigma^2)); 

당신이 벡터를 원하기 때문에 길이 = n이면 x도 그 길이 여야합니다. 그래서 위와 같이 할 수 있습니다 (1/n에서 시작하여 1로 끝남). 그런 다음이 값에 대한 정규 분포를 계산합니다.

관련 문제