Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MonteCarloSimulation - falsche ergebnisse (https://www.delphipraxis.net/29866-montecarlosimulation-falsche-ergebnisse.html)

glkgereon 15. Sep 2004 18:32


MonteCarloSimulation - falsche ergebnisse
 
hi

ich mach grad ein prog zur montecarlo-simulation
damit berrechne ich pi

nun ist pi ja meines wissens 3,14....

bei mir kommt aber 3,18... raus

wo ist der fehler?

Delphi-Quellcode:
var
  x, y, i, pin:integer;//x, y, alle punkte, punkte im kreis
  pi:Extended;
begin
while (running) do
  begin
  x:=random(NETZGENAUIGKEIT);
  y:=random(NETZGENAUIGKEIT);
  if sqr(x)+sqr(y)<sqr(NETZGENAUIGKEIT) then inc(pin);
  inc(i);
  Application.ProcessMessages;
  end;
pi:=4*pin/i;
also ein randomize is davor....

Nikolas 15. Sep 2004 18:50

Re: MonteCarloSimulation - falsche ergebnisse
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie oft machst du das denn? Diese Methode ist ja recht ungenau und langsam, da musst du schon ordentlich rechnen, bis was rauskommt.

Ich hab mal ein kleines Programm mit unterschiedlichen Algorhytmen in der Schule geschrieben (siehe Anhang), da gibt's vielleicht eine schnellere Version drunter für dich.

glkgereon 15. Sep 2004 19:07

Re: MonteCarloSimulation - falsche ergebnisse
 
naja, also sagen wir mal so:

mein prog is nach 500000 durchläufen bei 3,18
(mittlerweile über 1000000, aber immer noach 3,18 )

deins is bereits nach 50000 wenigstens zwischen 3,15 und 3,13

kannst du mir ma den qt für deins geben?

Jelly 15. Sep 2004 19:11

Re: MonteCarloSimulation - falsche ergebnisse
 
Was betweckst du denn mit NETZGENAUIGKEIT... Wenn du random(Netzgenauigkeit) aufrufst, kriegst du nur ganze Zahlen als Zufallszahlen... Rufe stattdessen einfach radom auf (ohne Parameter), und du erhältst ein Float zwischen 0..1.

Gruß,

glkgereon 15. Sep 2004 19:19

Re: MonteCarloSimulation - falsche ergebnisse
 
das funzt....

aber wie stelle ich das jetzt in ner paintbox dar?
also vom umrechnen

Nikolas 15. Sep 2004 19:23

Re: MonteCarloSimulation - falsche ergebnisse
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Monte-Carlo Methode ist ganz unten.
Dein Fehler könnte hier liegen:
Delphi-Quellcode:
if sqr(x)+sqr(y)<sqr(NETZGENAUIGKEIT) then inc(pin);
Ich nehme an Netzgenauigkeit ist die Kantenlänge deines Quadrats. Setzt die mal 1 oder lass das sqr nach dem '<' weg. [Ich bezieh mich jetzt auf das unterste Bild in meinem Programm:
Der Radius des roten Viertelkreises ist gleich der Kantenlänge, d.h. das sqr ist falsch. Es müsste nur
Delphi-Quellcode:
if sqr(x*x+y*y) < Netzgenauigkeit then {Treffer}
Ich glaube du hattest einen Denkfehler als du den Pythagoras geschrieben hast. [Falls ich nicht ganz falsch liege :oops: ]

Jelly 15. Sep 2004 19:23

Re: MonteCarloSimulation - falsche ergebnisse
 
Ich versteh nicht was du in einer Paintbox darstellen willst?

glkgereon 15. Sep 2004 19:26

Re: MonteCarloSimulation - falsche ergebnisse
 
so ein bildchen, wo ein viertelkreis drauf is, und gezeigt wird wo die ganzen pünktchen gelandet sind....

@Toxman: ich habs jetzt so umgeschrieben (und es funzt)
Delphi-Quellcode:
x:=random;
y:=random;
if sqr(x)+sqr(y)<1 then inc(pin);

Nikolas 15. Sep 2004 20:11

Re: MonteCarloSimulation - falsche ergebnisse
 
mach's doch so:
Delphi-Quellcode:
if d < 1 then
col:= clmaroon else col:= clblack;

image1.Canvas.Pixels[round(x*image1.width),round(y*image1.height)] := col;

glkgereon 15. Sep 2004 20:19

Re: MonteCarloSimulation - falsche ergebnisse
 
gute idee


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz