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!