matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenStochastikpoissonv. in warteschlangensys
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "Stochastik" - poissonv. in warteschlangensys
poissonv. in warteschlangensys < Stochastik < Oberstufe < Schule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Stochastik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

poissonv. in warteschlangensys: Frage
Status: (Frage) beantwortet Status 
Datum: 21:21 Do 26.05.2005
Autor: aspaceintime

hallo!

ich muss für die schule ein stabiles warteschlangensystem am computer simulieren (sprich das ganze in c# programmieren)

in einem stabilen warteschlangensystem sind die zeiten zwischen zwei ereignissen (z.b. ein kunde kommt an) poissonverteilt.

nimmt man einen mittelwert von 5min zwischen zwei ereignissen an, dann soll dieser wert poissonverteilt werden und sich bei nur lang genug ausgeführter simulation an 5 annähern.

mein problem ist:
die poisonverteilung liefert nur die wahrscheinlichkeit für das eintreten von x ereignissen in einem bestimmten zeitraum. (z.b. bei P(5, my=5) = 0,17)

wie kann ich aus diesen wahrscheinlichkeiten auf eine variation des mittelwertes schließen? ich brauche eine funktion, die diesen mittelwert nach poisson streut (also manchmal soll zwischen zwei kunden 2min, manchmal 9min, usw. vergehen, insgesamt soll sich der mittelwert 5 annähern).

auch meine mathelehrer und der lehrer der mir die aufgabenstellung gegeben hat, wissen nicht, wie dieses problem gelöst werden kann.

bitte um hilfe. danke.

alex

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
poissonv. in warteschlangensys: Antwort
Status: (Antwort) fertig Status 
Datum: 23:00 Do 26.05.2005
Autor: Stefan

Hallo!

Verstehe ich dein Problem richtig, dass du poissonverteilte Pseudozufallszahlen simulieren möchtest?

Das kannst du am einfachsten so machen:

Berechne zu deinem Parameter [mm] $\mu=5$ [/mm] die Verteilungsfunktion $F(x)$ für [mm] $x=0,1,\ldots,N$, [/mm] wobei $N$ eine willkürliche Abbruchgröße ist (wähle $N$ aber hinreichend groß!). Erzeuge dir nun gleichverteilte Pseudozufallszahlen aus $[0,1)$ (die findest du in jedem Programm, meistens durch einen Befehl der Form $rnd()$ oder so ähnlich).

Jetzt ziehst du eine Pseudozufallszahl $z [mm] \in [/mm] [0,1)$. Dann gibt es ein $x [mm] \in 0,1,\ldots,N$ [/mm] mit

$F(x) [mm] \le [/mm] z < F(x+1)$.

(Im Falle $z>F(N)$ setzt du: $z=N$.)

Dann ist $x$ die gesuchte Pseudozufallszahl.

Viele Grüße
Stefan


Bezug
                
Bezug
poissonv. in warteschlangensys: Rückfrage
Status: (Frage) beantwortet Status 
Datum: 13:35 Fr 27.05.2005
Autor: aspaceintime

hallo

danke für deinen vorschlag. ich habe ihn heute ausprogrammiert aber es gibt noch einige probleme.

der quellcode (ich weiß nicht, ob du ihn lesen kannst) sieht so aus und gleicht im prinzip deinem algorithmus.

public double distribPoisson(double my)
{
            const int N = 1000;
            
            double[] p1 = new double[N];
            
            for(int x=0;x<N;x++)
            {
             p1[x] = Poisson(my,x);
            }
            
            Random r = new Random();
            double z = r.NextDouble();
            
for(int x=0;x<N-1;x++)
{
if(p1[x] < z && z < p1[x+1])
return(x);
if(z>p1[N-1])
z = N;
}

return -1;
}

als ausgabe bei einem mittelwert von my = 20 und 100 wiederholten versuchen, bekomme ich folgendes ergebnis:

x =

236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
9
9
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
12
12
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
14
14
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
236
15
15
236
236
236
236
236
236

das ist doch etwas sonderbar.
1.  weil du schreibst x ist die gesuchte zufallszahl (x iteriert doch nur über die kurve -> es ist immer eine ganzzahl was für zufallszahlen komisch ist)?
2. wenn ich statt x F(x) nehme, kommt immer der selbe wert (1,81031887155028E-161), egal wieviele versuche ich mit gleichem my mache.
3. kommt sehr oft die selbe zahl und das ist leider unrealistisch...

vielleicht könntest du mir nochmal helfen.
danke
alex

Bezug
                        
Bezug
poissonv. in warteschlangensys: Antwort
Status: (Antwort) fertig Status 
Datum: 14:05 Fr 27.05.2005
Autor: Stefan

Hallo!

Also, das Verfahren ist auf jeden Fall richtig; es hat bei mir auch schon so funktioniert. :-)

