Einzelnen Beitrag anzeigen

Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#1

Ergänzung zur Approximation von Pi

  Alt 29. Mär 2005, 22:54
In diesem Beitrag beschreibt Chakotay die Approximation von Pi anhand des "spalten-Verfahrens". Ich musste im Rahmen eine Schulprojektes die 3 folgenden Verfahren implementieren und würde mich über eine Aufnahme der functionen in die Codelib freuen. Die Verfahrensbeschreibungen hatte ich leider nur noch ausgedruckt vorliegen. Hab sie mal eingescannt und angehängt.
  • Pi berechnen nach Archimedes
  • Pi berechnen nach Leibnitz' unendlicher Reihe
  • Pi berechnen nach der Monte-Carlo-Methode


Pi berechnen nach Archimedes
Delphi-Quellcode:
function PiArchimedes(Schritte:integer):extended;
var
  anzahl,i : integer;
  s,x,y : extended;
begin
  anzahl := 2;
  s := sqrt(2);
  for i := 1 to schritte do
  begin
    anzahl := anzahl * 2;
    x := sqrt(1-(1/2*s)*(1/2*s));
    y := 1-x;
    s := sqrt((1/2*s)*(1/2*s)+y*y);
  end;
  result := s * anzahl;
end;

Pi berechnen nach Leibnitz' unendlicher Reihe
Delphi-Quellcode:
function PiUnendlicheReihe(Summandenzahl : integer):extended;
var
  i, summand : integer;
begin
  summand := 1;
  result := 0;
  for i:=1 to summandenzahl do
  begin
    result := result + (1/summand);
    if (1-summand) < 1 then summand := -1 * (summand+2)
    else summand := -1 * (summand-2);
  end;
  result := result * 4;
end;

Pi berechnen nach dem MonteCarlo-Verfahren
Delphi-Quellcode:
function PiMonteCarlo(Tropfen: LongWord):extended;
var
  i : LongWord;
  x,y : extended;
begin
  Randomize;
  Result := 0.0;
  for i := Tropfen-1 downto 0 do
  begin
    x := random;
    y := random;
    if ((x*x+y*y) < 1) then Result := Result + 1;
  end;
  Result := (4*Result) / Tropfen;
end;

Edi11: thx@Binärbaum für die Optimierung der Monte-Carlo-Funktion
Edit2: thx@Binärbaum für weitere Optimierung von Monte-Carlo
Edit3: Hab das Archimedes-Beispiel gezippt, wird leider nur unwesentlich kleiner Sorry an die Leute mit Modem/ISDN!

[edit=flomei] Anmerkung zu den obigen Kommentaren: Binärbaum hatte kleinere Fehler gefunden, bzw. Optimierungen an der Geschwindigkeit vorgenommen. Dafür nochmal ein Dankeschön!

Anhänge hinsichtlich ihrer Größe "optimiert", verschoben. Mfg, flomei[/edit]

[edit=Matze]Code formatiert. Mfg, Matze[/edit]
Miniaturansicht angehängter Grafiken
reihe_leibnitz_976.gif   archimedes-beispiel_153.jpg   montecarlo-beispiel_114.jpg  
  Mit Zitat antworten Zitat