генерация нормально распределенного случайного вектора с ковариационной матрицей - PullRequest
4 голосов
/ 06 декабря 2010

В Matlab легко генерировать нормально распределенный случайный вектор со средним и стандартным отклонением. Из справки Рандн:

Генерация значений из нормального распределения со средним 1 и стандартным отклонение 2. r = 1 + 2. * randn (100,1);

Теперь у меня есть ковариационная матрица C, и я хочу сгенерировать N (0, C).

Но как я мог это сделать?

Из справки randn: Генерация значений из двумерного нормального распределения с указанным средним векторная и ковариационная матрицы. mu = [1 2]; Сигма = [1,5; .5 2]; R = chol (Sigma); z = repmat (mu, 100,1) + randn (100,2) * R;

Но я точно не знаю, что они здесь делают.

Ответы [ 2 ]

4 голосов
/ 25 января 2013

Это вопрос математики, а не вопроса программирования. Но я большой поклонник написания отличного кода, который требует как глубоких знаний по математике, так и программирования, поэтому я напишу это для потомков.

Вам нужно взять разложение Холецкого (или любое разложение / квадратный корень из матрицы), чтобы сгенерировать коррелированные случайные переменные из независимых. Это связано с тем, что если X является многомерным нормальным со средним m и ковариацией D, то Y = AX является многомерным нормальным со средним Am и ковариационной матрицей ADA', где A' - транспонирование. Если D является единичной матрицей, то ковариационная матрица равна просто AA', и вы хотите быть равной ковариационной матрице C, которую вы пытаетесь сгенерировать.

Разложение Холецкого вычисляет такую ​​матрицу A и является наиболее эффективным способом сделать это.

Для получения дополнительной информации см .: http://web.as.uky.edu/statistics/users/viele/sta601s03/multnorm.pdf

3 голосов
/ 28 марта 2011

Вы можете использовать следующую встроенную функцию matlab для выполнения вашей работы

mvnrnd(mu,SIGMA)
...