2010-12-06 4 views
4

matlab에서 평균 및 표준 편차를 갖는 정규 분포 난수 벡터를 생성하기 쉽습니다. 도움말에서 randn :공분산 행렬로 정규 분포 된 랜덤 벡터 생성

평균 1과 표준 편차 2를 사용하여 값을 생성하십시오. r = 1 + 2. * randn (100,1);

이제 공분산 행렬 C가 있고 N (0, C)를 생성하고 싶습니다.

하지만 어떻게해야합니까?

randn 도움말에서 : 지정된 평균이 벡터와 공분산 행렬 인 이변 량 정규 분포에서 값을 생성합니다. mu = [1 2]; 시그마 = [1.5; .5 2]; R = 콜 (시그마); z = repmat (mu, 100,1) + randn (100,2) * R;

그러나 나는 그들이 여기서 무엇을하고 있는지 정확히 알지 못합니다.

+1

당신은 어떤 부분을 이해하지? 'mu'는 평균 벡터 (귀하의 경우 0이므로 그대로 두십시오)이고, Sigma는 공분산 행렬이며 100 쌍의 난수를 생성합니다. – Donnie

+0

repmat 부분을 이해할 수 없습니다. 이 방법도 가능합니다 : chol (C, 'lower') + randn (N, 1); C는 공분산 행렬 – Derk

+0

미안하지만 지금은 이해할 수 있다고 생각합니다. repmat은 100 쌍의 난수에 대한 평균 행렬을 만드는 데 사용됩니다. – Derk

답변

3

당신이 다소 수학 문제가 아닌 프로그래밍 질문 작업

mvnrnd(mu,SIGMA) 
4

을 수행하려면 다음과 같은 내장 MATLAB 기능을 사용할 수 있습니다. 그러나 저는 견고한 수학과 프로그래밍 지식을 필요로하는 훌륭한 코드를 작성하는 것을 열렬히 좋아합니다. 그래서 나는 이것을 후손을 위해 쓰겠습니다.

독립적 인 상관 관계 확률 변수를 생성하려면 콜레스터 분해 (또는 행렬의 분해/제곱근)를 취해야합니다. X이 평균 m이고 공분산이 D 인 복수 변수 법칙 일 경우 Y = AX은 평균이 Am이고 공분산 행렬이 ADA' 인 다 변수 일반입니다. 여기서 A'은 조 변경입니다. D이 항등 행렬 인 경우 공분산 행렬은 AA'이고 생성하려는 공분산 행렬 C과 같아지기를 원합니다.

콜레 스키 분해는 그러한 행렬 A을 계산하고이를 수행하는 가장 효율적인 방법입니다. 자세한 내용은

은 다음을 참조하십시오 http://web.as.uky.edu/statistics/users/viele/sta601s03/multnorm.pdf