Wurzelziehen nach dem Verfahren von Heron (Algorithmen)
Berechnen Sie die Quadratwurzel a einer Zahl A, mit dem Verfahren von HeronHeron von Alexandria (ca. 1. Jh. v. Chr.). Dabei wird die Hälfte von A als erste Näherung a1 verwendet. Jede weitere Näherung ai+1 wird berechnet durch die Formel a_{i+1} := (A + a_i^2) / 2a_i.
Als Code: a := (A + a*a) / (2 * a)
Begründung:
d = a_i - a und
d * 2a_i \approx (a_i^2 - A)
\Longrightarrow(a_i - a) * 2a_i \approx (a_i^2 - A)
\Longrightarrow2a_ia\approx A + a^2_i
\Longrightarrow a_{i+1} := (A + a_i^2) / 2a_i\approx a
Zusatzaufgabe: Berechnen Sie die Kubikwurzel (3. Wurzel) einer Zahl nach dem folgenden Verfahren: a_{i+1} := (A + 2a_i^3)/3 a_i^2
1 Kommentare
5 Lösung(en)
import java.util.Scanner;
public class Heron {
public static void main(String[] args) {
new Heron().top(); }
void top() {
double flaeche = einlesen("Flaeche");
double wurzel = wurzel(flaeche, 0.000001);
ausgabe(wurzel);
}
double einlesen(String input) {
Scanner sc = new Scanner(System.in);
System.out.println("Bitte geben Sie " + input + " ein:");
return sc.nextDouble(); }
void ausgabe(double wert) {
System.out.println("Das Resultat ist: " + wert); }
double wurzel(double a, double genauigkeit) {
double resultat = a / 2;
while(ungenau(resultat * resultat, a, genauigkeit)) {
resultat = (resultat * resultat + a) / (2 * resultat); // oder gekürzt:
//resultat = (resultat + a / resultat) / (2);
}
return resultat; }
boolean ungenau(double ist, double soll, double genauigkeit) {
return Math.abs(ist - soll) > genauigkeit;
}
} // end of class Heron
package ch.santis.buch.kapitel9;
public class Heron {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Heron().run();
}
public void run()
{
System.out.println(quadratwurzel(20736));
}
public double quadratwurzel(double A)
{
int N = 15;
double a1 = A / 2.0;
double a = a1;
double ax;
for(int i=0; i<N; i++)
{
ax = (A + a * a) / ( 2 * a);
a = ax;
}
return a;
}
}
Lösung von: David Zeindler ()
# Wurzelziehen nach dem Verfahren von Heron
def quadratwurzel(A):
N = 15
a = A / 2.0
i = 0
while i < N:
a = (A + a * a) / ( 2 * a)
i += 1
return a
print( quadratwurzel(5) )
Lösung von: Alex Groeg (Freies Lernen)
zahl = float(input("Bitte eine Zahl eingeben: "))
a = float(zahl / 2)
for i in range(100): # 100 Iterationen
a = (zahl + a*a) / (2 * a)
print("Quadratwurzel von", zahl, "ist:", a)
# Zusatzaufgabe 3. Wurzel
zahl = float(input("Bitte eine Zahl eingeben: "))
a = float(zahl / 3) # Startwert ausgedacht
temp = 0.
while True:
a = (zahl + 2 * a * a * a) / (3 * a * a)
if abs(temp - a) < 1.e-15:
break
temp = a
print("3. Wurzel von", zahl, "ist:", a)
Lösung von: Peter Pan (Home Office)
function babelRoot(num, opts) {
opts = opts || {};
let res = num / 2,
nRoot = opts.nRoot || 2,
prec = opts.prec || 6;
if (nRoot != 2 && nRoot != 3) return undefined;
for (let i = 1; i <= prec; i++) {
if (nRoot == 2)
res = (num + res ** 2) / (2 * res);
else
res = (num + res ** 3) / (3 * res ** 2);
}
return res;
}
console.log( babelRoot(5) );
console.log( babelRoot(5, {prec: 3}) );
console.log( babelRoot(5, {nRoot: 3}) );
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
Verifikation/Checksumme:
5 -> 2.236067977
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 1 |
Schwierigkeit: | k.A. |
Webcode: | kugc-tg53 |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |
Kommentare (1)