Es geht um eine große Aufgabe, die ich lösen möchte aber beim Anfang ein Problem habe und zwar lautet die Aufgabe:
Schreiben Sie in Python eine Methode X, welche zufällig reelle Zahlen (floats) zwischen 5 und 8 aus gibt, sodass die Wahrscheinlichkeit für eine Zahl zwischen 5 und 6 doppelt so groß ist wie zwischen 6 und 7, analog die Wahrscheinlichkeit zwischen 6 und 7 doppelt so groß wie zwischen 7 und 8 ist. Innerhalb der Intervalle [5,6),[6,7) und [7,8) sollen die Zahlen gleichverteilt sein.
Tipp: implementieren Sie zunächst eine Zufallsvariable Y mit Werten in {5,6,7} und einer geeigneten Verteilung, schreiben Sie dann X=Y+.....
Mein Problem ist erst einmal wie X = Y + .. gemeint ist genau ?
Statistik Aufgabe Python
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
ich würde meinen ansatz posten aber leider wurde mein beitrag nicht freigeschaltet
Es ist Ostersonntag, und die Sonne scheint. Ich hoffe mein Drang zur Frischluft hat dir nicht allzuviel Unbequemlichkeit zugemutet.MathGenie123 hat geschrieben: Montag 18. April 2022, 13:56 ich würde meinen ansatz posten aber leider wurde mein beitrag nicht freigeschaltet
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
hahaha der war gut ja okay, melde mich morgen nochmal
, aber ich würde gerne wissen wie man bei schnellantworten code postet ?

- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__: In welcher Zeitzone bist Du gerade? Bei mir ist schon Montag. Aber das mit der Sonne stimmt. 
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Ich meinte auch Montag.
@MathGenie123: du kannst die Code Tags auch einfach von Hand eingeben.
Und zu deiner Aufgabe: wenn du eine Verteilung für Y hast, musst du einfach nur die standardmäßige Gleichverteilung von 0..1 der random.random funktion dazuaddieren.
@MathGenie123: du kannst die Code Tags auch einfach von Hand eingeben.
Und zu deiner Aufgabe: wenn du eine Verteilung für Y hast, musst du einfach nur die standardmäßige Gleichverteilung von 0..1 der random.random funktion dazuaddieren.
Hallo @MathGenie123,
die Aufgabe ist eigentlich ziemlich klein. Nachdem @deets den zweiten Teil erklärt hat. Hier eine Idee zum ersten Teil. Bei der Gleichverteilung von einem Würfel mit sieben Seiten ist die Wahrscheinlichkeit, eine von zwei bestimmte Zahlen zu erhalten, doppelt so gross wie die Wahrscheinlichkeit, eine bestimmte Zahl zu erhalten. Ebenso ist die Wahrscheinlichkeit, eine von vier bestimmten Zahlen zu erhalten, doppelt so gross wie die Wahrscheinlichkeit, eine von zwei bestimmten Zahlen zu erhalten. Also kannst du die Wahrscheinlichkeitsverteilung mit der Gleichverteilung durch Zuordnung der Zahlen simulieren.
Beispielausgabe:
die Aufgabe ist eigentlich ziemlich klein. Nachdem @deets den zweiten Teil erklärt hat. Hier eine Idee zum ersten Teil. Bei der Gleichverteilung von einem Würfel mit sieben Seiten ist die Wahrscheinlichkeit, eine von zwei bestimmte Zahlen zu erhalten, doppelt so gross wie die Wahrscheinlichkeit, eine bestimmte Zahl zu erhalten. Ebenso ist die Wahrscheinlichkeit, eine von vier bestimmten Zahlen zu erhalten, doppelt so gross wie die Wahrscheinlichkeit, eine von zwei bestimmten Zahlen zu erhalten. Also kannst du die Wahrscheinlichkeitsverteilung mit der Gleichverteilung durch Zuordnung der Zahlen simulieren.
Code: Alles auswählen
from random import randint, random
def y():
random_value = randint(1,7)
if random_value == 1:
return 5
if random_value == 2 or random_value == 3:
return 6
return 7 # random_value in [4,5,6,7]
def x():
return y() + random()
if __name__ == '__main__':
[print(x()) for _ in range(0,10)]
Code: Alles auswählen
7.011883602433043
6.913770049751413
7.0054181930861175
5.035501614027626
6.500347804210461
7.549870524346216
5.248128535731663
6.57574929536881
7.063994066178143
6.5281501833064866
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@dirk009: Der Kommentar ist irreführend, oder übersehe ich da eine Möglichkeit, dass tatsächlich eine 4 von `y()` zurückgegeben werden kann. 
Mit der Liste mit den 10 `None`-Werten wird gar nichts gemacht. Warum wird die erstellt?
Mit der Liste mit den 10 `None`-Werten wird gar nichts gemacht. Warum wird die erstellt?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
Code: Alles auswählen
from random import random as r
from sample_of_x import sample
import math
import random
Y = {5,6,7}
def verteilung(x):
p = 1/7
if(x == 7):
p = p
if(x == 6):
p = 2*p
if(x==5):
p=4*p
return p
def X():
x= random.randrange(5, 7, 1) + r()
return x
Das random so zu r zu verkuerzen ist ungewoehnlich und erschwert das Verstaendnis. Es ist ein typischer Anfaengerfehler zu glauben, der getippte Buchstabe waere irgendwie teuer. Ist er nicht. Die Zeit, die beim verstehen des eigenen Codes irgendwann mal unnoetig bei drauf geht, hingegen schon. Und das uebt man schon von Anfang an, nicht erst, wenn's drauf ankommt - so wie alles andere auch.
Die Funktion verteilung ist falsch, aber auch nicht benutzt. Und dirk009 hat doch eine Funktion fuer y geschrieben. Was daran ist unklar?
Die Funktion verteilung ist falsch, aber auch nicht benutzt. Und dirk009 hat doch eine Funktion fuer y geschrieben. Was daran ist unklar?
@blackjack__blackjack__ hat geschrieben: Montag 18. April 2022, 20:59 @dirk009: Der Kommentar ist irreführend, oder übersehe ich da eine Möglichkeit, dass tatsächlich eine 4 von `y()` zurückgegeben werden kann.
Ich wollte nicht
Code: Alles auswählen
if random_value in [4,5,6,7]:
return 7
Ursprünglich wollte ich noch ein Histogramm plotten und habe eine Liste von Zufallswerten erzeugt. Dann war ich aber doch zu faul und habe einfach ein print eingebaut.__blackjack__ hat geschrieben: Montag 18. April 2022, 20:59 Mit der Liste mit den 10 `None`-Werten wird gar nichts gemacht. Warum wird die erstellt?
@MathGenie123
Nichts geht über einen Test. Ich habe folgendes zu deinem Code hinzugefügt:
Code: Alles auswählen
from collections import Counter
from math import trunc
if __name__ == '__main__':
zufallszahlen = []
intervalle = []
for _ in range(0, 1000):
x = X()
zufallszahlen.append(x)
intervalle.append(trunc(x))
counter = Counter(intervalle)
for key, value in counter.items():
print(f"{key}: {value}")
Folgende Ergebnisse werden bei drei Testläufen erzeugt:
5: 486
6: 514
5: 507
6: 493
5: 496
6: 504
Eine Zufallszahl der Form 7.xxx wird nicht erzeugt und das Verhältnis zwischen 5er und 6er Intervall ist 1:1. Es sollte aber 2:1 sein.
PS: Bei meiner Lösung muss man die Zuordnung invertieren (7 statt 5 und 5 statt 7), um an die von der Aufgabenstellung gewünschte Verhältnisse zu kommen.
Das random-Modul liefert alles, was für diese Aufgabe nötig ist. Mit random.choices kann aus einer Menge [5, 6, 7] ein Element mit einer bestimmten Gewichtung gezogen werden, und mit random.random erhält man eine gleichverteilte Zahle zwischen [0,1).
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
also ich habe alles generiert, ich habe tausend zufallswerte mit dieser bedingung, was ich nun wissen möchte ist wie man den erwartungswert dort berechnet ? es liegt ja eine Gleichverteilung vor zwischen den einzelnen Intervallen ? wie geht man da um ?
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
Code: Alles auswählen
from random import random as r
import math
import random
Y = {5,6,7}
def verteilung(x):
p = 1/7
if(x == 7):
p = p
if(x == 6):
p = 2*p
if(x==5):
p=4*p
return p
def X():
x= random.choices(population=[5, 6, 7], weights=[4/7, 2/7, 1/7], k=1)[0] + r()
return x
#generiere 1000 zufallswerte
random.seed(1)
stichprobe = []
for i in range(1,1001):
stichprobe.append(X())
Warum ist da denn immer noch diese ueberfluessige verteilung-Funktion drin? Und auch das Y ist doch ueberfluessig.
Was ist denn die Definition des Erwartungswertes? Wie wuerdest du den denn fuer diskrete Wuerfelwuerfe zB berechnen?
Was ist denn die Definition des Erwartungswertes? Wie wuerdest du den denn fuer diskrete Wuerfelwuerfe zB berechnen?
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
wäre gut wenn einer hilft ?
das ist mein ansatz für den ewert
das ist mein ansatz für den ewert
Code: Alles auswählen
erwartungswert = 0
for x in samp:
if(x < 6):
erwartungswert += x*(4/7)
if(6 <= x < 7):
erwartungswert += x*(2/7)
if(7 <= x < 8):
erwartungswert += x*(1/7)
erwartungswert
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
die definition ist ja im grundegenommen nichts weiteres als wahrscheinlichkeit * wert der zv und alles aufsummiert.
mein ansatz steht schon oben
mein ansatz steht schon oben
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Zur `verteilung()`-Funktion würde ich auch noch anmerken, dass Gleitkommazahlen nicht ganz ohne Stolperfallen sind, weil die nicht exakt sind/sein müssen, und das man so etwas besser mit ganzen Zahlen löst. Lesetipp: https://floating-point-gui.de/
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 43
- Registriert: Montag 18. April 2022, 13:13
die funktion verteilung ist nicht so releveant eig, es geht nur um den erwartungswert und außerdem habe ich die floor function in meiner implementierung nur habe es nicht hochgeladen