登录论坛

查看完整版本 : 如何在Matlab中生成遵循偏态正态分布的随机数


poster
2019-12-14, 20:38
我有偏态正态分布的概率密度函数,我想在matlab中生成遵循偏态正态分布的随机数。



回答:

无法保证其性能/性能,但http://azzalini.stat.unipd.it/SN/表示以下内容,并且具有指向MATLAB函数的.zip文件的链接:

该库已由Nicola Sartori移植到Matlab。到目前为止,这是指更新0.21;因此不包括偏斜t分布的设施。但是,可以通过Enrique Batiz编写并提供的一组Matlab函数 (http://azzalini.stat.unipd.it/SN/skt-matlab.zip)来获得偏斜t分布的部分功能 (http://azzalini.stat.unipd.it/SN/skt-matlab.zip) (Enrique.Batiz [位于] postgrad.mbs.ac.uk)

另请参见在Visual Basic中的此代码 (http://www.ozgrid.com/forum/showthread.php?t=108175&page=1) ,但应易于移植。相关摘录如下。这使用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

更多&回答... (https://stackoverflow.com/questions/4643285)