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

________________________________________________________________________________

 

Inhalt....: Das Newton-Verfahren

Kategorie.: Unterrichtsmaterial

Mathematik: Analysis

MuPAD.....: 3.0.0

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

Autoren...: Vera Verspohl <verav@mupad.de>

Funktionen: solve, plot, plot::Function2d, plot::Scene2d, plot::Line2d, diff,

Funktionen: ViewingBoxYRange, plot::Point2d

________________________________________________________________________________

 

Das Newton-Verfahren

 

Dieses Beispiel soll das Newton-Verfahren mit Hilfe von MuPAD veranschaulichen.

 

Wir möchten die Nullstelle des Polynoms

image

bestimmen. Mit schriftlichen Verfahren (der Analysis) kommen

wir hier nicht weiter. Auch der Rechner ist mit der Funktion solve keine

Hilfe:

 

f:= x^3 - x^2 - 5;

solve(f=0, x)

math

math

Betrachten wir also einmal den Graphen der Funktion:

 

p:= plot::Function2d(x^3 - x^2 - 5, x = -1..3,

                     ViewingBoxYRange = -7..7):

plot(p);

MuPAD graphics

 

Am Graphen kann man ablesen, dass sich die Nullstelle im Intervall [2; 3]

befinden muss.

image

ist scheinbar ein recht guter Näherungswert für die gesuchte Nullstelle.

 

Im Punkt

image

legen wir die Tangente an den Graphen von f:

 

xN:=2.5:

f1:=diff(f, x):

tangente1:= subs(f1, x=xN) * (x-xN) + subs(f, x=xN);

t1:=plot::Function2d(tangente1, x=-1..3,

                     ViewingBoxYRange=-7..13,

                     Color=RGB::Red):

P:=plot::Point2d(xN, subs(f, x=xN),

                 PointSize = 2.5*unit::mm):

plot(p, t1, P)

math

MuPAD graphics

 

Der Schnittpunkt der Tangente mit der x-Achse ist sicher ein besserer

Näherungswert für die Nullstelle. Dieser neue Wert lässt sich mit

 

                                                  image

berechnen.

 

xN1:= xN -(subs(f, x=xN))/(subs(f1, x=xN));

math

tangente2:= subs(f1, x=xN1) * (x-xN1) + subs(f, x=xN1);

t2:=plot::Function2d(tangente2, x=-1..3,

                     ViewingBoxYRange=-7..13,

                     Color=RGB::Red):

P2:=plot::Point2d(xN1, subs(f, x=xN1),

                  PointSize = 2.5*unit::mm):

plot(p, t2, P2):

math

MuPAD graphics

Wieder betrachten wir den Schnittpunkt der Tangente mit der x-Achse. Die

Näherung ist wieder deutlich besser geworden.

 

xN2:= xN1 -(subs(f, x=xN1))/(subs(f1, x=xN1));

math

tangente3:= subs(f1, x=xN2) * (x-xN2) + subs(f, x=xN2);

t3:=plot::Function2d(tangente3, x=-1..3,

                     ViewingBoxYRange=-7..13,

                     Color=RGB::Red):

P3:=plot::Point2d(xN2, subs(f, x=xN2),

                  PointSize = 2.5*unit::mm):

plot(p, t3, P3):

math

MuPAD graphics

Beschreiben wir also das Verfahren einmal allgemein:

 

Gegeben sei eine stetig differenzierbare Funktion f. Wir wählen einen

geeigneten Startpunkt

image

und legen durch diesen eine

Tangente an den Graphen von f. Ihr Schnittpunkt mit der x-Achse

bildet nun unseren Wert x2.

Dementsprechend berechnen wir nun

image

und damit den Schnittpunkt mit der x-Achse und einer neuen Tangente

an den Graphen von f, usw.

 

Dieses Verfahren konvergiert in den meisten Fällen schnell gegen eine

gesuchte Nullstelle xN.

 

Berechnen wir ein weiteres Beispiel:

 

f:= sqrt(x+1) - x;

f1:= diff(f, x);

It:= x-f/f1

math

math

math

 

Newton:= fp::unapply(It, x)

math

 

Damit berechnen wir die Iteration mit dem Startwert x=5:

 

Newton(5)

math

 

