![]() |
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:
also ein randomize is davor....
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; |
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. |
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? |
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ß, |
Re: MonteCarloSimulation - falsche ergebnisse
das funzt....
aber wie stelle ich das jetzt in ner paintbox dar? also vom umrechnen |
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:
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:
if sqr(x)+sqr(y)<sqr(NETZGENAUIGKEIT) then inc(pin);
Der Radius des roten Viertelkreises ist gleich der Kantenlänge, d.h. das sqr ist falsch. Es müsste nur
Delphi-Quellcode:
Ich glaube du hattest einen Denkfehler als du den Pythagoras geschrieben hast. [Falls ich nicht ganz falsch liege :oops: ]
if sqr(x*x+y*y) < Netzgenauigkeit then {Treffer}
|
Re: MonteCarloSimulation - falsche ergebnisse
Ich versteh nicht was du in einer Paintbox darstellen willst?
|
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); |
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; |
Re: MonteCarloSimulation - falsche ergebnisse
gute idee
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
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