Several draws from multivariate normal distribution
古いコメントを表示
Let
MU=[1 2; 3 4; 5 6]
SIGMA=[2 0; 0 2]
I want to write one or two lines of code to draw R=10 unobservables from Normal((MU(1,:),SIGMA), Normal((MU(2,:),SIGMA), Normal((MU(3,:),SIGMA) without looping and store the results in a matrix 3x(R*2).
採用された回答
その他の回答 (1 件)
Christopher Berry
2014 年 8 月 11 日
The function you are looking for is mvnrnd. You will still have to call mvrnd one distribution at a time, and hence looping would probably make the most sense, especially for more than 3 distributions.
mu = [1 2;3 4;5 6];
SIGMA = [2 0;0 2];
rng('default'); % For reproducibility
r1 = mvnrnd(mu(1,:),SIGMA,10);
r2 = mvnrnd(mu(2,:),SIGMA,10);
r3 = mvnrnd(mu(3,:),SIGMA,10)
R = [r1(:)';r2(:)';r3(:)']
The final output R will be 3x20 and have var1 values in columns 1:10 and var2 values in 11:20.
2 件のコメント
MRC
2014 年 8 月 11 日
John D'Errico
2014 年 8 月 11 日
編集済み: John D'Errico
2014 年 8 月 11 日
No, you don't need to call mvnrnd multiple times. Once will suffice. Simply supply a diagonal covariance matrix and a vector of means.
As easily, this is trivial to do using just randn.
カテゴリ
ヘルプ センター および File Exchange で Creating and Concatenating Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!