_____________________________________________________________________________
Inhalt....: Heronverfahren anhand eines Beispiels
Kategorie.: Unterrichtsmaterial
Mathematik: Analysis, Programmierung, Grafik
MuPAD.....: 4.0.0
Datum.....: 2007-05-14
Autoren...: Thomas Himmelbauer <j.himmelbauer@chello.at>
Funktionen: sqrt, float, plot::Rectangle, Scaling, Constrained
_____________________________________________________________________________
Heronsche Flächenformel
15.Schulübung
Die Heronsche Flächenformel dient zur nährungsweisen Berechnung von Quadratwurzeln.
Es handelt sich um ein rekursives Verfahren.
Die Erklärung erfolgt anhand eines Beispiels:
sqrt(51)
![]()
1.Schritt:
Wir wählen ein Rechteck dessen Fläche 51 groß ist und setzen für die beiden Rechteckseiten zum Start die trivialen Längen a1 = 1 und a2 = 51.
a1:= 51:
b1:= 1:
a1*b1
![]()
2.Schritt:
Wir nehmen den Mittelwert der beiden Rechteckseiten als eine neue Rechteckseite. Die andere Rechteckseiten bestimmen wir so, dass der Flächeninhalt jeweils 51 ist.
a2:= (a1+b1)/2:
b2:= 51/a2:
a2*b2
![]()
3.Schritt:
Wir nehmen den Mittelwert der beiden Rechteckseiten als eine neue Rechteckseite. Die andere Rechteckseiten bestimmen wir so, dass der Flächeninhalt jeweils 51 ist.
a3:= (a2+b2)/2:
b3:= 51/a3:
a3*b3
![]()
4.Schritt:
Wir nehmen den Mittelwert der beiden Rechteckseiten als eine neue Rechteckseite. Die andere Rechteckseiten bestimmen wir so, dass der Flächeninhalt jeweils 51 ist.
a4:= (a3+b3)/2:
b4:= 51/a4:
a4*b4
![]()
Erfolgskontrolle:
float(b4^2)
![]()
5.Schritt:
Wir nehmen den Mittelwert der beiden Rechteckseiten als eine neue Rechteckseite. Die andere Rechteckseiten bestimmen wir so, dass der Flächeninhalt jeweils 51 ist.
a5:= (a4+b4)/2:
b5:= 51/a5:
a5*b5
![]()
Erfolgskontrolle:
float(b5^2)
![]()
6.Schritt:
Wir nehmen den Mittelwert der beiden Rechteckseiten als eine neue Rechteckseite. Die andere Rechteckseiten bestimmen wir so, dass der Flächeninhalt jeweils 51 ist.
a6:=(a5+b5)/2:
b6:=51/a6:
a6*b6
![]()
Erfolgskontrolle:
float(a6^2)
![]()
Die Rechtecke nähern sich langsam einem Quadrat.
Die Recheckseiten nähern sich langsam der zu berechnenden Wurzel.
plot(
plot::Rectangle(0..a1,0..b1),
plot::Rectangle(0..a2,0..b2),
plot::Rectangle(0..a3,0..b3),
plot::Rectangle(0..a4,0..b4),
plot::Rectangle(0..a5,0..b5),
plot::Rectangle(0..a6,0..b6, Color = RGB::Red),
Scaling = Constrained,
Width = 160,
Height = 60
)

Das Heronverfahren läßt sich durch folgendes Programm automatisieren!
Die Anzahl n der auszuführenden Schritte wird standardmäßig auf 6 gesetzt. Optional kann die Schrittanzahl und Angabe des zweites Argumentes beim Aufruf des Programms Heron geändert werden.
Heron:= proc(A,n=6)
begin
M:= matrix(n+1,2);
M[1,1]:= A;
M[1,2]:= 1;
for i from 2 to n+1 do
M[i,1]:= float((M[i-1,1]+M[i-1,2]) / 2);
M[i,2]:= A / M[i,1];
end_for
end_proc
![]()
Heron(131)
![]()
M

Das Heronverfahren läßt sich durch folgendes Programm visualisieren:
Als Eingabe erhält plotHeron eine vom Programm Heron berechnete Matrix M.
plotHeron:= proc(M,n=0)
begin
if n = 0 or n > linalg::nrows(M) then n:= linalg::nrows(M) end_if;
plot(
plot::Rectangle(0..M[i,1],0..M[i,2],Color=RGB::Gray) $ i=1..n-1,
plot::Rectangle(0..M[n,1],0..M[n,2],Color=RGB::Red),
Header = "Visualisierung des Heron-Verfahrens für ".expr2text(M[1,1]),
HeaderAlignment = Right,
Scaling = Constrained,
Width = 160
)
end_proc
![]()
plotHeron(M)

plotHeron(M,3)

Das folgende Programm erstellt eine Animation des Heron-Verfahrens.
Als Eingabe erhält animateHeron eine vom Programm Heron berechnete Matrix M.
animateHeron:= proc(M,n=0)
begin
if n = 0 or n > linalg::nrows(M) then n:= linalg::nrows(M) end_if;
plot(
plot::Rectangle(0..M[i,1],0..M[i,2],Color=RGB::Gray,
VisibleAfter=i/n*3) $ i=1..n-1,
plot::Rectangle(0..M[n,1],0..M[n,2],Color=RGB::Red,
VisibleAfter=n/n*3),
Frames = n,
Header = "Animation des Heron-Verfahrens für ".expr2text(M[1,1]),
HeaderAlignment = Right,
Scaling = Constrained,
Width = 160
)
end_proc
![]()
animateHeron(M)

animateHeron(M,3)
