Matroids Matheplanet Forum Index
Forumbereich moderiert von: Kleine_Meerjungfrau Monkfish epsilonkugel
Mathematik » Stochastik und Statistik » Urnen hintereinander zufällig füllen
Druckversion
Druckversion
Antworten
Antworten
Kein bestimmter Bereich Urnen hintereinander zufällig füllen
Bernhard Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 01.10.2005, Mitteilungen: 6337, aus: Merzhausen, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Themenstart: 2012-01-23

Hallo zusammen!

Mir gehen die ganze Zeit schon einige Fragen zu folgendem Experiment durch den Kopf:

fed-Code einblenden

fed-Code einblenden

Zu 1. habe ich keinen Ansatz,
Zu 2. ist mir aufgefallen, daß es denkbar wäre, daß die Summe in jedem folgenden Becher größer ist als im vorhergehenden, daß aber auch der umgekehrte Fall möglich ist, wenn man die Kugeln richtig auswählt. Wird das ganze Experiment also beliebig oft wiederholt, müßten auch diese Fälle eintreten.
Andererseits bedeutet das: Für eine bestimmte Konstellation muß vorher eine bestimmte andere eingetreten sein.
Zu 3. könnte ich mir gut vorstellen, daß hier nach ein paar weiteren Zügen eine Art von Dominoeffekt eintritt.
Zu 4 habe ich noch gar keine Idee.

Kann mir da jemand weiterhelfen?

Viele Grüße, Bernhard



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bozzo Senior Letzter Besuch: vor mehr als 3 Monaten
Mitglied seit: 11.04.2011, Mitteilungen: 2079, aus: Franken
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.1, eingetragen 2012-01-24

Zu 1 fällt mir spontan folgender Ansatz ein:  Betrachte die Kugel mit der Nummer m=10z-t, t<10. Im m. Zug landet sie in Becher 1.  Die folgenden t Zügen wandert sie nun in jedem Zug mit W'kt 1/10 in den nächsten Becher, maximal jedoch in den Becher mit Nummer z.

Diese Wanderung kann man durch eine Markov-Kette auf den Zuständen 1,2,...,z beschreiben.  Sie startet in 1 und geht t Schritte.  Die Endverteilung ist die Anfangsverteilung für die nächste Kette.  Die nächste Kette hat einen Zustand mehr und läuft 10 Schritte.  Der Vorgang wird Wiederholt, bis alle Kugeln verteilt sind.  Die Verteilung die man nach dem letzten Schritt erhält, ist die Verteilung der Kugel m in den n Bechern.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kitaktus Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 11.09.2008, Mitteilungen: 6613, aus: Niedersachsen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.2, eingetragen 2012-01-24

Hallo,

ich habe ein kleines Malab-Programm zur Simulation geschrieben. Die erwartete Bechersumme fällt mit n und steigt mit der Zahl der Kugeln.
Die Standardabweichung der Bechersumme steigt mit der Zahl der Kugeln, wobei sich der Anstieg immer weiter abflacht.
Betrachtet man die Standardabweichung der Bechersumme in Abhängigkeit von n, so ergibt sich ein unimodaler (eingipfliger) Verlauf. Betrachtet man nur nichtleere Becher, so variieren die Becher am Anfang und am Ende der Reihe (von Testlauf zu Testlauf) nicht so stark, wie die Becher in der Mitte.

Kitaktus
Matlab
N=100;Nlauf=1000;
 
B=zeros(N/10,N,Nlauf);
 
