Ausgabe der Näherungsableitung
In diesem Schritt erweitern wir unser Programm zur Ableitungsapproximation, um die numerische Näherung mit der analytischen Ableitung zu vergleichen und die Ergebnisse informativer darzustellen.
Aktualisieren Sie die Datei derivative_approximation.c
:
nano ~/project/derivative_approximation.c
Ersetzen Sie den vorherigen Code durch folgenden:
#include <stdio.h>
#include <math.h>
// Quadratische Funktion f(x) = x^2 + 2x + 1
double f(double x) {
return x * x + 2 * x + 1;
}
// Analytische Ableitung von f(x)
double analytical_derivative(double x) {
return 2 * x + 2;
}
// Näherung der Ableitung mit der Differenzenmethode
double approximate_derivative(double x, double h) {
return (f(x + h) - f(x)) / h;
}
int main() {
double x = 2.0; // Punkt der Ableitungsapproximation
double h_values[] = {1e-1, 1e-2, 1e-3, 1e-4, 1e-5};
int num_h = sizeof(h_values) / sizeof(h_values[0]);
double true_derivative = analytical_derivative(x);
printf("Funktion: f(x) = x^2 + 2x + 1\n");
printf("Ableitungspunkt: x = %.2f\n", x);
printf("Analytische Ableitung: %.4f\n\n", true_derivative);
printf("Ergebnisse der Ableitungsapproximation:\n");
printf("-----------------------------------\n");
printf("Schrittweite (h) Näherungsableitung Fehler\n");
printf("-----------------------------------\n");
for (int i = 0; i < num_h; i++) {
double h = h_values[i];
double approx_derivative = approximate_derivative(x, h);
double error = fabs(true_derivative - approx_derivative);
printf("%.1e %.4f %.6f\n",
h, approx_derivative, error);
}
return 0;
}
Kompilieren und ausführen des aktualisierten Codes:
gcc derivative_approximation.c -o derivative_approximation -lm
./derivative_approximation
Beispielausgabe:
Funktion: f(x) = x^2 + 2x + 1
Ableitungspunkt: x = 2.00
Analytische Ableitung: 6.0000
Ergebnisse der Ableitungsapproximation:
-----------------------------------
Schrittweite (h) Näherungsableitung Fehler
-----------------------------------
1.0e-01 6.2000 0.200000
1.0e-02 6.0200 0.020000
1.0e-03 6.0020 0.002000
1.0e-04 6.0002 0.000200
1.0e-05 6.0000 0.000020
Codeerklärung
- Hinzugefügte Funktion
analytical_derivative()
zur Berechnung der exakten Ableitung.
- Erstellte ein Array mit verschiedenen Schrittweiten
h
, um die Konvergenz zu demonstrieren.
- Verwendung einer Schleife zum Drucken der Näherungen mit verschiedenen Schrittweiten.
- Berechnung und Anzeige des Fehlers zwischen analytischer und numerischer Ableitung.
- Demonstriert, wie kleinere
h
-Werte zu genaueren Näherungen führen.