Matheschwacher Programmierer hat Probleme mit dem Zufall

Neue Frage »

(jip) Auf diesen Beitrag antworten »
Matheschwacher Programmierer hat Probleme mit dem Zufall
Hallo,
ich bin hier ganz neu und weiß nicht, ob ich im richtigen Bereich gelandet bin. Wenn nicht: bitte, verschieben!
Außerdem entschuldige ich mich gleich für meine Inkompetenz. Gott Ich brauche eure Hilfe.

Ich erzeuge bei einem Game Zufallszahlen nach einer bestimmten Funktion. Die Verteilung entspricht einer Gausskurve - allerdings so, dass die Kurve am Maximum "abgeschnitten" ist.

Das Ganze sieht in Pseudocode (sorry) momentan so aus:
verteilung = MAX - (Sqrt(-1.1 * log(Zufallszahl1) * cos(3.14159265 * Zufallszahl2)) * MAX;

Und erzeugt bereits Werte zwischen 1 und MAX, die tendentiell (gaussmäßig) nahe bei MAX liegen.

Vielleicht hat dazu jemand Kommentare, aber das eigentliche Problem ist nun Folgendes:
Ich will nun eine weitere Variable (einen Faktor, was weiß ich) ergänzen, der die Gauskurve streckt oder staucht, den Wendepunkt nach rechts oder links verschiebt, den "Berg" massiger oder spitzer macht, oder wie man das auch immer beschreiben würde.

Diese Variable soll außerdem den gleichen Wertebereich wie MAX haben.


Vielleicht fällt jemandem was dazu ein! Würde mich sehr über Lösungsansätze freuen!

Mein bisheriges "Knowhow" stammt übrigens von hier: http://logicalgenetics.com/showarticle.php?topic_id=893
AD Auf diesen Beitrag antworten »

Bei "richtigem" Gauß kannst du strecken oder stauchen, Ok. Der Wendepunkt wandert dann aber automatisch mit, lässt sich also NICHT extra noch manipulieren - wenn du das doch willst, ist das garantiert keine Gaußsche Normalverteilung mehr. unglücklich

Im übrigen sieht dein Code aus, als basiert der auf der Box-Muller-Methode. Allerdings verwundert mich etwas, dass der Kosinus-Ausdruck mit unter der Quadratwurzel steht - für eine Normalverteilung muss der außerhalb stehen!
(jip) Auf diesen Beitrag antworten »

Danke für die Antwort!

Stimmt, Box-Muller-Methode...

lassen wir den Quatsch mit dem Wendepunkt, habe mich wohl nicht klar ausgedrückt. Hammer

Bekomme ich das Strecken/Stauchen mit der Box-Müller-Methode hin (werd wohl die Formel ohnehin noch korrigieren müssen)? Oder vielleicht mit der Polar-Methode, auf die ich grad gestoßen bin? - Und wenn ja, wie?
(jip) Auf diesen Beitrag antworten »

Achso, danke für den Hinweis: Hab eine Klammer versehentlich gestrichen. Die Funktion lautet:

verteilung = MAX - (Sqrt(-1.1 * log(Zufallszahl1)) * cos(3.14159265 * Zufallszahl2)) * MAX;

Eigentlich müsste es auch 2 * Pi heißen...

Multipliziere ich dann die Zufallszahlen mit dem Streckungsfaktor, oder wie läuft das?
AD Auf diesen Beitrag antworten »

Die Polarmethode ist im Prinzip "Box-Muller + Verwerfungsmethode":

Auch wenn sie in knapp ein Viertel aller Fälle eine Wiederholungsauswürfelung der Zufallszahlen erforderlich macht, ist sie doch durch den Wegfall der Winkelfunktionen erheblich schneller in der Laufzeit - meine klare Empfehlung für die Simulation standardnormalverteilter Zufallsgrößen. Freude

Was die Skalierung betrifft, wo ist das Problem? Ist , also standardnormalverteilt, so ist , da hast du Streckung/Stauchung und auch noch eine Verschiebung .

Ein eventuell nachgelagertes Abschneiden oben/unten kannst du ja ebenfalls über die Verwerfungsmethode simulieren: Überschreitet ein simulierter Wert die Grenzen, wirfst du ihn weg und wiederholst die Prozedur.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »