2012-05-01 3 views
0

Привет, я не уверен, что мой алгоритм правильный. Я пытаюсь реплицировать функцию matlab mvnrnd, но в gsl. Я нашел алгоритм в некоторых журнальных статьях, который создает вектор многомерной нормали, но мне нужна матрица многомерных нормальных случайных чисел.matlab mvnrnd in gsl

позволяет сказать, что распределение Z ~ (mu, sigma);

Предполагая, что сигма является матрицей, уже положительно определенной.

алгоритм я нашел от веб говорит

1. cholskey(sigma) = A 
2. generate uniform gaussian vector r 
3. matrix vector triangular product with gsl_blas_dtrmv A * r 
4. add mu to Ar and that will be a vector of multivariate normal random numbers 

мой метод ниже

следующие изменения belowcorrect к продукту Матрица случайных величин

1. cholskey(sigma) = A 
    2. generate uniform gaussian matrix R 
    3. matrix matrix scalar product AR 
    4. add mu to AR and that will be a matrix of multivariate normal random numbers 

ответ

2

Да, это верно. См. this Wikipedia entry on multivariate normal RNGs который имеет этот раздел:

значения Рисунок из распределения

Широко используемый метод для рисования случайный вектор х из N-мерного многомерного нормального распределения со средним вектором ц и ковариационной матрицы а работ следующим образом:

  1. Найти любую вещественную матрицу A такой, что а в = а. Когда Σ положительно-определенно, разложение Холецкого обычно . [...]

  2. Пусть г = (z1, ..., Zn) Т вектор, компоненты которого являются N независимые стандартные нормальные (переменными, которые могут быть сгенерированы, для , например, с помощью Box-Мюллера преобразования).

  3. Пусть x равно μ + Az. Это имеет желаемое распределение из-за свойства аффинного преобразования.

который описывает тот же алгоритм.

Существует также несколько вариантов реализации для R, например mvrnorm в пакете MASS, который поставляется с каждой установкой R.

+0

спасибо! не думал, что я получу кого-то известного, как самого себя, чтобы ответить на мой вопрос – pyCthon