Random numbers mit der GSL



  • Hallo,

    Ich möchte mir mit Hilfe der Gnu Scientific Library (GSL) Zufallszahlen basierend auf der Lognormal Verteilung generieren lassen.
    Mein erstes Problem ist dass ich das Beispielprogramm (habe die Verteilungsfunktion geändert) (http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Distribution-Examples.html) vom output her nicht verstehe.
    Wenn das ein Random Generator ist, wieso ändern sich die Zahlen dann nicht mit jedem neuen Aufruf?
    es heißt noch das sei abhängig vom seed. Wenn man diese Variable ändert entstehen tatsächlich andere Zahlen, aber woher rührt das? Was hat der seed mit der lognormal distribution zu tun?
    Gut, das nächste wären die Parameter der Funktion an sich. Der Definition nach braucht die Funktion den Mittelwert und die Standardabweichung. Die Werte die ich mir generieren lassen möchte bewegen sich so im Bereich 1e5, mit einer Abweichung nach oben von ca. 20% und nach unten bis 0. Wenn ich die Funktion aber mit annähernden Testwerten füttere kommen viel zu hohe Ergebnisse raus. Habe ich was nicht beachtet?
    Außerdem habe ich noch ein Problem mit den Daten an sich. Ich möchte mir Kanaldaten verschiedener Mobilfunkstandards zufallsgenerieren lassen, als Grundlage habe ich pro Standard nur die einfachen Bandbreitenwerte gut, schlecht und standard. Besteht eine Beziehung dieser Charakteristiken zur Standardabweichung und dem Mittelwert?

    Zugegebenermaßen, das sind alles mehr mathematische Probleme. Leider habe ich wenig Ahnung davon, ich brauche diese Berechnungen aber.
    Vielleicht habe ich ja Glück, und jemand hat eine Idee dazu oder bereits Erfahrung mit diesem Ansatz.

    Viele Grüße
    Chris



  • Shapeshifter schrieb:

    es heißt noch das sei abhängig vom seed. Wenn man diese Variable ändert entstehen tatsächlich andere Zahlen, aber woher rührt das? Was hat der seed mit der lognormal distribution zu tun?

    Der Computer ist nicht wirklich in der Lage, echte Zufallszahlen zu erzeugen (ja, es gibt auch dafür Lösungen). Darum berechnet er sogenannte Pseudo-Zufallszahlen - aus dem ursprünglichen Seed-Wert wird bei jedem Aufruf ein neuer Seed-Wert und eine Zahl berechnet (die auf den ersten Blick zufällig aussieht).

    Shapeshifter schrieb:

    Gut, das nächste wären die Parameter der Funktion an sich. Der Definition nach braucht die Funktion den Mittelwert und die Standardabweichung. Die Werte die ich mir generieren lassen möchte bewegen sich so im Bereich 1e5, mit einer Abweichung nach oben von ca. 20% und nach unten bis 0. Wenn ich die Funktion aber mit annähernden Testwerten füttere kommen viel zu hohe Ergebnisse raus. Habe ich was nicht beachtet?

    Sowas ist aber nicht wirklich eine Normalverteilung. Sprich, du müsstest vermutlich eine eigene Verteilungsfunktion entwerfen, die du verwenden kannst.

    (btw, die Standardabweichung gibt keine feste Wertgrenze vor, das ist nur ein Maß dafür, wie weit die Werte im Durchschnitt vom Mittelwert abweichen - und zwar unabhängig von der Richtung)



  • Erstmal vielen Dank für die Anregungen.
    Das mit dem seed macht schon Sinn, für die Generierung ständig neuer Zahlen finde ich sicher leicht eine Lösung; dann muss sich eben der seed zufallsgeneriert werden.

    Zum Output: Die Werte die ich brauche sollen schon nach der Vorgabe einer logarithmischen Normalverteilung auftreten. Viel kann ja eigentlich nicht mehr fehlen, die Werte sind bereits zufällig und treten in der gewünschten Häufigkeit verteilt auf.
    Kann ich jetzt nicht einfach die ausgespuckten Werte mit meinem Standardwert multiplizieren? Ich müsste mir also eine lognormal Verteilung erzeugen deren am häufigsten auftretender Wert 1 ist.Oder sehe ich das falsch?



  • Shapeshifter schrieb:

    Erstmal vielen Dank für die Anregungen.
    Das mit dem seed macht schon Sinn, für die Generierung ständig neuer Zahlen finde ich sicher leicht eine Lösung; dann muss sich eben der seed zufallsgeneriert werden.

    Wenn du einen echten Zufallsgenerator hast, um den Seed zu ermitteln, brauchst du aber keinen Pseudo-Generator mehr 😃 Aber idR reicht es aus, den Startwert so zu bestimmen, daß er sich bei jedem Programmaufruf ändert (sehr beliebt ist da die Systemzeit).

    Zum Output: Die Werte die ich brauche sollen schon nach der Vorgabe einer logarithmischen Normalverteilung auftreten. Viel kann ja eigentlich nicht mehr fehlen, die Werte sind bereits zufällig und treten in der gewünschten Häufigkeit verteilt auf.

    Wie genau passt die Bedingung "logarithmische Normalverteilung mit deiner Anforderung "mit einer Abweichung nach oben von ca. 20% und nach unten bis 0" zusammen? Die log. NV hat ein deutliches Maximum am Mittelwert und ist nach oben unbeschränkt (allerdings sind Werte nahe 0 und extrem große Werte recht selten). Du könntest höchstens deine Standardabweichung so festlegen, daß kaum Werte oberhalb des Maximalwertes liegen (Stichwort "Quantile").


Log in to reply