Приближение производной в точке на C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме мы изучим, как приблизить производную функции в заданной точке, используя язык программирования C. Мы начнём с определения простой квадратичной функции, затем воспользуемся малым значением h для вычисления численной производной методом конечных разностей. Наконец, мы выведем приближённое значение производной. Данный практикум призван обеспечить практическое понимание приближения производной, являющегося фундаментальным понятием в математическом анализе и аналитической геометрии.

Определение функции f(x)

На этом шаге мы определим математическую функцию f(x) на языке C, которая будет использована для демонстрации приближения производной. Мы создадим простую квадратичную функцию, чтобы проиллюстрировать этот концепцию.

Сначала создадим новый файл C в каталоге ~/project:

cd ~/project
nano derivative_approximation.c

Теперь напишем начальный код для нашей функции:

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

// Определим квадратичную функцию f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

int main() {
    double x = 2.0;  // Точка, в которой мы будем приближать производную
    printf("Функция f(x) = x^2 + 2x + 1\n");
    printf("Вычислено в точке x = %.2f: f(x) = %.2f\n", x, f(x));

    return 0;
}

Скомпилируем и запустим код, чтобы проверить нашу функцию:

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

Пример вывода:

Функция f(x) = x^2 + 2x + 1
Вычислено в точке x = 2.00: f(x) = 9.00
Объяснение кода
  • Мы определяем квадратичную функцию f(x) = x^2 + 2x + 1
  • Функция принимает входное значение double x и возвращает результат double
  • В функции main() мы демонстрируем вычисление функции в точке x = 2
  • Мы используем printf(), чтобы отобразить информацию о функции и её значении

Использование малого h и вычисление (f(x+h)-f(x))/h

На этом шаге мы изменим предыдущий код, чтобы приблизить производную с помощью метода конечных разностей. Мы введём малое значение h для вычисления численной производной.

Обновим файл derivative_approximation.c:

nano ~/project/derivative_approximation.c

Замените предыдущую функцию main() следующим кодом:

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

// Квадратичная функция f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

// Приближение производной методом конечных разностей
double approximate_derivative(double x, double h) {
    return (f(x + h) - f(x)) / h;
}

int main() {
    double x = 2.0;  // Точка для приближения производной
    double h = 0.0001;  // Малое значение для метода конечных разностей

    double approx_derivative = approximate_derivative(x, h);

    printf("Функция: f(x) = x^2 + 2x + 1\n");
    printf("Приближение производной в точке x = %.2f\n", x);
    printf("Шаг h = %.6f\n", h);
    printf("Приближённая производная: %.4f\n", approx_derivative);

    return 0;
}

Скомпилируйте и запустите обновлённый код:

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

Пример вывода:

Функция: f(x) = x^2 + 2x + 1
Приближение производной в точке x = 2.00
Шаг h = 0.000100
Приближённая производная: 5.0001
Объяснение кода
  • Мы ввели новую функцию approximate_derivative(), которая вычисляет производную с помощью метода конечных разностей
  • h — малое значение (0.0001), которое помогает приблизить мгновенную скорость изменения
  • Формула (f(x+h) - f(x)) / h приближает производную в точке x
  • Мы выводим значение приближённой производной

Вывод приближённой производной

На этом шаге мы расширим программу приближения производной, чтобы сравнить численное приближение с аналитической производной и вывести результаты более информативным способом.

Обновите файл derivative_approximation.c:

nano ~/project/derivative_approximation.c

Замените предыдущий код следующим:

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

// Квадратичная функция f(x) = x^2 + 2x + 1
double f(double x) {
    return x * x + 2 * x + 1;
}

// Аналитическая производная f(x)
double analytical_derivative(double x) {
    return 2 * x + 2;
}

// Приближение производной методом конечных разностей
double approximate_derivative(double x, double h) {
    return (f(x + h) - f(x)) / h;
}

int main() {
    double x = 2.0;  // Точка для приближения производной
    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("Функция: f(x) = x^2 + 2x + 1\n");
    printf("Точка производной: x = %.2f\n", x);
    printf("Аналитическая производная: %.4f\n\n", true_derivative);

    printf("Результаты приближения производной:\n");
    printf("-----------------------------------\n");
    printf("Шаг (h)   Приближённая производная   Ошибка\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;
}

Скомпилируйте и запустите обновлённый код:

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

Пример вывода:

Функция: f(x) = x^2 + 2x + 1
Точка производной: x = 2.00
Аналитическая производная: 6.0000

Результаты приближения производной:
-----------------------------------
Шаг (h)   Приближённая производная   Ошибка
-----------------------------------
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
Объяснение кода
  • Добавлена функция analytical_derivative() для вычисления точной производной
  • Создан массив различных шагов h для демонстрации сходимости
  • Используется цикл для вывода приближений с различными шагами
  • Вычисляется и отображается ошибка между аналитической и численной производными
  • Демонстрируется, как меньшие значения h приводят к более точным приближениям

Резюме

В этом лабораторном практикуме мы сначала определили квадратичную функцию f(x) = x^2 + 2x + 1 на языке программирования C. Затем мы ввели малое значение h, чтобы приблизить производную функции с помощью метода конечных разностей, (f(x+h)-f(x))/h. Наконец, мы вывели значение приближённой производной.