Die Tatsache, dass ganze Zahlen rauskommen, ist ja klar, da eine poissonverteilte Zufallvariable nun mal nur ganzzahlige Werte annimmt.

Warum man dir so seltsame Werte auftreten, weiß ich nicht, das muss am Programm liegen. Leider kenne ich mich aber mit C nicht so gut aus.

Kannst du mir mal den Sinn dieser zwei Zeilen erklären:

Random r = new Random();
double z = r.NextDouble();  ?

Was macht das "Random" da vor dem r? Und was soll die zweite Zeile?

Sorry, wenn meine Fragen naiv sind, aber wir müssen den Fehler ja schließlich finden. ;-)

Und bist du sicher, dass Poisson(my,x) den Wert der Verteilungsfunktion ausspruckt?

Viele Grüße
Stefan


Bezug
                        
Bezug
poissonv. in warteschlangensys: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:40 Fr 27.05.2005
Autor: Stefan

Hallo!

Ich habe dir hier mal einen Teil der C++-library rauskopiert, wo auch poisson-verteilte Zufallsvariable generiert werden. Ich sehe zwar gerade nicht, wo da der Unterschied zu meinem Vorgehen besteht

(es wird nur eleganter die Verteilungsfunktionsfunktion "in vitro" erzeugt, gemäß schematisch

[mm] $F(0)=e^{-\mu}$ [/mm]
$k(0)=1$
Für [mm] $i=0,1,\ldots$: [/mm]
$k(i+1)=k(i) [mm] \cdot \frac{\mu}{i+1}$ [/mm]
$F(i+1)=F(i) + k(i+1)$

oder so ähnlich... ;-)),

aber vielleicht kannst du es dir ja mal anschauen:

#include <stdlib.h>
#include <math.h>


#define RAND_UNIFORME (double)random()/(double)RAND_MAX

[...]

unsigned long random_poisson(double landa)
{
double p=exp(-landa);
double g=p;
double u=RAND_UNIFORME;
unsigned long k=0;
while (u>g)
    {
    p*=(landa/(double)(++k));
    g+=p;
    };
return k;
};

[...]

viele Grüße
Stefan

Bezug
                        
Bezug
poissonv. in warteschlangensys: glaub Fehler gefunden zu haben
Status: (Antwort) fertig Status 
Datum: 14:51 Fr 27.05.2005
Autor: Stefan

Hallo!

> Random r = new Random();

Schreibe hier mal statt: Random() hin: "Random()/RAND_MAX" (in der richtigen Syntax, also mit double oder was da sonst noch hinkommt).

Es kann sein, dass die Zufallszahlen nicht aus $[0,1)$ sind, jedenfalls wird das in dem anderen Programm auch erst gemacht, um uniform verteilte Zufallszahlen aus $[0,1)$ zu finden.

Und, war es das?

Viele Grüße
Stefan


Bezug
                                
Bezug
poissonv. in warteschlangensys: Antwort (Frage gelöst)
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:46 Fr 27.05.2005
Autor: aspaceintime

hallo.


