19: Funktionen 3 – Berechnen und Zeichnen der Wurzelfunktion

 

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.

Zeichnen Sie die Funktion \sqrt x für ein gegebenes Intervall mit Hilfe eines Grafikobjektes.

Lösung

Zur Lösung dieser Aufgabe wird die Datei unibwm.jar benötigt. Sie kann in der Eclipse Umgebung in den Projektoptionen unter “add external jar” hinzugefügt werden.

Berechnung einer beliebigen Wurzel

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

public class Aufgabe19
{
	public static double Wurzel(double dZahl, double dEPS)
	{ // berechnet die Wurzel aus dZahl mit der gewählten Genauigkeit
		// Variablen Deklaration
		double dErgebnis, dAbweichung;
		int iSchritte;

		// Variablen Initialisierung
		dErgebnis = 1;
		iSchritte = 0;

		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("Benötigte Schritte: "+iSchritte);
		return dErgebnis;
	} // end Wurzel

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

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

		System.out.println("Ergebnis: "+ Wurzel(dZahl, dEPS));
	} // end main
} // end class

Zeichnen der Wurzelfunktion im gegebenen Intervall

import java.util.Scanner; 	// Scanner für die Eingabe von Werten
import unibwm.*;			// Grafik für die Ausgabe der Funktion

public class Aufgabe19b
{
	public static double Wurzel(double dZahl, double dEPS)
	{ // berechnet die Wurzel der gewünschten Zahl mit angegebener Genauigkeit
		// Variablen Deklaration
		double dErgebnis, dAbweichung;

		// Variablen Initialisierung
		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.;
		} // end do
		while (dAbweichung > dEPS);

		return dErgebnis;
	} // end Wurzel

	public static void main(String[] args)
	{
		// Variablen Deklaration
		Scanner scnEingabe = new Scanner(System.in);
		Grafik gfkAusgabe = new Grafik();

		// Variablen Initialisierung
		double dEPS = .0001;
		System.out.print("linke Grenze: ");
		double dLinkeGrenze = scnEingabe.nextDouble();
		System.out.print("rechte Grenze: ");
		double dRechteGrenze = scnEingabe.nextDouble();

		// Berechnung aller Werte der Wurzelfunktion im Intervall
		for (double d = dLinkeGrenze; d < dRechteGrenze; ++ d)
			gfkAusgabe.addLine(d, Wurzel(d, dEPS) * 10, d+1,
					Wurzel(d+1, dEPS) * 10);

		gfkAusgabe.show("Ausgabe zu Aufgabe 19b");
	} // end main
} // end class