как генерировать случайные числа, которые следуют за косым нормальным распределением в Matlab - PullRequest
1 голос
/ 10 января 2011

У меня есть функция плотности вероятности асимметричного нормального распределения. Я хочу сгенерировать случайное число, которое следует за асимметричным нормальным распределением в matlab.

1 Ответ

1 голос
/ 10 января 2011

Не могу поручиться за их производительность / адекватность, но http://azzalini.stat.unipd.it/SN/ говорит следующее и имеет ссылку на ZIP-файл функций MATLAB:

Библиотека былаперенесен в Matlab Николой Сартори.Пока что это относится к обновлению 0.21;следовательно, средства для асимметричного распределения не включены.Однако часть средств для асимметричного распределения доступна через набор функций Matlab , которые были написаны и доступны Энрике Батизу (Enrique.Batiz [at] postgrad.mbs.ac.uk).)

Также см. этот код , который находится в Visual Basic, но должен быть легко переносимым.Соответствующий отрывок показан ниже.При этом используется RandNorm (также на связанной веб-странице), представляющий собой пару чисел из обычного распределения, и в MATLAB вы должны использовать randn(2,1).

Function RandSkew(fAlpha As Single, _
                  Optional fLocation As Single = 0, _
                  Optional fScale As Single = 1, _
                  Optional bVolatile As Boolean = False) As Single

    ' shg 2008-0919
    ' http://azzalini.stat.unipd.it/SN/faq.html

    ' Returns a random variable with skewed distribution
    '       fAlpha      = skew
    '       fLocation   = location
    '       fScale > 0  = scale

    Dim sigma   As Single
    Dim afRN()  As Single
    Dim u0      As Single
    Dim v       As Single
    Dim u1      As Single

    If bVolatile Then Application.Volatile
    Randomize (Timer)

    sigma = fAlpha / Sqr(1 + fAlpha ^ 2)

    afRN = RandNorm()
    u0 = afRN(1)
    v = afRN(2)
    u1 = sigma * u0 + Sqr(1 - sigma ^ 2) * v

    RandSkew = IIf(u0 >= 0, u1, -u1) * fScale + fLocation
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...