Supportnet / Forum / Tabellenkalkulation
Zufallszahlen
Frage
Hallo Zusammen,
wie kann ich Zufallszahlen also
(int)(Random*10+1) so abändern, dass z.b. die 4 oder 5 mit einer höheren Wahrscheinlichkeit gezogen werden?!
Gruß js
Antwort 1 von nighty
hi all :)
ein guter ansatz :)
gruss nighty
lege z.b. 2 * die 5 in das array mit entsprechender abfrage und anschliessender 2 fach verkuerzung des array und schon ergibt sich eine höhere wahrscheinlichkeit einer gezogen 5
Option Explicit
Sub makro01()
Randomize Timer
ReDim zuzahl(7) As Integer
Dim zahl(7) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 7
For allezahlen = 1 To 7
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 4
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(ziehung, 1) = zahl(ziehung)
Next ziehung
End Sub
ein guter ansatz :)
gruss nighty
lege z.b. 2 * die 5 in das array mit entsprechender abfrage und anschliessender 2 fach verkuerzung des array und schon ergibt sich eine höhere wahrscheinlichkeit einer gezogen 5
Option Explicit
Sub makro01()
Randomize Timer
ReDim zuzahl(7) As Integer
Dim zahl(7) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 7
For allezahlen = 1 To 7
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 4
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(ziehung, 1) = zahl(ziehung)
Next ziehung
End Sub
Antwort 2 von Primut
@ nighty,
ok, wie immer der Schnellste, ;-))
hab´s mir aber nicht nehmen lassen, dein Makro auchmal auszuprobieren:
Du hast ja von 1 - 7 4 zahlen gezogen, mit dem Ergebnis bei mir bei 100 unabhängigen Ziehungen:
Die 4 wurde 10,25% öfter als der Durchschnitt gezogen,
Die 7 wurde 9% weniger als der Durchschnitt gezogen,
die 5 lag mit 5,5% unter derDurchschittsziehung noch im Toleranzbereich, hatte aber keine höhere Wahrscheinlichkeit!
Sicherlich sind 100 Ziehungen nicht unbedingt eine ausreichend große Marge für statistisch relevante Aussagen, aber eine Tendenz liefern sie doch schon.
Bei dir hat die 4 (statt wie angekündigt die 5) eine etwas höhere Wahrscheinlichkeit, vieleicht ein kleiner Routine-Fehler... ;-))
@js
was willst du genau ziehen? Wieviel Zahlen gleichzeitig aus welchem Auswahlbereich, mit oder ohne Wiederholung und welche Zahl mit welcher Wahrscheinlichkeit?
Und das alles als Formeln oder mit VBA?
Gruß
ok, wie immer der Schnellste, ;-))
hab´s mir aber nicht nehmen lassen, dein Makro auchmal auszuprobieren:
Du hast ja von 1 - 7 4 zahlen gezogen, mit dem Ergebnis bei mir bei 100 unabhängigen Ziehungen:
Die 4 wurde 10,25% öfter als der Durchschnitt gezogen,
Die 7 wurde 9% weniger als der Durchschnitt gezogen,
die 5 lag mit 5,5% unter derDurchschittsziehung noch im Toleranzbereich, hatte aber keine höhere Wahrscheinlichkeit!
Sicherlich sind 100 Ziehungen nicht unbedingt eine ausreichend große Marge für statistisch relevante Aussagen, aber eine Tendenz liefern sie doch schon.
Bei dir hat die 4 (statt wie angekündigt die 5) eine etwas höhere Wahrscheinlichkeit, vieleicht ein kleiner Routine-Fehler... ;-))
@js
was willst du genau ziehen? Wieviel Zahlen gleichzeitig aus welchem Auswahlbereich, mit oder ohne Wiederholung und welche Zahl mit welcher Wahrscheinlichkeit?
Und das alles als Formeln oder mit VBA?
Gruß
- Primut
Antwort 3 von nighty
hi primut :)
sollte nur ein ansatz sein :)
und muss natuerlich noch umgeesetzt werden
wie oben schon kurz beschrieben war
sollte folgendermassen aufgebaut sein
zahlen im array als beispiel
1,2,3,4,5,5,6,7
da die 5 doppelt ist ,sollte auch eine höhere wahrscheinlichkeit vorhanden sein
dementsprechend auf index 5 und 6 zu reagieren waere mit 2 facher arraykuerzung
gruss nighty
sollte nur ein ansatz sein :)
und muss natuerlich noch umgeesetzt werden
wie oben schon kurz beschrieben war
sollte folgendermassen aufgebaut sein
zahlen im array als beispiel
1,2,3,4,5,5,6,7
da die 5 doppelt ist ,sollte auch eine höhere wahrscheinlichkeit vorhanden sein
dementsprechend auf index 5 und 6 zu reagieren waere mit 2 facher arraykuerzung
gruss nighty
Antwort 4 von Primut
Hi nighty,
ja klar, ich war auch zu schnell, ;-))
(und 100 unabhängige Ziehungen sind nicht ansatzweise ausreichend, sorry)
und hab deinen Ansatz jetzt nochmal entsprechend verändert:
Option Explicit
Sub makro01()
Randomize Timer
ReDim zuzahl(9) As Integer
Dim zahl(7) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 9
For allezahlen = 1 To 7
zuzahl(allezahlen) = allezahlen
Next allezahlen
zuzahl(allezahlen + 1) = 5
For ziehung = 1 To 4
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(1, ziehung) = zahl(ziehung)
Next ziehung
End Sub
somit haben alle Zahlen eine Wahrscheinlichkeit von 1/8 = 0,125 außer die Zahl 5 mit der Wahrscheinlichkeit 2/8 = 0,25
Gruß
ja klar, ich war auch zu schnell, ;-))
(und 100 unabhängige Ziehungen sind nicht ansatzweise ausreichend, sorry)
und hab deinen Ansatz jetzt nochmal entsprechend verändert:
Option Explicit
Sub makro01()
Randomize Timer
ReDim zuzahl(9) As Integer
Dim zahl(7) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 9
For allezahlen = 1 To 7
zuzahl(allezahlen) = allezahlen
Next allezahlen
zuzahl(allezahlen + 1) = 5
For ziehung = 1 To 4
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(1, ziehung) = zahl(ziehung)
Next ziehung
End Sub
somit haben alle Zahlen eine Wahrscheinlichkeit von 1/8 = 0,125 außer die Zahl 5 mit der Wahrscheinlichkeit 2/8 = 0,25
Gruß
- Primut

