MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

________________________________________________________________________________

 

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:

 

image      image

image  image

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):

MuPAD graphics

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:

 

image. . .

 

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:

 

image. . .

 

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.

 

image. . .

 

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:

 

image

 

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:

 

image

 

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. 

_______________________________________________________________________________

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.