如何在matlab中生成跟随偏斜正态分布的随机数

问题描述:

我有偏斜正态分布的概率密度函数。我想生成跟随matlab中偏斜正态分布的随机数。如何在matlab中生成跟随偏斜正态分布的随机数

+0

这是一个起点:http://en.wikipedia.org/wiki/Random_number_generation#Generation_from_a_probability_distribution – 2011-01-10 06:18:00

+0

你是对的,但我需要歪斜正态分布随机number.to得到简单的随机数是那么容易。 – Amber 2011-01-10 06:42:00

不能保证其性能/充足,但http://azzalini.stat.unipd.it/SN/说以下内容,有一个链接到的MATLAB功能.zip文件:

库已被尼古拉·萨托利移植到Matlab的。到目前为止,这是指更新0.21;因此不包括倾斜t分布的设施。对于歪斜t分布的设施的部分是可用的但通过已被写入,并提供由恩里克Batiz(Enrique.Batiz [在] postgrad.mbs.ac.uk)

a set of Matlab functions另见this code这是在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