Ausgabe der Approximationen
In diesem Schritt erweitern Sie das Programm, um detaillierte Approximationsergebnisse auszugeben und diese mit der tatsächlichen Ableitung zu vergleichen.
Öffnen Sie die vorherige Datei und modifizieren Sie den Code, um eine umfassende Ausgabe einzubeziehen:
cd ~/project
nano finite_difference.c
Aktualisieren Sie den Code mit der detaillierten Ausgabe der Approximationen:
#include <stdio.h>
#include <math.h>
// Die Funktion f(x) definieren
double f(double x) {
return x * x; // Beispielfunktion: f(x) = x^2
}
// Funktion für die tatsächliche Ableitung
double actual_derivative(double x) {
return 2 * x; // Ableitung von x^2 ist 2x
}
int main() {
// Definieren Sie mehrere Schrittweiten zum Vergleich
double step_sizes[] = {0.1, 0.01, 0.001, 0.0001};
int num_steps = sizeof(step_sizes) / sizeof(step_sizes[0]);
// Punkt, an dem die Ableitung ausgewertet werden soll
double x = 2.0;
// Tatsächlicher Ableitungswert
double true_derivative = actual_derivative(x);
printf("Analyse der Ableitungsapproximation\n");
printf("------------------------------------\n");
printf("Funktion: f(x) = x^2\n");
printf("Auswertungspunkt: x = %f\n", x);
printf("Wahre Ableitung: %f\n\n", true_derivative);
printf("Schrittweite | Vorwärtsdiff | Rückwärtsdiff | Vorwärtsfehler | Rückwärtsfehler\n");
printf("-------------------------------------------------------------------------\n");
// Berechnen und ausgeben Sie Approximationen für verschiedene Schrittweiten
for (int i = 0; i < num_steps; i++) {
double h = step_sizes[i];
// Vorwärtsdifferenz-Approximation
double forward_diff = (f(x + h) - f(x)) / h;
// Rückwärtsdifferenz-Approximation
double backward_diff = (f(x) - f(x - h)) / h;
// Absoluten Fehler berechnen
double forward_error = fabs(forward_diff - true_derivative);
double backward_error = fabs(backward_diff - true_derivative);
printf("%9f | %11f | %12f | %11f | %12f\n",
h, forward_diff, backward_diff, forward_error, backward_error);
}
return 0;
}
Kompilieren und ausführen Sie das Programm:
gcc -o finite_difference finite_difference.c -lm
./finite_difference
Beispielausgabe:
Analyse der Ableitungsapproximation
------------------------------------
Funktion: f(x) = x^2
Auswertungspunkt: x = 2.000000
Wahre Ableitung: 4.000000
Schrittweite | Vorwärtsdiff | Rückwärtsdiff | Vorwärtsfehler | Rückwärtsfehler
-------------------------------------------------------------------------
0.100000 | 4.100000 | 3.900000 | 0.100000 | 0.100000
0.010000 | 4.010000 | 3.990000 | 0.010000 | 0.010000
0.001000 | 4.001000 | 3.999000 | 0.001000 | 0.001000
0.000100 | 4.000100 | 3.999900 | 0.000100 | 0.000100
Wichtige Beobachtungen:
- Mit abnehmender Schrittweite
h
wird die Approximation genauer.
- Vorwärts- und Rückwärtsdifferenzen konvergieren gegen die wahre Ableitung.
- Der Fehler verringert sich mit kleineren Schrittweiten.