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

________________________________________________________________________________

Inhalt....: Mathematik entdecken - Iterative Berechnung von PI mit MuPAD

Kategorie.: Unterrichtsmaterial

Mathematik: Analysis, Numerik, Geometrie R^2

MuPAD.....: 3.1.0

Datum.....: 2002-01-17

Autoren...: Kai Gehrs <acrowley@mupad.de>

Funktionen: |, ->, plot, plot::Circle2d, plot::Polygon2d, int, sum,

Funktionen: student::riemann, student::trapezoid, student::plotRiemann,

Funktionen: student::plotSimpson, student::plotTrapezoid, DIGITS

________________________________________________________________________________

 

Mathematik entdecken - Iterative Berechnung der

Zahl p

 

Die Berechnung des Umfangs des Einheitskreises, das bedeutet die Bestimmung

von 2π, ist ein sehr altes Problem, das vor über 4000 Jahre erstmals in Erscheinung

getreten ist und schon im Alten Testament zu finden ist. Dort verwendete man π=3.

 

In China, 5. Jahrhundert, fand man eine erstaunliche Näherung von π durch die

rationale Zahl 355/113, deren ersten 10 Dezimalziffern 3,141592920 lauten und

von denen die ersten 6 Nachkommstellen korrekt sind (im Vergleich: π = 3,141592654...).

 

Lambert bewies 1761, daß π eine irrationale Zahl ist, und Lindemann zeigte 1882,

daß π transzendent über den rationalen Zahlen ist.

 

Wir werden in diesem Notebook einige iterative Verfahren zur Berechnung von π

kennlernen.

 

 

Die Methode von Archimedes

________________________________________________________________________________

 

Archimedes war der erste, der eine systematische Lösung des Problems

gefunden hat.

 

Er legte in den Einheitskreis ein gleichseitiges Dreieck und verdoppelte

dann fortlaufend die Zahl der Ecken. Der Umfang der Drei-, Sechs-,

Zwölf-, ... Ecke nähert den Kreisumfang immer besser an.

          image

 

Dem Schüler kann folgende Aufgabe gegeben werden: Zeige, daß im

Einheitskreis:

 

1. die Seitenlänge des gleichseitigen Dreiecks

image

        beträgt.

2. das regelmäßige 2n-Eck die Seitenlänge

image

         hat, wenn sn die Seitenlänge des n-Ecks ist.

 

Mit diesen Voraussetzungen können wir das Problem der Approximation

von π über den Umfang des n-Ecks in MuPAD formulieren:

 

Die Seitenlänge des n-Ecks ergibt sich nach oben zu:

 

Seitenlaenge:= n -> (

    if n > 3 then sqrt(2-sqrt(4-Seitenlaenge(n/2)^2))

    else sqrt(3)

    end

)

n -> (if 3 < n then

    sqrt(2 - sqrt(4 - Seitenlaenge(n/2)^2))

  else

    sqrt(3)

  end_if)

 

 

Archimedes verdoppelte die Eckenzahl mit jedem Näherungsschritt:

 

Eckenzahl:= j -> (

   if j > 1 then 2*Eckenzahl(j-1)

   else 3

   end

)

j -> (if 1 < j then

    2*Eckenzahl(j - 1)

  else

    3

  end_if)

 

 

Dann ergibt sich der Umfang des n-Ecks zu:

 

nEckUmfang:= j->Eckenzahl(j)*Seitenlaenge(Eckenzahl(j))

math

 

Diesen nehmen wir nun als Annäherung von 2π. Wir führen die ersten 10

Schritte der Methode von Archimedes durch:

 

n:= 10:

for j from 1 to n do

  print(Unquoted, "Umfang des ".Eckenzahl(j)."-Ecks: ".

     expr2text(float(nEckUmfang(j))/2)

  )

end:

Umfang des 3-Ecks: 2.598076211

Umfang des 6-Ecks: 3.0

Umfang des 12-Ecks: 3.105828541

Umfang des 24-Ecks: 3.132628613

Umfang des 48-Ecks: 3.139350203

Umfang des 96-Ecks: 3.141031951

Umfang des 192-Ecks: 3.141452472

Umfang des 384-Ecks: 3.141557608

Umfang des 768-Ecks: 3.141583892

Umfang des 1536-Ecks: 3.141590463

 

Erhöht man sukzessive die Eckenzahl, so läßt sich ein interessanter

Vorgang beobachten. Nehmen wir beispielsweise:

 

n:= 40:

for j from 25 to n do

  print(Unquoted, "Umfang des ".Eckenzahl(j)."-Ecks: ".

     expr2text(float(nEckUmfang(j))/2)

  )

end:

