Функция нормального распределения в Matlab

извините за глупый вопрос, математика не моя сильная сторона. Я пытаюсь разработать функцию в Matlab, которая генерирует выборки в соответствии с нормальным распределением N (мю, сигма) в d-измерениях. Это код, который у меня есть до сих пор,

mu = [1 2];
Sigma = [1 .5; .5 2]; R = chol(Sigma);
z = repmat(mu,100,1) + randn(100,2)*R;

Я нашел это, прочитав различные статьи в Википедии и Google, и мне было интересно, правильно ли это? Заранее спасибо,

ржавый


person rusty009    schedule 24.05.2012    source источник


Ответы (1)


Краткий ответ - да.

Чуть более длинный ответ - почему бы не попробовать самому?

>> z = repmat(mu,1000000,1) + randn(1000000,2)*R;
>> mean(z)
ans =
        1.001       2.0005
>> cov(z)
ans =
      0.99937      0.49942
      0.49942       2.0017
person Community    schedule 24.05.2012
comment
Благодарю вас! Кроме того, у меня есть еще один похожий вопрос: в чем разница между использованием randn(), как у меня выше, или mvnrnd(MU,SIGMA) для создания нормальных выборок, используется ли mvnrnd для измерений больше 2? - person rusty009; 24.05.2012
comment
randn не является многомерным, он просто генерирует нормальные числа независимо в каждом измерении. Вы не можете заставить ковариацию. mvnrnd предназначен для создания выборок из правильного многомерного нормального распределения. - person Ansari; 24.05.2012
comment
Как указывает Ансари, randn является одновременно и многомерным, и одномерным, хотя если у вас есть тождественная ковариационная матрица, то измерения независимы. Использование randn, как вы это сделали, является вполне допустимым способом создания выборки с заданной матрицей ковариации и средним значением, но mvnrnd дает вам общий случай для любого набора параметров. Найденный вами метод полностью действителен для большего количества измерений. - person ; 24.05.2012