2011-01-10 14 views
1

Ich habe Wahrscheinlichkeitsdichtefunktion von Skew Normalverteilung.Ich möchte Zufallszahl, die der Skew Normalverteilung in Matlab folgen.wie Zufallszahlen zu generieren, die Skew Normalverteilung in Matlab folgen

+0

Das ist ein Ausgangspunkt ist: http://en.wikipedia.org/wiki/Random_number_generation#Generation_from_a_probability_distribution –

+0

Sie richtig sind, aber ich brauche Skew normalen zufällig verteilt number.to einfach Zufallszahlen zu bekommen ist so einfach. – Amber

+0

Werfen Sie einen Blick auf http://azzalini.stat.unipd.it/SN/ – zellus

Antwort

1

kann nicht für ihre Leistung/Angemessenheit bürgen, aber http://azzalini.stat.unipd.it/SN/ sagt die folgenden, und hat einen Link zu einer ZIP-Datei von MATLAB-Funktionen:

Die Bibliothek in Matlab von Nicola Sartori portiert wurde. Bisher bezieht sich dies auf update 0.21; daher sind Einrichtungen für die Skew-T-Verteilung nicht enthalten. Ein Teil der Einrichtungen für die Skew-t-Verteilung ist jedoch über a set of Matlab functions zur Verfügung, die geschrieben wurde, und zur Verfügung gestellt von Enrique Batiz (Enrique.Batiz [at] postgrad.mbs.ac.uk)

Auch this code sehen Das ist in Visual Basic, sollte aber leicht tragbar sein. Relevanter Auszug, der unten gezeigt wird. Dies verwendet RandNorm (auch in der verknüpften Webseite), die ein Paar Zahlen aus einer Einheitsnormalverteilung ist, und in MATLAB sollten Sie randn(2,1) verwenden können.

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

vielen Dank ...... Wie können wir es in Matlab konvertieren? – Amber

+2

@Amber: Sie sollten in der Lage sein, dies auf eigene Faust zu tun. Ich habe erwähnt, wie RandNorm() durch randn (2,1) ersetzt werden kann. Der Rest ist einfach; 'Sqr()' konvertiert zu sqrt() 'und Sie brauchen die' Dim' Anweisungen nicht. –

+0

Wie können wir im multivariaten Fall Zufallszahlen mit Skew-Normalverteilung erzeugen? – Amber

Verwandte Themen