Umfang des 50331648-Ecks: 3.141608696

Umfang des 100663296-Ecks: 3.141674265

Umfang des 201326592-Ecks: 3.142023942

Umfang des 402653184-Ecks: 3.14307274

Umfang des 805306368-Ecks: 3.148660429

Umfang des 1610612736-Ecks: 3.159806165

Umfang des 3221225472-Ecks: 3.181980515

Umfang des 6442450944-Ecks: 3.354101966

Umfang des 12884901888-Ecks: 4.242640687

Umfang des 25769803776-Ecks: 6.0

Umfang des 51539607552-Ecks: 12.0

Umfang des 103079215104-Ecks: 24.0

Umfang des 206158430208-Ecks: 48.0

Umfang des 412316860416-Ecks: 96.0

Umfang des 824633720832-Ecks: 192.0

Umfang des 1649267441664-Ecks: 384.0

 

Man erkennt, daß die Näherungsfolge zu divergieren scheint! Der Grund

liegt daran, daß obige Formel zur Berechnung desUmfangs des n-Ecks

numerisch instabil ist. Es tritt Auslöschung auf, was man sich leicht

überlegen kann. Erhöht man beispielsweise die Genauigkeit der numerischen

Rechnungen, beispielsweise auf 50 Dezimalstellen, so erhält man für den 50

Iterationsschritt noch ein "vernünftiges" Ergebnis:

 

DIGITS:= 50:

float( nEckUmfang(50) ) / 2

math

delete DIGITS:

 

Dieses "Phänomen" bietet interessanten Diskussionsstoff für den Unterricht

und motiviert die Suche nach einer numerisch besser geeigneten Formel für

den Umfang des n-Ecks, was uns auf die Formel

image

führen kann.

 

 

 

Abschließend sollen die visuellen Fähigkeiten von MuPAD genutzt werden,

um die Methode von Archimedes grafisch darzustellen:

 

Kreis:= plot::Circle2d(1, [0,0], Color = RGB::Black):

pi:= float(PI):

n:= 10:

nEck:= n -> plot::Polygon2d([[sin((2*PI*k)/n), cos((2*PI*k)/n)]

                              $ k=0..n]):

plot( Kreis,nEck(n), Scaling = Constrained )

MuPAD graphics

 

 

Die Formel von John Machin

________________________________________________________________________________

 

Mitte des 17. Jahrhunderts gab es die ersten Ansätze der -Berechnung über

Kettenbrüche, unendliche Produkte und Reihen.

 

Ein Ansatz stammt von Gregory (1671), der von der geometrischen Reihe

ausging:

 

delete n:

G:= 1/(1+x) = freeze(sum)( (-1)^k*x^k,k=0..n)

math

 

Nun ersetzte er x durch image und erhielt:

 

G2:= G | x=x^2

math

 

Integriert man nun beide Seiten, so erhält man unmittelbar die folgende

Gleichung:

 

G3:= int( lhs(G2),x ) = int( rhs(G2),x )

math

 

Bekanntlich ist arctan(1)=, d.h. die rechte Seite liefert uns eine beliebig

genaue Näherung von , wenn wir für x den Wert 1 einsetzen und n

hinreichend groß wählen.

 

Wir nehmen uns die rechte Seite dieser Gleichung also vor und fassen

sie als Funktion in x und n auf:

 

Pi:= fp::unapply( rhs(G3),x,n ):

 

Damit erhalten wir eine erste Näherung von  über:

 

4.0*Pi(1,2)

Error: 2nd argument: expecting an equation such as x = g(y) [intlib::alt]

 

 

Die Konvergenz ist sehr langsam, wie folgende Näherungen zeigen:

 

[4.0*Pi(1,n) $ n=1..50]

 

 

Eine numerisch wesentlich günstigere Formel ist

 

= 16 arctan(1/5) - 4 arctan(1/239),

 

die wir aus unseren Berechnungen von oben mit n Schritten direkt wie folgt

ausdrücken können:

 

Pi2:= n -> 16*Pi(1/5,n) + (-4)*Pi(1/239,n)

 

Sie stammt von John Machin aus dem Jahr 1706.

 

Im Vergleich zu  Pi(50) - der letzte Eintrag der Liste - sind bereits

10 Stellen erfüllt:

 

float( Pi2(50) )

 

Damit rechnete John Machin als erster  auf 100 Dezimalen aus.

Wir können in wenigen Sekunden herausfinden, wie viele Schritte er

rechnen mußte, um diesen Wert zu erhalten:

 

DIGITS:= 100: pi:= float(PI): n:= 1:

eps:= 10^(-DIGITS):

while abs(pi-Pi2(n)) > eps do n:= n+1 end:

