Näherungsweise Berechnung einer Ableitung an einem Punkt in C

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labor lernen wir, wie man die Ableitung einer Funktion an einem bestimmten Punkt mit der C-Programmiersprache approximiert. Wir beginnen mit der Definition einer einfachen quadratischen Funktion und verwenden dann einen kleinen Wert h, um die numerische Ableitung mithilfe der Differenzenmethode zu berechnen. Schließlich geben wir die approximierte Ableitung aus. Dieses Labor zielt darauf ab, ein praktisches Verständnis der Ableitungsapproximation zu vermitteln, einem grundlegenden Konzept in der Analysis und der analytischen Geometrie.

Definition der Funktion f(x)

In diesem Schritt definieren wir eine mathematische Funktion f(x) in C, die zur Demonstration der Ableitungsapproximation verwendet wird. Wir erstellen eine einfache quadratische Funktion, um das Konzept zu veranschaulichen.

Erstellen Sie zunächst eine neue C-Datei im Verzeichnis ~/project:

cd ~/project
nano derivative_approximation.c

Schreiben Sie nun den Anfangscode für unsere Funktion:

#include <stdio.h>
#include <math.h>

// Definition einer quadratischen Funktion f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

int main() {
    double x = 2.0;  // Punkt, an dem wir die Ableitung approximieren
    printf("Funktion f(x) = x^2 + 2x + 1\n");
    printf("An der Stelle x = %.2f: f(x) = %.2f\n", x, f(x));

    return 0;
}

Kompilieren und führen Sie den Code aus, um unsere Funktion zu überprüfen:

gcc derivative_approximation.c -o derivative_approximation -lm
./derivative_approximation

Beispielausgabe:

Funktion f(x) = x^2 + 2x + 1
An der Stelle x = 2.00: f(x) = 9.00
Codeerklärung
  • Wir definieren eine quadratische Funktion f(x) = x^2 + 2x + 1
  • Die Funktion nimmt einen double-Eingabewert x entgegen und gibt einen double-Wert zurück.
  • In der Funktion main() zeigen wir die Auswertung der Funktion an der Stelle x = 2.
  • Wir verwenden printf(), um die Funktionsdetails und ihren Wert anzuzeigen.

Verwendung eines kleinen h und Berechnung von (f(x+h)-f(x))/h

In diesem Schritt modifizieren wir unseren vorherigen Code, um die Ableitung mithilfe der Differenzenmethode zu approximieren. Wir führen einen kleinen Wert h ein, um die numerische Ableitung zu berechnen.

Aktualisieren Sie die Datei derivative_approximation.c:

nano ~/project/derivative_approximation.c

Ersetzen Sie die vorherige main()-Funktion durch folgenden Code:

#include <stdio.h>
#include <math.h>

// Quadratische Funktion f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

// 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 = 0.0001;  // Kleiner Wert für die Differenzenmethode

    double approx_derivative = approximate_derivative(x, h);

    printf("Funktion: f(x) = x^2 + 2x + 1\n");
    printf("Approximation der Ableitung an der Stelle x = %.2f\n", x);
    printf("Schrittweite h = %.6f\n", h);
    printf("Approximierte Ableitung: %.4f\n", approx_derivative);

    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
Approximation der Ableitung an der Stelle x = 2.00
Schrittweite h = 0.000100
Approximierte Ableitung: 5.0001
Codeerklärung
  • Wir führen eine neue Funktion approximate_derivative() ein, die die Ableitung mit der Differenzenmethode berechnet.
  • h ist ein kleiner Wert (0.0001), der hilft, die momentane Änderungsrate zu approximieren.
  • Die Formel (f(x+h) - f(x)) / h approximiert die Ableitung an der Stelle x.
  • Wir geben den approximierten Ableitungswert aus.

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.

Zusammenfassung

In diesem Labor haben wir zunächst eine quadratische Funktion f(x) = x^2 + 2x + 1 in der C-Programmierung definiert. Anschließend haben wir einen kleinen Wert h eingeführt, um die Ableitung der Funktion mithilfe der Differenzenmethode, (f(x+h)-f(x))/h, zu approximieren. Schließlich haben wir den approximierten Ableitungswert ausgegeben.