for lauf=1:Nlauf
    A=zeros(N/10,10);
    for k=1:N
        v_alt=k;
        for p=1:ceil(k/10)
            if 10*p<=k-1
                st=ceil(rand(1)*10);
                v_neu=A(p,st);
                A(p,st)=v_alt;
                v_alt=v_neu;
            else
                A(p,k-10*(p-1))=v_alt;
            end
        end
        B(:,k,lauf)=sum(A');
    end
end
 
m=mean(B,3);
s=std(B,[],3);
 
figure
mesh(m)
 
figure
mesh(s)



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bernhard Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 01.10.2005, Mitteilungen: 6337, aus: Merzhausen, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.3, vom Themenstarter, eingetragen 2012-01-24

Hallo Kitaktus!

Ich bin auch schon auf den Gedanken gekommen, daß eine Computersimulation hier ganz hilfreich sein könnte.
Ich habe kein Matlab bei mir drauf - nicht auf dem PC und nicht im Hirn. frown
Was muß ich mit Deinem Code jetzt machen?

Mich würde auch interessieren, ob es eine gewisse Regelmäßigkeit gibt, was den Größenvergleich der Summe in einem Becher mit dem nachfolgenden angeht. Wenn man z.B. alle 10 Züge (also immer wen ein neuer Becher voll ist) eine "Momentaufname" machen würde, ob sich da Abhängigkeiten ergeben (was ich oben "Dominoeffekt" genannt hatte).

Viele Grüße, Bernhard



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kitaktus Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 11.09.2008, Mitteilungen: 6613, aus: Niedersachsen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.4, eingetragen 2012-01-25

Hallo,

es hat den Anschein, dass nach einer gewissen Einschwingphase die Abstände der Erwartungswerte zwischen benachbarten Bechern relativ konstant sind. Beim groben Draufschauen ist jedenfalls keine deutliche Abhängigkeit von der Nummer des Beschers und der Zahl der Schritte erkennbar.

Ich könnte mir vorstellen, dass man bei einer stetigen Variante des Problems den Erwartungswert ganz gut charakterisieren, vielleicht sogar explizit angeben kann.

Kitaktus



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 04.03.2003, Mitteilungen: 27586, aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.5, eingetragen 2012-01-25

Hi Bernhard

Ist das nur eine „verrückte Idee“ oder steckt da ein echtes Problem dahinter?

Ich frage, um abzuschätzen, ob es lohnt, dafür eine Simulation zu schreiben, die du dann selbst (mit wählbaren Parametern) laufen lassen kannst.

Gruß vom ¼



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bozzo Senior Letzter Besuch: vor mehr als 3 Monaten
Mitglied seit: 11.04.2011, Mitteilungen: 2079, aus: Franken
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.6, eingetragen 2012-01-25

Du kannst mit folgendem "Trick" die W'kt deiner 1. Frage berechnen:

Du betrachtest die Kugel mit der Nummer m=10z-t (t<10) und interessierst dich zunächst für den Zustand nach 10z Zügen.  Die betrachtete Kugel wurde im m. Zug eingeführt, und hat danach noch t mal die Chance zu "wandern".  Sie kann dabei maximal bis in die Urne mit der Nummer z gelangen.  Ist sie j mal gewandert, ist sie in der Urne j+1 gelandet.  Die Anzahl der Wanderungen, die sie gerne machen möchte, ist Binomialverteilt mit Parametern t und 1/10.  Möchte sie dabei zu weit wandern, musst du sie am Ende wieder zurück in Urne z schieben.  So bekommst du die ihre Verteilung nach 10z Schritten.

Nun gehst du analog immer in 10er-Schritten vorwärts.  Du lässt die Kugel 10 mal Binomialverteilt mit Parameter 1/10 wandern, und schiebst sie danach in die letzte Urne zurück, wenn sie zuweit wandern wollte.  Bist du schließlich im 10n. Schritt angelangt, hast du die Verteilung der Kugel.

Dieses Verfahren sollte sich relativ einfach in einen Algorithmus umsetzen lassen, der einem schließlich ausgibt, mit welcher W'kt am Ende welche Kugel in welcher Urne gelandet ist.  {m∈Bk} ist das Ereignis, dass Kugel m in Urne k gelandet ist.  Dann ist Sk = ∑j j 1{j∈Bk} und damit E[Sk] = ∑j j P(j∈Bk) wobei 1{...} die Indikatorfunktion ist.  Diese Summe lässt sich nun mit dem Ergebnis von oben ganz leicht ausrechnen.

Für die Varianz braucht man auch noch die W'ktn, dass zwei bestimmte Kugeln in derselben Urne Bk gelandet sind.  Dazu muss man deren gemeinsamen Weg verfolgen und aufpassen, dass nicht beide Kugeln im selben Zug aus derselben Urne gleichzeitig rauswandern können.  Anschaulich sollte die Situationen, in denen die beiden Kugeln das versuchen wollten relativ selten sein, so dass man wohl in ganz guter Näherung zunächst zumindest mal davon ausgehen darf, dass beide Kugeln unabhängig voneinander in der betrachteten Urne gelandet sind.


[Die Antwort wurde nach Beitrag No.4 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bernhard Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 01.10.2005, Mitteilungen: 6337, aus: Merzhausen, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.7, vom Themenstarter, eingetragen 2012-01-25

2012-01-25 02:56 - viertel in Beitrag No. 5 schreibt:
Hi Bernhard

Ist das nur eine „verrückte Idee“ oder steckt da ein echtes Problem dahinter?
Du scheinst mich zu kennen, so wie Du hier fragst… smile
Nur ich frage mich dann, wo denn der große Unterschied ist?
 
Die Idee - ob verrückt oder nicht - rumorte schon eine Weile bei mir im Kopf. Ich glaube zuerst war ich darauf gekommen, als ich mir vorgestellt hatte, daß beim Spielkartenverteilen in jeder Runde wieder gleichviele Karten beiseite gelegt würden. Dann hatte ich versucht, das etwas systematischer zu formulieren und anzugehen.

Ich frage, um abzuschätzen, ob es lohnt, dafür eine Simulation zu schreiben, die du dann selbst (mit wählbaren Parametern) laufen lassen kannst.
Schön wäre das auf jeden Fall. Aber ich habe gelesen, daß sich Matlab z.B. in Excel einbinden läßt.
Dort würde ich mir zutrauen, eine Tabelle zur Auswertung zu erstellen:
Zeilenweise untereinander die Becher, die jeweils ersten 10 Zellen für die enthaltenen Kugeln, die weiteren Spalten für Auswertungen der Inhalte wie Summe, Abweichungen, größere oder kleinere Summe wie der vorhergehende Becher, usw…
Dann könnte vielleicht jemand anderes den Code für den eigentlichen Algorithmus zum Füllen der Becher dazuschreiben.
Zum Verändern von Parametern wie z.B. der Kugelzahl oder zum Vergrößern der Anzahl der Züge, müßte man dann allerdings die Tabelle und den Code ggf. neu anpassen.
Ich würde allerdings vor Freitag nicht mehr dazu kommen, die Sache hätte also noch Zeit bis zum Wochenende.

Viele Grüße, Bernhard

 



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bernhard Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 01.10.2005, Mitteilungen: 6337, aus: Merzhausen, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.8, vom Themenstarter, eingetragen 2012-01-31

Hallo!

Ich habe jetzt mal was zur Auswertung in Excel entworfen (läßt sich bestimmt noch ausbauen*) und in mein Notizbuch hochgeladen.

hier

Kann mir jemand dafür den Code zum Auffüllen der Becher nach den oben von mir beschriebenen Regeln einfügen?

Viele Grüße, Bernhard

* Insbesondere könnte man die Sache auch graphisch veranschaulichen. Ich habe aber noch keine Möglichkeit gefunden, z.B. ein Balkendiagramm zu erstellen, daß in jeder Zeile einen Balken zu dessen Inhalt, Abweichungen vom Durchschnitt o.a. einfügt. frown



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bozzo Senior Letzter Besuch: vor mehr als 3 Monaten
Mitglied seit: 11.04.2011, Mitteilungen: 2079, aus: Franken
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.9, eingetragen 2012-02-03

Ich glaube nicht, dass Excel hier das geeignete Mittel ist.  Du kannst es wohl zur Auswertung heranziehen, aber ich sehe keine sinnvolle Chance den Endzustand der Urnen von Excel berechnen zu lassen.  Was für Alternativen stehen dir denn zur Verfügung?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 04.03.2003, Mitteilungen: 27586, aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.10, eingetragen 2012-02-03

Hi Bozzo
Hast du dir auch gerade wieder Gedanken dazu gemacht biggrin ?

@Bernhard
Ich hab jetzt mal das Basisprogramm, das n Kugeln auf m (dich interessiert ja m=10) Becher verteilt.
Das Ergebnis sind endlose Zahlenfriedhöfe confused
Aber bitteschön, wenn du da irgendwas rauslesen kannst, dann schicke ich es dir zu (EXE für Windows). Du kannst das Ergebnis in die Zwischenablage stellen und von dort ins Excel einfügen.
Das Füllen der Becher in Excel VBA zu schreiben war mir zu mühsam und wäre auch deutlich langsamer als C++.


[Die Antwort wurde nach Beitrag No.8 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bozzo Senior Letzter Besuch: vor mehr als 3 Monaten
Mitglied seit: 11.04.2011, Mitteilungen: 2079, aus: Franken
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.11, eingetragen 2012-02-03

Erwischt!  biggrin  

Ich hab auch grad ein kleines Matlab-Skript geschrieben:
Matlab
function u = urnen(m,n)
% m = maximale Anzahl an Kugeln in Urne
% n = Anzahl Urnen
% u = n x m Matrix die zurueckgegeben wird
%     in den Zeilen stehen jeweils die Urnen
 
ball = 1;                  % Zahl auf aktuellem Ball
for urne = 1:n             % alle Urnen
  for pos = 1:m            % aktuelle Position in Urne
    merke = pos;           % Position merken
    for jetzt = urne:-1:2  % Urnen rueckwaerts durchlaufen
      zufall = randi(m);   % welchen Ball aus vorheriger Urne nehmen?
      u(jetzt,merke) = u(jetzt-1,zufall); % in aktuelle Urne tun
      merke = zufall;      % position in vorheriger Urne speichern
    end
    u(1,merke) = ball;     % erste Urne mit aktuellem Ball auffuellen
    ball = ball+1;         % den naechsten Ball nehmen
  end
end
urnen.m

Aufruf mit z. B. 'urnen(10,5)'.

Weiß nicht, ob das jetzt noch interessant ist, aber da ich es nun schon einmal hab...

Stimmt, per VBA könnte man die Daten evtl. auch direkt in Excel erzeugen.  Ich vermute mal mein Matlab-Skript übersetzt sich ziemlich direkt dazu, wenn man statt u einfach die entsprechenden Felder in der Tabelle befüllt.  Da kann ich aber nicht besonders gut weiter helfen, da ich gar kein echtes MS Excel habe.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bozzo Senior Letzter Besuch: vor mehr als 3 Monaten
Mitglied seit: 11.04.2011, Mitteilungen: 2079, aus: Franken
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.12, eingetragen 2012-02-03

Nanu, jetzt hab ich grad mal hochgeblättert und gesehen, dass ich mit meinem Matlab-Code wohl was zu spät war.

Du kannst dir statt Matlab das kostenlose Octave besorgen.  Die beiden Programme hier im Thread sollten da ohne Änderungen laufen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bozzo Senior Letzter Besuch: vor mehr als 3 Monaten
Mitglied seit: 11.04.2011, Mitteilungen: 2079, aus: Franken
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.13, eingetragen 2012-02-07

Ich habe mir gerade mal etwas Excel-VBA angeguckt, und ich bin der Meinung, folgendes Skript könnte deine Urnen füllen:
VB
Sub FuelleUrnen(m As Integer,n As Integer)
  ' m : Groesse Urnen
  ' n : Anzahl Urnen
  Dim a,i,j,k,r,s As Integer
  Randomize
 
  a = 1
  For i = 1 To n
    For j = 1 To m
      s = j
      For k = i To 2 Step -1
        r = Int(Rnd * m) + 1
        Cells(k,s).Value = Cells(k-1,r).Value
        s = r
      Next k
      Cells(1,s).Value = a
      a = a + 1
    Next j
  Next i
End Sub

Sicher bin ich da allerdings nicht.  Ich kann es nicht ausprobieren.  Ich weiß nicht einmal, wo du es eingeben musst, und wie man es aufruft.

Es ist aber denke ich ein guter Startpunkt um weiter zu kommen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bernhard hat die Antworten auf ihre/seine Frage gesehen.
Bernhard wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]