________________________________________________________________________________
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
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)
![]()
![]()
Betrachten wir also einmal den Graphen der Funktion:
p:= plot::Function2d(x^3 - x^2 - 5, x = -1..3,
ViewingBoxYRange = -7..7):
plot(p);

Am Graphen kann man ablesen, dass sich die Nullstelle im Intervall [2; 3]
befinden muss.
ist scheinbar ein recht guter Näherungswert für die gesuchte Nullstelle.
Im Punkt
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)
![]()

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
berechnen.
xN1:= xN -(subs(f, x=xN))/(subs(f1, x=xN));
![]()
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):
![]()

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));
![]()
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):
![]()

Beschreiben wir also das Verfahren einmal allgemein:
Gegeben sei eine stetig differenzierbare Funktion f. Wir wählen einen
geeigneten Startpunkt
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
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
![]()
![]()

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

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

Diesen Wert lassen wir uns nochmals als Dezimalbruch von MuPAD
ausgeben:
float(Newton(5))
![]()
Das Ergebnis müssen wir wieder einsetzen. Das ist folgendermaßen
möglich:
Newton(%)
![]()
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));
![]()
![]()
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
mit dem Startwert
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.

b.

c.

________________________________________________________________________________
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.
_______________________________________________________________________________