13: Schleifen 6 – Berechnung der Wurzel einer Zahl

 

Bestimmen Sie die Wurzel einer Zahl a iterativ nach folgender Formel:

x_{n+1}  = \frac{1} {2}\left( {x_n +\frac{a} {{x_n }}} \right)

Brechen Sie die Iteration ab, wenn

\left| {\frac{{x_{n-1} -x_n }} {{x_n }}} \right| < eps

Lesen Sie den Wert a sowie die Genauigkeitsschranke eps ein und geben Sie die Werte von n sowie xn+1 aus.

Lösung

import java.util.Scanner; 	// Scanner für die Eingabe von Werten

public class Aufgabe13
{
	public static void main(String[] args)
	{
		// Variablen Deklaration
		Scanner scnEingabe = new Scanner(System.in);
		double dZahl, dErgebnis, dEPS, dAbweichung;
		int iSchritte;

		// Variablen Initialisierung
		iSchritte = 0;
		System.out.print("Wurzel aus der Zahl: ");
		dZahl = scnEingabe.nextDouble();
		System.out.print("wird berechnet mit der Genauigkeit: ");
		dEPS = scnEingabe.nextDouble();
		dErgebnis = 1;

		do
		{ // Schleife aktualisiert das Ergebnis mit der gegebenen Formel
			double dPrev = dErgebnis;
			dErgebnis = (.5 * (dErgebnis+dZahl / dErgebnis));
			dAbweichung = (dErgebnis-dPrev) / dPrev;
			if (dAbweichung < 0)
				dAbweichung *= -1.;
			++ iSchritte;
		} // end do
		while (dAbweichung > dEPS);

		System.out.println("Ergebnis nach "+iSchritte
				+ " Schritten: "+dErgebnis);
		System.out.println("Vergleich: Wurzel aus "+dZahl+" ist: "
				+ Math.sqrt(dZahl));
	} // end main
} // end class