2011-01-10 15 views
1

私はスキュー正規分布の確率密度関数を持っています。私はmatlabのスキュー正規分布に従う乱数を生成したいと思います。matlabでスキュー正規分布に従う乱数を生成する方法

+0

:あなたは正しいですが、私はスキュー通常は、単にランダムな番号を取得number.toランダムに分散必要http://en.wikipedia.org/wiki/Random_number_generation#Generation_from_a_probability_distribution –

+0

はとても簡単です。 – Amber

+0

http://azzalini.stat.unipd.it/SN/ – zellus

答えて

1

は、その性能/妥当性を保証することはできませんが、http://azzalini.stat.unipd.it/SN/は、次のことを言うと、MATLAB関数の.zipファイルへのリンクがあります:

ライブラリはニコラ・サルトーリして、MATLABに移植されました。今のところこれは0.21を更新することを指します。スキューt分布のための設備は含まれていない。またthis code参照スキューt分布のための施設の一部が書かれ

(postgrad.mbs.ac.uk [で] Enrique.Batiz)エンリケBatizによって利用可能にされているa set of Matlab functions介ししかし、利用可能ですこれはビジュアルベーシックではあるが、簡単に移植可能でなければならない。関連する以下の抜粋これは、単位正規分布からの数値のペアであるRandNorm(リンクされたWebページにもあります)を使用し、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 
+0

ありがとうたくさん......私たちはmatlabでどのように変換できますか? – Amber

+2

@Amber:あなたは自分でこれを行うことができるはずです。私はRandNorm()がrandn(2,1)に置き換えられる方法について述べました。それ以外の部分は簡単です。 'Sqr()'はsqrt() 'に変換され、' Dim'文は必要ありません。 –

+0

多変量の場合にスキュー正規分布を使用して乱数を生成するにはどうすればよいですか? – Amber

関連する問題