Warscheinlichkeitsberechnung

  • Hallo,


    also ich will mir ne Funktion erstellen mit der ich die Wahrscheinlichkeit eines Ergebnis wiedergeben kann, damit ich nicht nur ein Richtig/Falsch habe.

    Dazu habe ich diesen Script geschrieen :

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; warsch($a, $b);; gibt eine variable Zahl aus; die sich zwischen den Werten; $a (unterer Wert) und $b(oberer Wert); befindet. Mittelwert ist am warscheilichsten.; Angaben und Lösung in Integerwerten
    Func warsch($a, $b)
    $z=Random(0, 120, 1) $y=0
    ;====================
    ;-10 If $z=0 Then $y=-10
    ;-9 If $z=1 Then $y=-9 If $z=2 Then $y=-9
    ;-8 If $z=3 Then $y=-8 If $z=4 Then $y=-8 If $z=5 Then $y=-8
    ;-7 If $z=6 Then $y=-7 If $z=7 Then $y=-7 If $z=8 Then $y=-7 If $z=9 Then $y=-7
    ;-6 If $z=10 Then $y=-6 If $z=11 Then $y=-6 If $z=12 Then $y=-6 If $z=13 Then $y=-6 If $z=14 Then $y=-6
    ;-5 If $z=15 Then $y=-5 If $z=16 Then $y=-5 If $z=17 Then $y=-5 If $z=18 Then $y=-5 If $z=19 Then $y=-5 If $z=20 Then $y=-5
    ;-4 If $z=21 Then $y=-4 If $z=22 Then $y=-4 If $z=23 Then $y=-4 If $z=24 Then $y=-4 If $z=25 Then $y=-4 If $z=26 Then $y=-4 If $z=27 Then $y=-4
    ;-3 If $z=28 Then $y=-3 If $z=29 Then $y=-3 If $z=30 Then $y=-3 If $z=31 Then $y=-3 If $z=32 Then $y=-3 If $z=33 Then $y=-3 If $z=34 Then $y=-3 If $z=35 Then $y=-3
    ;-2 If $z=36 Then $y=-2 If $z=37 Then $y=-2 If $z=38 Then $y=-2 If $z=39 Then $y=-2 If $z=40 Then $y=-2 If $z=41 Then $y=-2 If $z=42 Then $y=-2 If $z=43 Then $y=-2 If $z=44 Then $y=-2
    ;-1 If $z=45 Then $y=-1 If $z=46 Then $y=-1 If $z=47 Then $y=-1 If $z=48 Then $y=-1 If $z=49 Then $y=-1 If $z=50 Then $y=-1 If $z=51 Then $y=-1 If $z=52 Then $y=-1 If $z=53 Then $y=-1 If $z=54 Then $y=-1
    ;0 If $z=55 Then $y=0 If $z=56 Then $y=0 If $z=57 Then $y=0 If $z=58 Then $y=0 If $z=59 Then $y=0 If $z=60 Then $y=0 If $z=61 Then $y=0 If $z=62 Then $y=0 If $z=63 Then $y=0 If $z=64 Then $y=0 If $z=65 Then $y=0
    ;+1 If $z=66 Then $y=1 If $z=67 Then $y=1 If $z=68 Then $y=1 If $z=69 Then $y=1 If $z=70 Then $y=1 If $z=71 Then $y=1 If $z=72 Then $y=1 If $z=73 Then $y=1 If $z=74 Then $y=1 If $z=75 Then $y=1
    ;+2 If $z=76 Then $y=2 If $z=77 Then $y=2 If $z=78 Then $y=2 If $z=79 Then $y=2 If $z=80 Then $y=2 If $z=81 Then $y=2 If $z=82 Then $y=2 If $z=83 Then $y=2 If $z=84 Then $y=2
    ;+3 If $z=85 Then $y=3 If $z=86 Then $y=3 If $z=87 Then $y=3 If $z=88 Then $y=3 If $z=89 Then $y=3 If $z=90 Then $y=3 If $z=91 Then $y=3 If $z=92 Then $y=3
    ;+4 If $z=93 Then $y=4 If $z=94 Then $y=4 If $z=95 Then $y=4 If $z=96 Then $y=4 If $z=97 Then $y=4 If $z=98 Then $y=4 If $z=99 Then $y=4
    ;+5 If $z=100 Then $y=5 If $z=101 Then $y=5 If $z=102 Then $y=5 If $z=103 Then $y=5 If $z=104 Then $y=5 If $z=105 Then $y=5
    ;+6 If $z=106 Then $y=6 If $z=107 Then $y=6 If $z=108 Then $y=6 If $z=109 Then $y=6 If $z=110 Then $y=6
    ;+7 If $z=111 Then $y=7 If $z=112 Then $y=7 If $z=113 Then $y=7 If $z=114 Then $y=7
    ;+8 If $z=115 Then $y=8 If $z=116 Then $y=8 If $z=117 Then $y=8
    ;+9 If $z=118 Then $y=9 If $z=119 Then $y=9
    ;+10 If $z=120 Then $y=10
    ;====================
    $s=($b-$a)/2 $p=$s/22
    $e=($s*$y)/10
    Return $e
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Meine Frage ist jetzt, ob es eine Möglichkeit gibt das ganze kürzer und effektiver machen kann (also mit Gleitkommazahlen uns so weiter)

    Ach ja und was mich noch interessieren würde, ist es normal das der Durchschnitt von mehren Ergebnissen (habe immer so 20 genommen) über bzw. unter dem Mittelwert schwankt?

    Schon mal im Voraus vielen Dank schon mal für eure Tipps

  • Ich kann weder anhand der Frage noch anhand deines Scriptes erkennen was genau du willst ^^
    Aber ich sag mal so: Es geht bestimmt effizienter als das Beispiel von dir :D

    Ich rate jetzt einfach mal:
    Man übergibt der funktion den Minimalwert $a und den Maximalwert $b.
    Dannach soll eine Zahl dazwischen zufällig ausgegeben werden, wobei der Durchschnitt wahrscheinlicher ist als die Grenzen.

    z.B. $a = 1, $b = 5

    1 ist sehr unwahrscheinlich
    2 ist eher unwahrscheinlich
    3 ist sehr wahrscheinlicher
    4 ist eher unwahrscheinlich
    5 ist sehr unwahrscheinlich

    Zitat

    Ach ja und was mich noch interessieren würde, ist es normal das der Durchschnitt von mehren Ergebnissen (habe immer so 20 genommen) über bzw. unter dem Mittelwert schwankt?

    Je mehr Ergebnisse du hast desto näher wird der Durchschnitt der Ergebnisse am Mittelwert liegen. Außer du hast etwas falsch gescriptet^^

    • Offizieller Beitrag

    1 ist sehr unwahrscheinlich
    2 ist eher unwahrscheinlich
    3 ist sehr wahrscheinlicher
    4 ist eher unwahrscheinlich
    5 ist sehr unwahrscheinlich


    Sorry, aber da irrst du. Eine genügend lange Meßserie wird dazu führen dass die Verteilung der Einzelwerte annähernd identisch ist.
    Heißt in diesem Fall: Die Wahrscheinlichkeit, dass eine dieser Zahlen ausgegeben wird liegt bei 20%.
    Aber auch hier gilt: Traue keiner Statistik, die du nicht selbst gefälscht hast. :D Je nach den Bewertungsmaßstäben, die du anlegst, wirst du auch andere Ergebnisse erhalten.

  • Sorry, aber da irrst du. Eine genügend lange Meßserie wird dazu führen dass die Verteilung der Einzelwerte annähernd identisch ist.
    Heißt in diesem Fall: Die Wahrscheinlichkeit, dass eine dieser Zahlen ausgegeben wird liegt bei 20%.
    Aber auch hier gilt: Traue keiner Statistik, die du nicht selbst gefälscht hast. :D Je nach den Bewertungsmaßstäben, die du anlegst, wirst du auch andere Ergebnisse erhalten.

    Ich weiß das es bei normalen Random so ist^^
    Das war nur ne Vermutung wie er es vielleicht haben will, weil ich aus seinem Post nicht ganz schlau geworden bin.

  • Sorry, aber da irrst du. Eine genügend lange Meßserie wird dazu führen dass die Verteilung der Einzelwerte annähernd identisch ist.
    Heißt in diesem Fall: Die Wahrscheinlichkeit, dass eine dieser Zahlen ausgegeben wird liegt bei 20%.

    Es gibt doch nicht nur die Gleichverteilung.
    Es gibt zig weitere Verteilungsarten.
    Hier im Beispiel soll es wohl eine Art Standardnormalverteilung werden.
    Eine Aussage zur Wahrscheinlichkeit kannst du nicht treffen wenn dir die Verteilungsart nicht bekannt ist.

    @BastianFluegel
    Du willst eine Art normalverteilte Zufallszahlen generieren - oder?
    Einige Methode diese zu erzeugen findest du z.B. >>hier<<

    Edit: Hab mal die Polarmethode in AutoIt umgesetzt:

    Polarmethode für normalverteilte Zufallsvariablen
    [autoit]


    ; Parameter der Normalverteilung:
    Global $f_Mittelwert = 4
    Global $f_Standardabweichung = 2

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 100
    $aRet = Random_Normal($f_Mittelwert, $f_Standardabweichung)
    ConsoleWrite($aRet[0] & @CRLF & $aRet[1] & @CRLF)
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ======================================================================================
    ; Name ..........: Random_Normal()
    ; Description ...: Gibt ein Array mit 2 normalverteilten Zufallsvariablen zurück
    ; Syntax ........: Random_Normal(Const $f_Mittelwert, Const $f_Standardabweichung)
    ; Parameters ....: Const $f_Mittelwert - Mittelwert der Normalverteilung
    ; Const $f_Standardabweichung - Standardabweichung der Normalverteilung
    ; Return values .: Success: Array mit 2 normalverteilten Zufallsvariablen
    ; Failure: Ich mache keine Fehler!
    ; Author ........: AspirinJunkie
    ; =================================================================================================
    Func Random_Normal(Const $f_Mittelwert, Const $f_Standardabweichung)
    Local $I, $f_H1, $f_H2, $f_QuadSum

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $f_H1 = (2* Random(0, 1) - 1)
    $f_H2 = (2* Random(0, 1) - 1)
    $f_QuadSum = ($f_H1*$f_H1 + $f_H2 * $f_H2)
    Until $f_QuadSum <= 1

    [/autoit] [autoit][/autoit] [autoit]

    $f_I = Sqrt((-2*log($f_QuadSum )) / $f_QuadSum )

    [/autoit] [autoit][/autoit] [autoit]

    Local $aZ[2] = [$f_Standardabweichung * $f_H1 * $f_I + $f_Mittelwert, $f_Standardabweichung * $f_H2 * $f_I + $f_Mittelwert]
    Return $aZ
    EndFunc

    [/autoit]

    Edit2:
    @ BastianFluegel
    Um eine ähnliche Verteilung wie bei dir zu erreichen sollte der Mittelwert 60 sein und die Standardabweichung rund 29.
    Nur die harten Grenzen von 0 und 120 musst du noch durch eine zusätzliche Abfrage implementieren.

    2 Mal editiert, zuletzt von AspirinJunkie (21. April 2011 um 17:32)

  • Danke schon mal für die Infos (auch wenn ich nicht mit allem etwas anfangen kann)

    Um nochmal auf die Frage was genau gemeint ist einzugehen:

    - ja, ich will eine Normalverteilung erreichen
    - es soll ein Wert ausgegeben Werden der im Bereich der Abweichung liegt,
    allerdings soll der Mittelwert wesentlich häufiger vorkommen als Werte in der Abweichung

    Hat da jemand eine Idee wie man das ganze in einem Script umsetzt, weil mit den Formeln auf Wikipedia komm ich überhaupt nicht klar bzw. ich weis beim besten Willen nicht wie man sie umsetzen soll.

    Wäre dankbar wenn mir jemand eine Lösung für mein Problem geben kann (am besten eine die mit Gleitkommazahlen arbeitet)

    Danke

  • Hab ich doch schon? - ein Post höher...

    Ich check das zwar nicht, aber ich werde es versuchen zu kapieren wenn ich es ein 3tes mal anschaue
    Danke jedenfalls für den Post.

  • Du wolltest doch ein Skript welches dir normalverteilte Zufallsvariablen ausspuckt?
    Wenn du das Skript, was in meinem Post in dem Spoiler versteckt ist, einfach ausführst schmeißt er dir 200 normalverteilte Zufallsvariablen mit dem Mittelwert 4 und der Standardabweichung 2 in die Scite4AutoIt-Konsole.
    Wenn du damit nicht klar kommst oder doch was anderes willst beschreib es einfach mal und ich kann dir das sicherlich noch weiter anpassen.