Приближение интеграла методом трапеций на C

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

Введение

В этом лабораторном практикуме мы изучим, как приблизить интеграл с помощью метода трапеций на языке C. Практикум охватывает следующие шаги: 1) определение функции f(x) и интервала [a, b], 2) разбиение интервала и применение формулы трапеций для вычисления приближенного интеграла, и 3) вывод конечного результата. Цель этого практикума — дать практическое понимание методов численного интегрирования с использованием языка программирования C.

Определение f(x) и интервала [a,b]

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

Сначала создадим новый файл исходного кода C для реализации приближения интеграла:

cd ~/project
nano integral_approximation.c

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

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

// Определение функции для интегрирования f(x)
double f(double x) {
    // Пример: f(x) = x^2
    return x * x;
}

int main() {
    // Определение интервала [a, b]
    double a = 0.0;  // Нижняя граница
    double b = 1.0;  // Верхняя граница

    printf("Приближение интеграла\n");
    printf("Функция: f(x) = x^2\n");
    printf("Интервал: [%.2f, %.2f]\n", a, b);

    return 0;
}

Скомпилируем и запустим код для проверки:

gcc -o integral_approximation integral_approximation.c -lm
./integral_approximation

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

Приближение интеграла
Функция: f(x) = x^2
Интервал: [0.00, 1.00]

В этом коде мы определили:

  • Функцию f(x), возвращающую x^2
  • Интервал [a, b] от 0 до 1
  • Вывели информацию о функции и интервале

Функцию f(x) можно изменить, чтобы представить любую математическую функцию, которую вы хотите интегрировать.

Разбиение интервала и применение формулы трапеций

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

Откройте предыдущий исходный файл и обновите код:

cd ~/project
nano integral_approximation.c

Замените содержимое следующим реализацией:

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

// Определение функции для интегрирования f(x)
double f(double x) {
    return x * x;
}

// Реализация метода трапеций
double trapezoidalRule(double a, double b, int n) {
    double h = (b - a) / n;  // Ширина каждой трапеции
    double sum = 0.5 * (f(a) + f(b));  // Первая и последняя точки

    for (int i = 1; i < n; i++) {
        double x = a + i * h;
        sum += f(x);
    }

    return sum * h;
}

int main() {
    // Определение интервала [a, b]
    double a = 0.0;  // Нижняя граница
    double b = 1.0;  // Верхняя граница
    int n = 100;     // Количество трапеций

    double approximateIntegral = trapezoidalRule(a, b, n);

    printf("Приближение интеграла\n");
    printf("Функция: f(x) = x^2\n");
    printf("Интервал: [%.2f, %.2f]\n", a, b);
    printf("Количество трапеций: %d\n", n);
    printf("Приближенный интеграл: %.6f\n", approximateIntegral);

    return 0;
}

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

gcc -o integral_approximation integral_approximation.c -lm
./integral_approximation

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

Приближение интеграла
Функция: f(x) = x^2
Интервал: [0.00, 1.00]
Количество трапеций: 100
Приближенный интеграл: 0.333333

Ключевые моменты этой реализации:

  • Функция trapezoidalRule() вычисляет приближенный интеграл
  • h представляет ширину каждой трапеции
  • n определяет количество трапеций для приближения
  • Увеличение n повышает точность приближения

Вывод приближенного значения интеграла

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

Откройте предыдущий исходный файл и обновите код:

cd ~/project
nano integral_approximation.c

Измените код, чтобы включить более подробный вывод:

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

// Определение функции для интегрирования f(x)
double f(double x) {
    return x * x;
}

// Точное вычисление интеграла для x^2 от 0 до 1
double exactIntegral() {
    return 1.0 / 3.0;
}

// Реализация метода трапеций
double trapezoidalRule(double a, double b, int n) {
    double h = (b - a) / n;  // Ширина каждой трапеции
    double sum = 0.5 * (f(a) + f(b));  // Первая и последняя точки

    for (int i = 1; i < n; i++) {
        double x = a + i * h;
        sum += f(x);
    }

    return sum * h;
}

int main() {
    // Определение интервала [a, b]
    double a = 0.0;  // Нижняя граница
    double b = 1.0;  // Верхняя граница
    int n = 100;     // Количество трапеций

    double approximateIntegral = trapezoidalRule(a, b, n);
    double exact = exactIntegral();
    double error = fabs(approximateIntegral - exact);
    double percentError = (error / exact) * 100.0;

    // Форматированный вывод с подробной информацией
    printf("Результаты приближенного вычисления интеграла\n");
    printf("---------------------------------------------\n");
    printf("Функция:            f(x) = x^2\n");
    printf("Интервал:            [%.2f, %.2f]\n", a, b);
    printf("Количество трапеций: %d\n", n);
    printf("\nЧисленные результаты:\n");
    printf("Приближенный интеграл: %.6f\n", approximateIntegral);
    printf("Точный интеграл:       %.6f\n", exact);
    printf("\nАнализ погрешности:\n");
    printf("Абсолютная погрешность: %.6f\n", error);
    printf("Относительная погрешность: %.4f%%\n", percentError);

    return 0;
}

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

gcc -o integral_approximation integral_approximation.c -lm
./integral_approximation

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

Результаты приближенного вычисления интеграла
---------------------------------------------
Функция:            f(x) = x^2
Интервал:            [0.00, 1.00]
Количество трапеций: 100

Численные результаты:
Приближенный интеграл: 0.333333
Точный интеграл:       0.333333

Анализ погрешности:
Абсолютная погрешность: 0.000000
Относительная погрешность: 0.0000%

Основные улучшения в этой версии:

  • Добавлена функция exactIntegral() для сравнения численного результата.
  • Вычислены абсолютная и относительная погрешности.
  • Предоставлен более подробный и форматированный вывод.

Резюме

В этом лабораторном практикуме мы изучили, как приблизить значение интеграла с помощью метода трапеций на языке C. Сначала мы определили математическую функцию f(x) и интервал [a, b] для численного интегрирования. Затем мы реализовали метод трапеций, разделив интервал и применив формулу для вычисления приближенного значения интеграла. Наконец, мы вывели результат приближенного вычисления интеграла.

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