Ausgabe der Näherungslösung
In diesem Schritt erweitern wir unsere Implementierung der Newtonschen Methode, um detailliertere Informationen zur Approximation der Wurzel bereitzustellen.
Öffnen Sie die vorherige Datei newton_method.c
:
cd ~/project
nano newton_method.c
Aktualisieren Sie den Code, um die Ausgabe der Wurzelapproximation zu verbessern:
#include <stdio.h>
#include <math.h>
// Vorherige Funktions- und Methodendefinitionen bleiben gleich
double f(double x) {
return x * x - 4;
}
double f_derivative(double x) {
return 2 * x;
}
double newton_method(double initial_guess, int max_iterations, double tolerance) {
double x = initial_guess;
printf("Approximation der Wurzel mit der Newtonschen Methode\n");
printf("-----------------------------------------------------\n");
printf("Startwert: %f\n", x);
printf("Toleranz: %e\n", tolerance);
printf("Maximale Iterationen: %d\n\n", max_iterations);
for (int i = 0; i < max_iterations; i++) {
double fx = f(x);
double fpx = f_derivative(x);
if (fabs(fpx) < tolerance) {
printf("Fehler: Ableitung zu nahe an Null.\n");
return x;
}
double x_next = x - fx / fpx;
printf("Iteration %d:\n", i + 1);
printf(" Aktueller x-Wert: %f\n", x_next);
printf(" f(x): %f\n", f(x_next));
printf(" |x_next - x|: %e\n\n", fabs(x_next - x));
if (fabs(x_next - x) < tolerance) {
printf("Konvergenz erreicht!\n");
return x_next;
}
x = x_next;
}
printf("Maximale Iterationen erreicht.\n");
return x;
}
int main() {
double initial_guess = 1.0;
int max_iterations = 10;
double tolerance = 1e-6;
double root = newton_method(initial_guess, max_iterations, tolerance);
printf("Endergebnisse:\n");
printf("-------------\n");
printf("Näherungslösung der Wurzel: %f\n", root);
printf("f(Wurzel): %f\n", f(root));
printf("Absoluter Fehler: %e\n", fabs(f(root)));
return 0;
}
Kompilieren und ausführen:
gcc -o newton_method newton_method.c -lm
./newton_method
Beispielausgabe:
Approximation der Wurzel mit der Newtonschen Methode
-----------------------------------------------------
Startwert: 1.000000
Toleranz: 1.000000e-06
Maximale Iterationen: 10
Iteration 1:
Aktueller x-Wert: 2.500000
f(x): 2.250000
|x_next - x|: 1.500000e+00
Iteration 2:
Aktueller x-Wert: 2.050000
f(x): 0.202500
|x_next - x|: 4.500000e-01
... (weitere Iterationen)
Konvergenz erreicht!
Endergebnisse:
-------------
Näherungslösung der Wurzel: 2.000000
f(Wurzel): 0.000000
Absoluter Fehler: 0.000000e+00
Wichtige Verbesserungen:
- Detaillierte Informationen zu jeder Iteration
- Anzeige der Anfangsparameter
- Darstellung des Konvergenzfortschritts
- Ausgabe der Endergebnisse mit dem absoluten Fehler