Diesen Wert lassen wir uns nochmals als Dezimalbruch von MuPAD

ausgeben:

 

float(Newton(5))

math

 

Das Ergebnis müssen wir wieder einsetzen. Das ist folgendermaßen

möglich:

 

Newton(%)

math

 

Wir können aber auch mit Hilfe des Operators @@ die Iteration mehrfach

hintereinander ausführen; dabei bezeichnet Newton@@i die i-malige,

iterative Anwendung des Verfahrens.

 

float((Newton@@2)(5));

float((Newton@@3)(5));

math

math

 

Alternativ lassen wir uns mehrere Iterationsschritte hintereinander ausgeben,

z.B. so:

 

n:=6:

for i from 1 to n do     

    x[i]:= float((Newton@@i)(5));

    print(Unquoted, "x".expr2text(i)." = ".expr2text(x[i]) );

end_for;

x1 = 1.795341583

x2 = 1.619273191

x3 = 1.618034054

x4 = 1.618033989

x5 = 1.618033989

x6 = 1.618033989

 

Weitere Möglichkeiten bietet die analysis-Bibliothek. Sie stellt die

Prozeduren nsNewton zur numerischen Berechnung von Nullstellen, und

graphNewton, zur grafischen Veranschaulichung des Newton-Verfahrens,

zur Verfügung.

 

Das Paket muss zuerst geladen werden:

 

package("analysis"):

export(analysis):

Error: argument 'analysis' is not a domain [export]

 

 

delete x:

nsNewton(x^3 - x^2 -5, 2.5, 10^-10);

 

Hier wurde die Nullstelle der Funktion

image

mit dem Startwert

image

mit einer Genauigkeit von 10^(-10) bestimmt.

 

graphIt:= graphNewton(x^3 - x^2 -5, 2.5, -1..4, 0.001):

plot(graphIt);

 

Es besteht aber auch die Möglichkeit, die einzelnen Tangenten

nacheinander in verschiedene Schaubilder zu zeichnen und zwar ohne das

Analysis-Paket:

 

newt:= proc(xStart, f, xBereich, yBereich, n)

local p1, p2, p3, p4, pSzene, i, f1, tang, phi, fx, w;

   begin

   w:= xStart;

      for i from 1 to n do

           f1:= diff(f, x);

           phi:= fp::unapply(x- f/f1, x):

           fx:= subs(f, x=w):

           tang:= (subs(f1, x=w))*(x-w)+fx:

            p1:= plot::Function2d(f, x=xBereich,

                                  ViewingBoxYRange=yBereich,

                                  Color=RGB::Blue):

            p2:= plot::Point2d([w, fx], Color=RGB::Red):

            p3:= plot::Function2d(tang, x=xBereich,

                                  ViewingBoxYRange=yBereich,

                                  Color=RGB::Violet):

            p4:= plot::Line2d([w, fx],[w, 0], Color=RGB::Green):

            pSzene:= plot::Scene2d(p1, p2, p3, p4):

            plot(pSzene);

            w:= float((phi@@i)(xStart)):

       end_for;

       end;

newt(2.5, x^3-x^2-5, -1..3, -7..13, 3):

 

 

________________________________________________________________________________

 

Übungen:

1. Bestimmen Sie Näherungswerte für die Nullstellen von f mit Hilfe des Newton Verfahrens. Arbeiten Sie

   dafür sowohl mit als auch ohne die Analysis-Bibliothek.

a.

image

b.

image

c.

image

________________________________________________________________________________

 

Anmerkungen:

1. Der obige Prozess funktionert natürlich nicht immer so gut - startet man mit dem Newton-Verfahren an

     einer Stelle, an der die Funktion, deren Nullstelle zu berechnen ist, ein lokales Maximum oder Minimum

     hat, so scheitert es. An diesen Stellen ist die Steigung des Graphen Null und die Tangente ist parallel zur

     x-Achse. Außerdem benötigen wir Funktionen, die auf dem jeweiligen Intervall stetig sind.

 

2.  Ein ähnliches Notebook steht zur Verfügung, in dem die Approximation einer Funktion durch ihre

     Taylorreihe graphisch visualisiert wird.

 

3.  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.

 

_______________________________________________________________________________

 

 

 

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