der folgende quellcode scheint zu funktionieren (= dein c++ code auf c# adaptiert):

public double PoissonDistrib(double my)
{
            double p=Math.Pow(Math.E,-my);
            double g=p;
            double u=r.NextDouble();
            double k=0;
            while (u>g)
            {
                p*=my/++k;
                g+=p;
            }
            return k;
        }

arith. mittel aus 2000000 poissonverteilten zahlen entspricht ziemlich genau dem angegebenen mittelwert my.

die initialisierung mit RAND_MAX ist nur in c/c++ nötig. in den neueren sprachen braucht man das scheinbar nicht mehr.

danke vielmals für deine hilfe! ich war echt schon am verzweifeln, weil mir keiner meiner lehrer helfen konnte.

grüße, alex


Bezug
                                        
Bezug
poissonv. in warteschlangensys: Rückfrage
Status: (Frage) beantwortet Status 
Datum: 16:50 Fr 27.05.2005
Autor: Stefan

Hallo!

Weißt du denn jetzt, wo der Fehler in dem alten Programm lag?

Denn das würde mich ja jetzt schon interessieren... [haee]

Und es wäre auch relativ wichtig für mich zu wissen wo der Fehler liegt, weil ich es so (ähnlich) meine Schüler programmieren lassen würde (ich werde das bald mal anbieten, allerdings wohl "nur" mit matlab oder VBA (excel)), d.h. mit einer bereits implementierten (tabellierten) Verteilungsfunktion.

Aber schön, dass es geklappt hat!! [applaus]

Viele Grüße
Stefan

Bezug
                                                
Bezug
poissonv. in warteschlangensys: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:10 Fr 27.05.2005
Autor: aspaceintime

naja, ein problem war, das N (in deinem algorithmus) nur maximal 236 sein konnte, weil sonst die wahrscheinlichkeit in der poisson-wahrscheinlichkeitsvert. so klein wird (10^-160), dass sie nicht mehr berechenbar ist.

nachdem der jetzige algorithmus komplett auf die eigentliche poissonformel verzichtet, erübrigt sich dieser fehler.

nachdem das verfahren, wie du sagst, funktioniert, weiß ich sonst nicht, woran es gelegenhat...

ob es wirklich perfekt funktioniert, werden wir in ein paar stunden bis tagen sehen, weil ich es jetzt in mei simulationsprogramm einbauen muss. wenn sich dann die simulationen mit den berechnungen (little-formeln) decken (einigermaßen) dann würde ich sagen, es passt. ;)


Bezug
                                                        
Bezug
poissonv. in warteschlangensys: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:15 Fr 27.05.2005
Autor: Stefan

Hallo!

Ja, aber daran kann es nicht gelegen haben, weil so große Werte bei [mm] $\mu=20$ [/mm] eh nicht häufig vorkommen dürften. Könntest du trotzdem mal $N=200$ setzen oder so, und es nochmal versuchen?

Es wäre mir echt eine große Hilfe, wenn du den Fehler finden würdest.

Vielen Dank!

Viele Grüße
Stefan

Bezug
                                                
Bezug
poissonv. in warteschlangensys: selber gelöst
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:24 Fr 27.05.2005
Autor: Stefan

Hallo!

Okay, jetzt glaube ich es zu wissen. Wenn ich der Online-Hilfe von C++ glauben darf, dann ist Poisson() gar nicht die Verteilungsfunktion der Poissonverteilung (etwas Ähnliches hatte ich ja auch schon vermutet), sondern einfach der Wert der Poissonverteilung an dieser Stelle.

Na, dann war meine Idee doch richtig und du hast die falsche Funktion benutzt.

Da bin ich jetzt aber beruhigt... :-)

Viele Grüße
Stefan

Bezug
                                                        
Bezug
poissonv. in warteschlangensys: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:20 Fr 27.05.2005
Autor: aspaceintime

hm, was ist eigentlich der unterschied zw. der "normalen" poisson-funktion, der verteilungsfunktion, und dichtefunktion und was es da sonst noch alles gibt? ich war bis jetzt der meinung, das ist alles eine bezeichnung für ein und das selbe...

alex

Bezug
                                                                
Bezug
poissonv. in warteschlangensys: Antwort
Status: (Antwort) fertig Status 
Datum: 18:27 Fr 27.05.2005
Autor: Stefan

Hallo Alex!

Es gibt für die Poissonverteilung einmal die Wahrscheinlichkeitsfunktion

$f(k) = P(X=k)$  für [mm] $k=0,1,2,\ldots$ [/mm]

(die hast du (leider) mit Poisson() benutzt)

und dann die Verteilungsfunktion

$F(k) = P(X [mm] \le [/mm] k) = [mm] \sum\limits_{i=0}^k [/mm] f(i)$   für  [mm] $k=0,1,2,\ldots$ [/mm]

(die hättest du benutzen sollen).

Es wäre jetzt kein Problem das alte Programm so umzuschreiben, das es läuft. Aber da das neue es ja tut, scheint das für dich nicht nötig. Für mich ist es aber wichtig, weil meine Schüler (ab der 9. Klasse) die Poissonverteilung nicht kennen und ich deshalb auf die Verteilungsfunktion als "Black Box" zurückgreifen muss (und es daher so programmieren lassen werde wie in meinem Vorschlag, allerdings mit der Verteilungsfunktion).

Viele Grüße
Stefan

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Stochastik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]