________________________________________________________________________________
Inhalt....: Das Heron-Verfahren
Kategorie.: Arbeitsblatt
Mathematik: Analysis, Geometrie R^2
MuPAD.....: 3.0.0
Datum.....: 2002-01-17
Autoren...: Vera Verspohl <verav@mupad.de>
Funktionen: DIGITS, plot, plot::Polygon2d, plot::Scene2d
________________________________________________________________________________
Das Heron-Verfahren
Wir wollen demonstrieren, wie man einige Schritte des Heron-Verfahrens zur Berechnung
der Wurzel einer Zahl mit MuPAD durchführen kann. Ferner wird auf die geometrische Idee,
welche sich hinter diesem Verfahren verbirgt, eingegangen.
Dieses Verfahren ist uns von den Griechen überliefert. Es wird jedoch
angenommen, dass es bereits den Sumerern bekannt war.
Es handelt sich um ein geometrisches Verfahren zur Berechnung von
Quadratwurzeln, denn die Griechen assoziierten das Produkt zweier Zahlen
mit dem Flächeninhalt eines Rechtecks oder eines Quadrats.
Da wir Wurzeln berechnen möchten, ist es sinnvoll, die Rechengenauigkeit
heraufzusetzen. Wir wollen zunächst mit 25 Gleitkommastellen arbeiten.
DIGITS:= 25:
Beim Heron-Verfahren wird angenommen, dass der Flächeninhalt eines
Quadrats bekannt ist und dass nun die Seitenlänge ermittelt werden soll. Dies
wird erreicht, indem ein flächengleiches Rechteck mit bekannten Seitenlängen
schrittweise an ein Quadrat angenähert wird:
Ein Rechteck p mit dem Flächeninhalt 15FE und ein flächengleiches
Quadrat q:
p:= plot::Polygon2d([[0,0], [5,0], [5,3], [0,3]],
Color= RGB::Blue):
q:= plot::Polygon2d([[0,0], [sqrt(15),0], [sqrt(15),sqrt(15)],
[0,sqrt(15)]], Color = RGB::Orange,
LineStyle = Dashed):
r:= plot::Scene2d(p,q):
plot(r)

Für das Rechteck wurden hier exemplarisch die Seitenlängen 5FE und 3FE
gewählt.
p:= plot::Polygon2d([[0,0], [5,0], [5,3], [0,3]],
Color= RGB::Blue):
plot(p);

Um dieses Rechteck in ein Quadrat zu verwandeln, muss die Länge x gekürzt
und die Höhe h verlängert werden. Hierfür bildet man den Mittelwert:

Um einen neuen y-Wert (y1) zu erhalten, dividiert man nun den Flächeninhalt
durch den neuen x-Wert (x1), damit das Produkt

den Flächeninhalt ergibt:
x1:= (3+5)/2;
![]()
y1:=float(15/x1);
![]()
p1:= plot::Polygon2d([[0,0], [x1, 0], [x1,y1], [0,y1]],
Color = RGB::Blue):
q:= plot::Polygon2d([[0,0], [sqrt(15),0], [sqrt(15),sqrt(15)],
[0,sqrt(15)]],
Color=RGB::Orange, LineStyle = Dashed):
r1:= plot::Scene2d(p1,q):
plot(r1)

Das sieht schon besser aus - berechnen wir nun den nächsten Näherungswert.
Dafür berechnen wir den Mittelwert von x1 und y1:
x2:= (x1+y1)/2;
![]()
y2:=15/x2;
![]()
p2:= plot::Polygon2d([[0,0], [x2,0], [x2,y2], [0,y2]],
Color= RGB::Blue):
q:= plot::Polygon2d([[0,0], [sqrt(15),0], [sqrt(15),sqrt(15)],
[0,sqrt(15)]],
Color = RGB::Orange, LineStyle = Dashed):
r2:= plot::Scene2d(p2,q):
plot(r2);

Da gelten muss: y2<
<x2, also 3,870967742<
<3,875 haben wir den
gesuchten Wert bereits so genau angenähert, dass zeichnerisch kein Unterschied
mehr zu erkennen ist. Mit nur zwei Iterationsschritten haben wir die Wurzel auf
zwei Nachkommastellen genau bestimmt.
Mit der Berechnung können wir fortfahren.
x3:= (x2+y2)/2;
y3:= 15/x3
![]()
![]()
Im 3. Iterationschritt haben wir also eine Genauigkeit von 5 Stellen nach dem
Komma.
x4:=(x3+y3)/2;
y4:=15/x4;
![]()
![]()
Die Genauigkeit liegt bereits bei 12 Nachkommastellen!
Möchte man mehrere Iterationsschritte auf einmal berechnen, besteht die
Möglichkeit dies mit Hilfe der folgenden Prozedur zu tun, bei der die Zahl n,
deren Wurzel man berechnen möchte, der Startwert x0, sowie die Anzahl der
Iterationschritte vorgegeben werden müssen.
Heron:= proc(n, x0, Schritte)
local a, x;
begin
DIGITS:= 25:
x:=x0:
for a from 0 to Schritte do
y:=n/x:
print(Unquoted, "x".expr2text(a)." = ".expr2text(float(x))."\t \t y".expr2text(a)." = ".expr2text(float(y))):
x:= 1/2* (x+y):
end_for:
return();
end_proc;
![]()
Heron(13,5,5)
x0 = 5.0 y0 = 2.6
x1 = 3.8 y1 = 3.421052631578947368421053
x2 = 3.610526315789473684210526 y2 = 3.600583090379008746355685
x3 = 3.605554703084241215283106 y3 = 3.605547847846995837837378
x4 = 3.605551275465618526560242 y4 = 3.605551275462360059678202
x5 = 3.605551275463989293119222 y5 = 3.605551275463989293119221
________________________________________________________________________________
Übungen:
1. Berechnen Sie schrittweise die Iteration für sqrt(20) und sqrt(2). Wählen Sie selbst geeignete Startwerte,
sowie eine geeignete Genauigkeit. Zeichnen Sie außerdem die Rechtecke und Quadrate für die Fälle, in
denen noch mit "blossem Auge" Unterschiede zwischen Quadrat und Rechteck zu erkennen sind.
2. ErweiternSie die Prozedur Heron, so dass zusätzlich zur Berechnung der xi, yi die zugehörigen
Rechtecke gezeichnet werden.
________________________________________________________________________________
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.
_______________________________________________________________________________