Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
Hallo Hans, Hallo Udo vielen Dank für eure Tipps. @ Hans: Ich hab den ersten Befehl so umgeschrieben wie du es gesagt hast. Es klappt jetzt auch :-) Also kann ich jetzt sagen, wie viele 0 und 1 ich im Los (80 Zufallszahlen) habe, um zu wissen ob das Los gut oder schlecht ist. Und wie viele 0 und 1 ich in der Stichprobe n habe um zu sagen, ob ich annehme oder zurückweise. Da ich die Werte mit den theoretischen Ergebnissen vergleichen soll, muss ich das Los nicht nur 1 mal erzeugen sondern z.B. 10.000 mal. Das Vorgehen wird sich ja nicht ändern sondern ich müsste in der Schleife sagen, mache alles wie vorher nur 10.000 mal und berechne darüber die gemittelten Werte. Sprich alle Ergebnisse von den 10.000 Simulationsdurchgängen durch die Anzahl der Simulationsschritte (10.000) teilen? Ich glaube, dann könnte ich die Wahrscheinlichkeit die da raus kommt mit den theoretischen Wahrscheinlichkeiten vergleichen. Genau das selbe, kann ich dann mit der Stichprobe machen? Ich habe es mal mit deinem Modul ausprobiert. Das Modul, welches du angegeben hast erzeugt, zufällig 20 Stichproben und zählt wie viele 1 vorgekommen sind. Ich habe /n ergänzt damit ich die Wahrscheinlichkeit erhalte. fc1:=Module[{}, los1=If[#<p,0,1]&/@los; stichprobe1=los1[[#]]&/@RandomInteger[{1,80},n];Total[stichprobe1]/n ] fc1tab=Table[fc1,{AnzSim}] Die Ergebnisse habe ich mit folgendem Befehl zusammengezählt: Gesamtfc1=Total[fc1tab] und am Ende durch die Anzahl der Simulationsschritte geteilt: pAnnahme=Gesamtfc1/AnzSim//N Als Ergebnis habe ich 0.9538461538461539` erhalten. Das Ergebnis für die angenommen Lose kommt mir im Vergleich zu den theoretischen Werten (0,720625) zu groß vor. Das die Werte nicht 1:1 übereinstimmen sollen, ist mir schon klar, da es sich hier um simulierte Werte handelt, kann das schon ein wenig abweichen. Dann wollte ich dein Modul so umbauen, dass er die guten Lose aus dem Los (80 Zz) a´10.000 Simulationsdurchläufe (also auch z.B. 10.000 Wahrscheinlichkeiten ausgibt und wie oben zusammenzählt und durch die Anzahl der Simulationsschritte teilt, aber ich erhalte nicht die gewünschten Ergebnisse sondern nur fc2 als Ergebnis. Ich befürchte ich habe irgendwo einen Fehler. Ich sende euch mal den Code zu sowie die Ergebnisse der theoretischen Ergebnisse. Vill. weiß einer von euch, ob der Ansatz so richtig ist? Liebe Grüße Jeany From: h.dolhaine@XXXXXXX.de To: ivi-jeany@XXXXXXX.de Subject: AW: AW: [Dmug] Qualitätsmanagement: theoretische Ergebnisse mit simulierten vergleichen Date: Mon, 16 Mar 2015 22:32:33 +0100 Guten Abend Jeany, If [ # < p , 0, 1 ] & ist eine Funktion, kenntlich gemacht durch das Zeichen &, und die Variable der Funktion heißt #. Probier mal If [ # < .4 , 0, 1 ] &[ x ] und setze für x per Hand verschiedene Zahlen ein, größer und kleiner als 0.4. Das / @ heißt, dass die Funktion auf alle Elemente der folgenden Liste angewendet wird. Probier f[#]&/@{a,b,c}. Jetzt habe ich geschlampt: los=If[#<p,0,1]&/@RandomReal[{0,1},LosG] erzeugt bei jedem Aufruf neue 80 Zufallszahlen, auf die dann das If angewendet wird. Um das Resultat mit dem ersten los vergleichbar zu machen wäre los=RandomReal[{0,1},LosG] los=If[#<p,0,1]&/@los] zu schreiben. Der erste Befehl erzeugt die Zufallszahlen, und der zweite Befehl operiert dann genau auf den eben erzeugten Zahlen. Puristen würden ggf. los retten bzw. nicht überschreiben und los=RandomReal[{0,1},LosG] los1=If[#<p,0,1]&/@los] nehmen. Dann müssen natürlich alle weiteren Befehle unten auch auf los1 angewendet werden. Also: ja, es werden unter 2) neue Zufallszahlen erzeugt. Und: genau, bei den Stichproben habe ich eben aus Gründen der Vergleichbarkeit die Zufallszahlen genau einmal erzeugt. a[[ i ]] ist das i-te Element der Liste a. Und Du ahnst es schon, los[[#]]& ist eine Funktion, die das #-te Element von los zurückgibt, wenn man für # eine Zahl einsetzt. Der Module ist ein Konstrukt, mit dem man eine kompliziertere Funktionen schreiben kann. Die besteht hier aus den drei Befehlen von oben. Noch Fragen? Einen schönen Abend HD Von: Ivana Pejic [mailto:ivi-jeany@XXXXXXX.de] Gesendet: Montag, 16. März 2015 21:21 An: h.dolhaine@XXXXXXX.de; 'Udo und Susanne Krause'; demug@XXXXXXX.ch Betreff: RE: AW: [Dmug] Qualitätsmanagement: theoretische Ergebnisse mit simulierten vergleichen Hallo zusammen, Danke für Eure Hilfe. Aber ich verstehe einige Sachen in dem Code leider nicht Den ersten Befehl habe ich verstanden. 1) los=RandomReal[{0,1},LosG] Aber schon beim zweiten habe ich so meine Schwierigkeiten. 2) los=If[#<p,0,1]&/@RandomReal[{0,1},LosG] Was genau bedeutet das Zeichen #? In der Hilfe steht das erste Argument? Ist mit dem ersten Argument der hintere Teil "&/@..." gemeint? Ist das so eine übliche Schreibform? Habe ich nämlich vorher noch nie gesehen. Die nächste Frage, die sich mir stellt ist, ob die unter 1) erzeugten 80 Zz mit dem Befehl 2) unten übereinstimmen sollen? Sprich wenn oben z.B eine 0,002 herausgekommen ist, dann soll unter 2) eine 0 geliefert werden? Ich habe beide Ergebnisse Outputs ( 1) und 2)) verglichen und eben nicht die erwarteten Ergebnisse unter 2)erhalten? Somit meine Frage, werden unter 2) neue ZV erzeugt? Dann ist es klar, dass die Ergebnisse nicht mit 1) übereinstimmen können. Hätte jetzt aber gedacht dass das Zeichen # sich auf den letzten Output bezieht? Bei folgenden Befehlen sieht es dann aber anders aus: 3)stichprobe=RandomInteger[{1,80},n] 4) stichprobe1=los[[#]]&/@Stichprobe Befehl 4) bezieht sich dann allerdings doch auf 3). Z.B. Ergebnisse unter los (0,1,1,0...) Stichprobe (1,2,3) liefert Stichporbe1 (0,1,1) Also genau den Output der zu den anderen Outputs passt. Bevor ich zur Schleife noch Fragen stelle, wollte ich erst den ersten Teil verstehen. Danke und LG Jeany > From: h.dolhaine@XXXXXXX.de > To: su.krause@XXXXXXX.ch; ivi-jeany@XXXXXXX.de; demug@XXXXXXX.ch > Subject: AW: [Dmug] Qualitätsmanagement: theoretische Ergebnisse mit simulierten vergleichen > Date: Sun, 15 Mar 2015 20:07:40 +0100 > > Liebe Jeany, > > ganz kompakt geht es aber auch so (RandomChoice ist nicht ganz das, was > gewünscht ist...). > > c1 = Total [ RandomSample [ If [ # < .08, 0, 1] & /@ RandomReal [ {0, 1}, > 80], 13 ] ] > > Beste Grüße > Hans >
<<attachment: Simulation_1.nb>>
<<attachment: Szenario_1_beherrscht.nb>>
_______________________________________________ DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch http://www.mathematica.ch/mailman/listinfo/demug Archiv: http://www.mathematica.ch/archiv.html
Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
DMUG-Archiv, http://www.mathematica.ch/archiv.html