Re: Monte Carlo trifft PI
Zitat:
Beim Zählen der Pixel klappt das nicht, da du nur x*y Pixel hast. |
Re: Monte Carlo trifft PI
Aber wenn die Punkte gegen unendlich laufen, ist doch der Wert genau der, der bei meiner Pixelrechnung rauskommt, oder?
|
Re: Monte Carlo trifft PI
Zitat:
|
Re: Monte Carlo trifft PI
Zitat:
Erlär doch mal, warum meine Annahme falsch ist. Wenn ich das oben genannte Beispiel durchrechnen lasse, dann komme ich wirklich nur auf den Wert, der auch bei den Pixeln rauskommt. egal wie viele Millionen mal ich da Punkte raufmache... WO liegt denn da mein Denkfehler? |
Re: Monte Carlo trifft PI
Stell dir ein Kasten von 10x10 vor, sprich 100 Pixel. Selbst wenn du alle Pixel zählst, wirst du nur 31 schwarze (damit mein ich Pixel innerhalb des Kreises) und für den Rest weisse finden. Damit wirst du Pi NIE genauer wie 3.1 bestimmen können. (Pi=schwarze/Gesamtzahl)
Oder hab ich dich falsch verstanden, wie du über das Canvas Pi bestimmen willst. :gruebel: |
Re: Monte Carlo trifft PI
Ne, hast du nicht, aber ganz oben hat eienr gefragt, wie er das mit Canvas macht...
Was brauch man denn für eine Größe um Pi genauer zu bestimmen? |
Re: Monte Carlo trifft PI
Zitat:
Dein Denkfehler (und gleichzeitig der Vorteil der Monte-Carlo-Methode) besteht darin, das bei deiner Pixelbasierenden Lösung das Canvas seeehr groß sein müsste, um ein brauchbares ergebnis zu liefern, da ein Pixel ja bekanntlich entweder schwarz oder weiß ist, aber nicht halb schwarz, halb weiß oder so. Bei der Monte-Carlo-Methode hingegen kann man Dezimalzahlen einsetzen, die die Ergebnisse des Zufallszahlengenerators sind. /E: Herrlich, bin ich wieder zu langsam gewesen, und ich glaube sogar am Thema vorbei. Dafür gibts hier jetzt mal eine ganz einfache Übersetzung des Vorschlags von Wikipedia zur Monte-Carlo Methode:
Delphi-Quellcode:
Wie gesagt, einfach aus meinem Testprogrämmle kopiert, und ohne weiteres Tuning
procedure TForm1.Button1Click(Sender: TObject);
var tropfenzahl, innerhalb, gesamt: Integer; dotx, doty, piwert: Extended; begin tropfenzahl := StrToInt(Edit1.Text); innerhalb := 0; gesamt := tropfenzahl; Progressbar1.Max := tropfenzahl; while(tropfenzahl>0) do begin Randomize; dotx := 2 * Random-1; doty := 2 * Random-1; if(Sqrt(dotx*dotx + doty*doty) <= 1) then begin innerhalb := innerhalb +1; end; tropfenzahl := tropfenzahl -1; Progressbar1.Position := Gesamt - tropfenzahl; Application.ProcessMessages; end; Edit2.Text := FloatToStr(4*innerhalb/gesamt); end; |
Re: Monte Carlo trifft PI
@jelly
@Nicolai Wenn man das Ergebnis möglichst genau haben will, muss man sich vom Canvas loslösen und die Sache rein arithmetisch/analytisch betrachten. Damit könnte man auch die Genauigkeit beliebig erhöhen, vorausgesetzt man lässt das Programm lang genug laufen. MfG Binärbaum //Edit: Rechtschreibfehler korrigiert |
Re: Monte Carlo trifft PI
Zitat:
|
Re: Monte Carlo trifft PI
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz