________________________________________________________________________________
Inhalt....: Einige Näherungsverfahren zur Berechnung von PI
Kategorie.: Arbeitsblatt
Mathematik: Zahlentheorie, Analysis, Numerik
MuPAD.....: 3.0.0
Datum.....: 2002-12-23
Autoren...: Roman Seidel <lop.invitor@gmx.de>
Funktionen: expr2text, read, write, stringlib::contains, plot::Polygon2d,
Funktionen: plot::Circle2d
________________________________________________________________________________
Einige Näherungsverfahren zur Berechnung
von p
Wir wollen MuPAD benutzen, um einige historische Formeln zur Berechnung von PI selbst
zu programmieren, d.h. wir geben die entsprechende Formel zur Berechnung von PI an und
definieren sie dann mit MuPAD. Anschließend führen wir einen Vergleich der verschiedenen
Näherungsverfahren durch.
Alle im folgenden vorgestellten Prozeduren zur näherungsweisen Berechnung
von PI erhalten stets eine Zahl n - die Anzahl der durchgeführten Berechnungs-
schritte nach der entsprechenden Methode - als Eingabe. Vergrößern dieser
Zahl ermöglicht stets eine genauere Approximation von PI.
Archimedes
Archimedes lebte von ca. 287 bis 212 v.Chr. in Syrakus, wo er geboren wurde
und auch starb (getötet wurde). Er studierte in Alexandria und war später
Mathematiker, Ingenieur und technischer Berater der Könige. Er entdeckte
einige mathematische und physikalische Gesetze und berechnete Kreisflächen,
Kreisumfang, Kegelschnitte u.v.m.
Das von ihm verwandte Näherungsverfahren ist gegeben durch die rekursiven
Zahlenfolgen:

Sowohl die Folge der a_n als auch die Folge der b_n konvergiert gegen PI.
Geometrisch läßt sich das Approximationsverfahren wie folgt interpretieren:
Man betrachtet einen Einheitskreis (Radius r = 1), dessen Flächeninhalt
gerade die Zahl PI ist (A = r^2 * PI). In diesen Kreis schreibt man regelmäßige
n-Ecke ein, deren Flächeninhalt explizit berechnet werden kann. Erhöht man
sukzessive die Anzahl der Ecken dieser n-Ecke, so nähert ihr Flächeninhalt
die Zahl PI immer besser an. Ein grafische Veranschaulichung des Verfahrens
findet sich weiter unten.
Quellen:
http://www.mathe.tu-freiberg.de/~hebisch/cafe/archimedes.html
http://village.ch/~aeschbacher/archie.html
archimedes:= proc(n)
local temp1, temp2, i;
begin
temp1:= float(2*sqrt(3));
temp2:= 3;
for i from 0 to n do
temp1:= float( (2*temp1*temp2)/(temp1+temp2) );
temp2:= float( sqrt(temp1*temp2) );
end_for;
return(temp1);
end_proc:
Kreis:= plot::Circle2d(1, [0,0], Color = RGB::Black):
pi:= float(PI):
nEck:= (n,c) -> plot::Polygon2d(
[[sin((2*PI*k)/n), cos((2*PI*k)/n)] $ k=0..n],
Color = c, Closed = TRUE):
plot(Kreis, nEck(24, RGB::Red ), nEck(12, RGB::Black),
nEck( 6, RGB::Green), nEck( 3, RGB::Blue ),
Scaling=Constrained):

Viéte
François Viéte wurde 1540 in Fontenay-le-Comte geboren. Er studierte Jura
in Poitiers, doch ab 1564 arbeitete er als Privatlehrer im Dienste einer adligen
Familie. Ab 1570 war er als Rechtsanwalt in Paris tätig und wurde 1573 zum
Mitglied des Parlaments in Rennes ernannt. Ca. 1579 berechnete er mit der
folgenden Formel PI. Er starb am 23.02.1603 in Paris.
François Viéte näherte PI über die folgende Iterationsvorschrift an:
. . .
Quellen:
http://www.mathe.tu-freiberg.de/~hebisch/cafe/vieta.html
viete:= proc(n)
local ergebnis, i, temp;
begin
temp:= sqrt(1/2);
ergebnis:= temp;
for i from 0 to n do
temp:= float( sqrt(1/2+1/2*temp));
ergebnis:= float(temp*ergebnis);
end_for;
return(2/ergebnis);
end_proc:
Madhava, James Gregory, Gottfried Wilhelm
Leibniz
Um 1658 fanden Madhava, James Gregory und Gottfried Wilhelm Leibniz eine
Formel zur Berechnung von PI über eine unendliche Summe der Form:
. . .
mgl:= proc(n)
local ergebnis, k;
begin
ergebnis:= float( _plus((-1)^k/(2*k+1) $ k=0..n) );
return(4*ergebnis);
end_proc:
Leonard Euler
Leonard Euler wurde am 15.04.1707 in Basel geboren und studierte an der
dortigen Universität. Mit 16 Jahren bekam er seinen Magistertitel und wurde
1733 Mathematikprofessor. Von 1744 bis 1765 war er Direktor an der
Universität Berlin. In dieser Zeit, ca. 1748, fand er die unten stehende Formel,
mit der sich auch PI berechnen läßt. Er starb am 15.09.1783.
. . .
Quellen:
http://www.gm.nw.schule.de/~gymwiehl/prim/euler.htm
euler:= proc(n)
local ergebnis, k;
begin
ergebnis:= float( _plus((1/k^2) $ k=1..n) );
return( sqrt(ergebnis*6) );
end_proc:
Bailey, Borwein, Plouffe
1997 entdeckten Bailey, Borwein und Plouffe eine Formel, mit der man
eine einzelne Ziffer der Binärdarstellung von PI direkt berechnen kann:

Quellen:
http://www.uni-paderborn.de/fachbereich/fachschaft/service/
VKOM/VKOM_SS2000/HTML_FILES/vonzurGathenS_Pi.html
bbp:= proc(n)
local ergebnis, k;
begin
ergebnis:= float( _plus( (1/16^k) * ( ( 4/(8*k+1) -
2/(8*k+4) -
1/(8*k+5) -
1/(8*k+6)
) )
$ k = 0..n ) );
return(ergebnis);
end_proc:
Fabrice Bellard
Auch im Jahre 1997 entdeckte Fabrice Bellard eine Formel, die in der
folgenden Prozedur implementiert ist:

bellard:= proc(n)
local ergebnis, k;
begin
ergebnis:= float( 1/(2^6) * _plus( (-1)^k/(2^(10*k)) * (
- 2^5/(4*k+1) -
1/(4*k+3) +
2^8/(10*k+1) -
2^6/(10*k+3) -
2^2/(10*k+5) -
2^2/(10*k+7) +
1/(10*k+9) )
$ k = 0..n ) );
return(ergebnis);
end_proc:
Wir schreiben uns nun eine kleine Prozedur, mit deren Hilfe wir die
verschiedenen Näherungsverfahren, die wir oben vorgestellt haben,
vergleichen können. Als Eingabe erhält die Prozedur die Anzahl n von
Iterationsschritten, mit dem jedes der obigen Näherungsverfahren
aufgerufen werden soll:
pi:= proc(n)
local piEcht, List, Namen, temp;
begin
DIGITS:= n;
piEcht:= float(PI);
List:= [0$7];
Namen:= List:
List[1]:= archimedes(n);
List[2]:= viete(n);
List[3]:= mgl(n);
List[4]:= euler(n);
List[5]:= bbp(n);
List[6]:= bellard(n);
Namen[1]:= "Archimedes";
Namen[2]:= "Viete";
Namen[3]:= "Madhava, Gregory, Leibniz";
Namen[4]:= "Euler";
Namen[5]:= "Bailey, Borwein, Plouffe";
Namen[6]:= "Bellard";
delete DIGITS:
print(Unquoted, "====================================================");
print(Unquoted, "Approximation von PI im Vergleich");
print(Unquoted, "====================================================");
for i from 1 to 6 do
print(Unquoted, Namen[i]);
print(Unquoted, "Näherungswert: ".expr2text(List[i]) );
print(Unquoted, "Differenz zu PI: ".expr2text(float(piEcht-List[i])));
print(Unquoted, "----------------------------------------------------");
end_for;
return();
end_proc:
Mit Aufrufen der Form pi(3), pi(4) oder pi(10) können wir nun schon experimentell
entdecken, wie gut sich welche der Formeln wirklich zur Berechnung von PI eignet:
pi(3)
====================================================
Approximation von PI im Vergleich
====================================================
Archimedes
Näherungswert: 3.142714595
Differenz zu PI: -0.001121941832
----------------------------------------------------
Viete
Näherungswert: 3.140331161
Differenz zu PI: 0.001261492381
----------------------------------------------------
Madhava, Gregory, Leibniz
Näherungswert: 2.895238095
Differenz zu PI: 0.2463545586
----------------------------------------------------
Euler
Näherungswert: 2.857738032
Differenz zu PI: 0.2838546216
----------------------------------------------------
Bailey, Borwein, Plouffe
Näherungswert: 3.141592456
Differenz zu PI: 0.0000001975619278
----------------------------------------------------
Bellard
Näherungswert: 3.141592653
Differenz zu PI: 0.0000000001215420095
----------------------------------------------------
pi(4)
====================================================
Approximation von PI im Vergleich
====================================================
Archimedes
Näherungswert: 3.141873045
Differenz zu PI: -0.0002803913034
----------------------------------------------------
Viete
Näherungswert: 3.141277256
Differenz zu PI: 0.000315397168
----------------------------------------------------
Madhava, Gregory, Leibniz
Näherungswert: 3.339682539
Differenz zu PI: -0.1980898854
----------------------------------------------------
Euler
Näherungswert: 2.922612986
Differenz zu PI: 0.218979668
----------------------------------------------------
Bailey, Borwein, Plouffe
Näherungswert: 3.141592645
Differenz zu PI: 0.000000008503445181
----------------------------------------------------
Bellard
Näherungswert: 3.141592653
Differenz zu PI: 0.000000001052864584
----------------------------------------------------
Dass das aktuellste Verfahren - die Methode von Fabrice Bellard - in der Tat ein
sehr gutes Verfahren darstellt, sehen wir bereits für den Fall n = 10:
pi(10)
====================================================
Approximation von PI im Vergleich
====================================================
Archimedes
Näherungswert: 3.141592722
Differenz zu PI: -0.00000006844882058
----------------------------------------------------
Viete
Näherungswert: 3.141592577
Differenz zu PI: 0.00000007700492057
----------------------------------------------------
Madhava, Gregory, Leibniz
Näherungswert: 3.232315809
Differenz zu PI: -0.09072315582
----------------------------------------------------
Euler
Näherungswert: 3.049361636
Differenz zu PI: 0.09223101761
----------------------------------------------------
Bailey, Borwein, Plouffe
Näherungswert: 3.141592654
Differenz zu PI: 1.084202172e-16
----------------------------------------------------
Bellard
Näherungswert: 3.141592654
Differenz zu PI: -4.33680869e-19
----------------------------------------------------
Die Abweichung zwischen der Näherung, die wir z.B. mit der Formel von Bellard
berechnet haben, und der Zahl PI (bis auf zehn Nachkommastellen genau)
ist in diesem Fall bereits kleiner als -4 * 10^-19. Damit genügen zehn Iterations-
schritte nach Bellards Methode, um PI auf zehn Nachkommastellen genau
bestimmen zu können.
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie in der Buchreihe Mathematik 1 x anders. In dieser Reihe
wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gelöst. Die
Bücher können unter www.schule.mupad.de/literatur kostenfrei kopiert werden.
2. Eine genauere Diskussion des Verfahrens von Archimedes findet sich auch in dem Notebook
"Berechnung_von_PI.mnb", das ebenfalls unter www.schule.mupad.de/material zum Download bereitsteht.
_______________________________________________________________________________