Не могу поручиться за их производительность / адекватность, но 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