n

Pi2(n)

float(%)

 

Neumann rechnete mit der Eniac, dem ersten elektronischen Rechenautomaten,

auf 2035 Stellen aus (er wollte die Ziffernhäufigkeiten mit statistischen Mitteln

untersuchen).

 

Das dauerte 70 Stunden. Soviel Zeit würden Sie uns sicher nicht zubilligen.

 

Mit MuPAD ist das alles einfacher und schneller: Das Ergebnis lautet

 

DIGITS:= 2035: float( PI )

delete DIGITS:

 

 

Numerische Integration

________________________________________________________________________________

 

Ein weiteres Verfahren zur Approximation von  ist über das Integral

    imageimage

mit Hilfe numerische Verfahren wie beispielsweise über Riemannsche

Summen, die Trapez- oder die Simpsonregel.

 

Auch hier treten symbolische und numerische Rechnungen sowie die

Visualisierungsmöglichkeiten von CAS in Erscheinung.

 

Wir geben obige Funktion in MuPAD ein:

 

f:= x -> sqrt(1-x^2):

 

und erhalten die Riemann-Summen mit n Iterationen über die von MuPAD

mitgelieferte Funktion  riemann( f(x),x=a..b,n ):

 

export(student):

F:= riemann( f,x=0..1,4 )

unfreeze( F )

 

In Gleitkommadarstellung:

 

4 * float( F )

 

Entsprechend bestimmen wir eine Approximation von  über die

Trapezregel:

 

F:= trapezoid( f,x=0..1,4 )

4 * float( F )

 

und abschließend im Vergleich die Simpsonregel:

 

F:= simpson( f,x=0..1,4 )

4 * float( F )

 

Natürlich können diese Formeln erst im Unterricht hergeleitet, um sie dann

in MuPAD in Form von kleinen Prozeduren zu implementieren. Aufgrund der

Kürze der Zeit habe ich die von MuPAD bereits implementierten Prozeduren

verwendet.

 

Solche numerischen Berechnungen geben Aufschluß über die Güte der

Integrationsverfahren:

 

for n in [6,10,20,50,100] do

print(Unquoted,

"n = ".n.":\n".

"  Rechteck: ".expr2text(4*float(riemann(f,x=0..1,n)))."\n".

"  Trapez  : ".expr2text(4*float(trapezoid(f,x=0..1,n)))."\n".

"  Simpson : ".expr2text(4*float(simpson(f,x=0..1,n)))."\n".

"--------------------------"

)

end:

 

Stoff, der zum Experimentieren und zu Diskussionen anregt.

 

Zum Abschluß verwenden wir die Visualisierungsmöglichkeiten von MuPAD,

um den Prozeß der numerischen Approximation anschaulich zu verdeutlichen:

 

plot( student::plotRiemann( f(x),x=0..1,8 ),

      Scaling = Constrained )

plot( student::plotTrapezoid( f(x),x=0..1,8 ),

      Scaling = Constrained )

plot( student::plotSimpson( f(x),x=0..1,8 ),

      Scaling = Constrained )

 

 

Moderne Methoden der Computer Algebra

________________________________________________________________________________

 

Mit modernen Methoden der Mathematik aus dem Bereich der Computer-

algebra und schnellen Algorithmen für Ganzzahl- und Gleitkommaarithmetik

mit hoher Genauigkeit, basierend auf der "Fast Fourier Transformation" und

"Schneller Division" wird heute die Jagd nach dem Weltrekord für die Nach-

kommastellen von  betrieben.

 

Derzeit liegt der Weltrekord bei mehreren Billionen Ziffern, der aber wohl bald

wieder übertroffen werden dürfte.

 

Solche Berechnungen dienen als gute Tests für Hardware von Supercomputern,

bevor sie zum Verkauf angeboten werden.

 

Mit Computer-Algebra-Systemen wie MuPAD lassen sich bereits tausende von

Nachkommstellen von  in sekundenschnelle bestimmen.

 

In 200 Millisekunden berechnet MuPAD  beispielsweise auf 10.000 Stellen genau,

wobei bei folgender Eingabe die meiste Zeit für die Ausgabe des Ergebnisses

benötigt wird:

 

DIGITS:= 10000:

time(float(PI));

delete DIGITS:

 

Bis heute ist unklar, ob die Dezimalstellen systematisch angeordnet sind oder

aber zufallsverteilt sind.

 

Wir wissen ebenso wenig, ob beispielsweise die Ziffer 1 unendlich oft in der

Dezimalentwicklung von  vorkommt.

 

 

________________________________________________________________________________

 

Anmerkungen:

 

1.  Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de

_______________________________________________________________________________

 

 

 

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