Введение
В этом лабораторном практикуме мы изучим, как приблизить интеграл с помощью метода трапеций на языке 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.



