| Autor |
Beitrag |
   
Nadine Unregistrierter Gast
| | Veröffentlicht am Montag, den 15. März, 2004 - 13:55: | |
Hi! Folgender Sachverhalt:
Per Zufallszahlengenerator werden Zahlenpaare erstellt, die Punkte im Koordinatensystem ergeben. Da bei einer großen Menge Zufallszahlen davon ausgegangen werden kann, dass diese Punkte gleichmäßig verteilt sind, gilt:
Dabei ist N1 die Anzahl der Punkte im Viertelkreis oder auf der Kreislinie und N2 die Anzahl aller Punkte.
Die Konstante ist der Anteil des Kreises am Quadrat. Mit vier multipliziert ergibt sie Pi. Ob ein Punkt innerhalb oder außerhalb des Kreises liegt, lässt sich mithilfe des Pythagoras überprüfen:
Damit P die oben genannten Bedingungen erfüllt, muss gelten:
Jedes Zufallszahlenpaar, das (I) erfüllt, erhöht N1 um 1. Je mehr Wertepaare überprüft werden, desto genauer ist der Näherungswert für Pi. Gut soweit... Um diese ganze Überprüfung zu automatisieren, kann man ein Programm schreiben. Mit Pascal sieht das dann z.B. so aus: Program pi_schaetzung_statistisch; uses crt; var k,m,n : longint; var x,y,A : real; Begin clrscr; randomize; writeln (' Wie viele Zufallswerte sollen in die Schaetzung von Pi miteinbezogen werden? '); readln (n); k:=0; for m:=1 to n do begin x:=random(100)/100; y:=random(100)/100; if sqr(x)+sqr(y)<=1 then k:=k+1; end; A:=4*k/n; write (' Als Schaetzwert fuer die Kreiszahl Pi ergab sich: '); writeln (A:0:5); readln; End. Meine Probleme sind dabei: Sobald man eine zu große Zahl für n eingibt, beendet sich das Programm von selbst. Was aber noch schlimmer ist: Ab einer ausreichend hohen Zahl für n erhält man als Schätzwert für Pi immer und wirklich immer 3,18... Wenn es nur die Ungenauigkeit wäre, ok. Aber dann müssten die Werte doch auch in die andere Richtung ungenau sein, oder? Sprich: Wieso spuckt das Ding nicht ab und zu auch mal 3,10... aus?? Wäre wirklich supernett, wenn jemand die Antwort auf diese Frage wüsste und sie mir auch mitteilen würde. Schon mal danke! Ciao, Nadine
|
   
Hol (Hol)
Moderator Benutzername: Hol
Nummer des Beitrags: 28 Registriert: 4-2001
| | Veröffentlicht am Montag, den 15. März, 2004 - 19:19: | |
Hallo Nadine, warum sich dein Programm von selbst beendet, kann ich dir nicht sagen. bei mir tut es das nicht! Allerdings läuft es auf meinem Rechner schon für n=100.000.000 übr 5 minuten, und ich wollte nicht noch grüßere n ausprobieren. Das andere ist vermutlich eine folge der rundungsfehler: Dadurch, dass du x := random(100)/100 setzt, erzeugst du zufallszahlen mit genau zwei nachkommastellen. Der kleinste mögliche Wert für x ist 0,00, der größte 0,99. Das sind 100 verschiedene Möglichkeiten insgesamt kannst du also 100*100 (=10.000) Punkte 'auswüfeln'. Von diesen liegen 7359 im Viertelkreis. Der Wert für pi wird sich also für große n ungefähr bie 4* 7359/10000 einstellen und das ist 3,1812. Wie kannst du den wert verbessern? 1. Möglichkeit: du kannst statt x:= random(100)/100 schreiben x:= random (10000)/10000 das wird den wert verbessern. Noch einfacher aber ist es, wenn du gleich x:= random schreibst. In diesem FAll liefert dir die random-funktion eine reele zahl r mit 0<=r<1. Damit klappt es besser! Zum schluss noch ein tipp: baue das ganze in eine weiter zählschleife ein und lasse dir für das eingegebene n den wert von pi gleich mehrmals ausrechnen! Gruß hol |
|