www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
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.vorhilfe.de