breakplaining: Monte-Carlo //2045

Habe gestern völlig den e-Tag vergessen. Dann gibt’s den bereits vor längerer Zeit begonnenen, aber nicht richtig vollendeten Eintrag dazu halt erst heute.

Das Monte-Carlo-Verfahren beruht auf dem statistischen Verhalten von Zufallszahlen. Computer generieren ja keine echten Zufallszahlen, sondern nur Pseudozufallszahlen. Gute Zufallszahlen zu erhalten ist, ein Thema für sich, das jetzt hier zu weit führt.
Mit Monte-Carlo-Simulationen lassen sich beispielsweise Integrale berechnen. Das hatte ich irgendwo schon mal erwähnt, mag aber jetzt nicht den passenden Link suchen. Insbesondere bei mehrdimensionalen Integralen mit komplizierten Randbedingungen gibt es manchmal keine andere erfolgversprechende Möglichkeit.

Bevor ich jetzt viel rein abstrakt erkläre, illustriere ich das Verfahren lieber dadurch, dass ich ein Beispiel beschreibe.

Die Fläche zwischen der Funktion y(x) = e^x, den Koordinatenachsen und der Gerade x = 1 beträgt (wie jeder nach einfacher Integration leicht selbst berechnen kann) e – 1.
In unserem Beispiel lassen wir den Computer jetzt Zufallszahlen zwischen 0 und 1 erzeugen, und berechnen jeweils die Exponentialfunktion davon. Diese Werte werden aufsummiert und durch die Anzahl der Werte dividiert. (Eigenlich auch noch multipliziert mit der Differenz von Abszissenend- und -anfangswert, aber die ist hier gleich 1, also können wir sie weglassen.)

In der „Mehr“-Section liste ich den Beginn eines Durchlaufs auf.
Von links nach rechts sind die einzelnen Spalten die Anzahl der bisherigen Versuche, die Zufallszahl, der daraus berechnete Funktionswert, die Summe aller Funktionswerte, die Summe dividiert durch die Anzahl, und schließlich diese Summe plus 1, was einen Näherungswert für e ergibt.
Eigentlich wollte ich noch mehrere Durchläufe mit jeweils mindestens 100 Samples graphisch darstellen, um zu zeigen, wie nach anfänglichem Rauschen das Ergebnis immer besser den Zahlenwert für e approximiert, an den es für sehr große Zahlen schließlich konvergiert. Hab dafür aber keine Zeit mehr gefunden. Bei großem (!) Interesse liefere ich es irgendwann nach.

Und klar – um e zu berechnen ist dies eine der ineffizientesten Methoden (dagegen konvergiert z.B. die Reihe über 1/k! sehr gut).
Es sollte ja auch nur ein Beispiel sein – anlässlich des e-Tags.

n x y sum(y) sum(y)/n sum(y)/n +1
1 0.388 1.478 1.478 1.478 2.478
2 0.428 1.528 2.998 1.498 2.498
3 0.788 2.198 5.188 1.738 2.738
4 0.988 2.668 7.848 1.968 2.968
5 0.638 1.888 9.728 1.948 2.948
6 0.028 1.028 10.748 1.798 2.798
7 0.438 1.538 12.278 1.758 2.758
8 0.858 2.348 14.618 1.838 2.838
9 0.418 1.508 16.118 1.798 2.798
10 0.688 1.978 18.088 1.818 2.818
11 0.108 1.108 19.198 1.748 2.748
12 0.688 1.978 21.158 1.768 2.768

 

Über Anne Nühm (breakpoint)

Die Programmierschlampe.
Dieser Beitrag wurde unter Uncategorized abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

5 Antworten zu breakplaining: Monte-Carlo //2045

  1. Talianna schreibt:

    Ich persönlich finde die Berechnung von π auf numerische Weise, also mit einem Monte-Carlo, fast noch anschaulicher – Zufällige Koordinaten x, y jeweils aus [0,1]. Dann zählt man alle x•x+y•y <= 1 und dividiert die Anzahl der Punkte, die die Bedingung erfüllen, durch die Gesamtzahl der Punkte, ergibt π/4. Das finde ich sehr anschaulich … und die Problematik, π zu bestimmen, kennen viele Leute zumindest als – nun ja – wichtiges Problem.

    Ich finde es klasse, dass Du solche Themen aufbringst!

    Gefällt 1 Person

  2. Pingback: Zum #PiTag: Ein Weg zu pi //2074 | breakpoint

  3. Pingback: 29 h..ust* //2112 | breakpoint

  4. Pingback: Rumgetwittert //2242 | breakpoint

Hinterlasse eine Antwort zu Anne Nühm (breakpoint) Antwort abbrechen