Введение
В этом лабораторном практикуме вы научитесь приближённо вычислять интеграл с помощью правила Симпсона на языке C. Практикум охватывает пошаговый процесс определения интегрируемой функции, интервала интегрирования и реализации алгоритма правила Симпсона для вычисления приближённого интеграла. По завершении этого практикума у вас будет работающая программа на языке C, способная численно интегрировать заданную функцию на заданном интервале с помощью метода Симпсона.
Практикум состоит из двух основных этапов: определения функции и интервала, а затем использования правила Симпсона с чётным числом подынтервалов для вычисления приближённого интеграла. Это практическое упражнение поможет вам получить практический опыт применения методов численного интегрирования в программировании на языке C.
Определение f(x) и интервала [a, b]
На этом шаге мы подготовим базовые компоненты для реализации правила Симпсона для численного интегрирования на языке C. Мы определим функцию, подлежащую интегрированию, и укажем интервал интегрирования.
Сначала создадим новый файл C в каталоге ~/project:
cd ~/project
nano simpson_integration.c
Теперь напишем начальный код для определения нашей функции и интервала:
#include <stdio.h>
#include <math.h>
// Функция для интегрирования: f(x) = x^2
double f(double x) {
return x * x;
}
int main() {
// Определение интервала интегрирования [a, b]
double a = 0.0; // Нижняя граница
double b = 1.0; // Верхняя граница
printf("Интегрирование f(x) = x^2 от %f до %f\n", a, b);
return 0;
}
Рассмотрим код подробнее:
- Мы включаем необходимые заголовочные файлы:
stdio.hдля ввода/вывода иmath.hдля математических функций. f(x)определена как простая квадратичная функция x^2, которую мы будем интегрировать.- В
main()мы задаём интервал интегрирования от 0 до 1. - Мы выводим интервал для наглядности.
Компилируем и запускаем код для проверки:
gcc simpson_integration.c -o simpson_integration -lm
./simpson_integration
Пример вывода:
Интегрирование f(x) = x^2 от 0.000000 до 1.000000
Использование правила Симпсона с чётным числом подынтервалов
На этом шаге мы реализуем алгоритм правила Симпсона для приближённого вычисления определённого интеграла нашей функции. Мы добавим функцию интегрирования в нашу существующую программу на C.
Откройте предыдущий файл:
cd ~/project
nano simpson_integration.c
Обновите код, включив реализацию правила Симпсона:
#include <stdio.h>
#include <math.h>
// Функция для интегрирования: f(x) = x^2
double f(double x) {
return x * x;
}
// Реализация правила Симпсона
double simpsons_rule(double a, double b, int n) {
double h = (b - a) / n; // Ширина каждого подынтервала
double sum = f(a) + f(b); // Первая и последняя точки
// Вычисляем сумму для чётных и нечётных точек
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += (i % 2 == 0 ? 2 : 4) * f(x);
}
return (h / 3) * sum;
}
int main() {
// Определение интервала интегрирования [a, b]
double a = 0.0; // Нижняя граница
double b = 1.0; // Верхняя граница
int n = 100; // Число подынтервалов (должно быть чётным)
double integral = simpsons_rule(a, b, n);
printf("Интеграл от f(x) = x^2 от %f до %f\n", a, b);
printf("Приближение с помощью правила Симпсона с %d подынтервалами: %f\n", n, integral);
return 0;
}
Компилируем и запускаем код:
gcc simpson_integration.c -o simpson_integration -lm
./simpson_integration
Пример вывода:
Интеграл от f(x) = x^2 от 0.000000 до 1.000000
Приближение с помощью правила Симпсона с 100 подынтервалами: 0.333333
Рассмотрим реализацию правила Симпсона:
simpsons_rule()принимает границы интервала и число подынтервалов.hвычисляет ширину каждого подынтервала.- Начинаем с первой и последней точек интервала.
- Цикл добавляет взвешенные значения от промежуточных точек.
- Чётные точки умножаются на 2, нечётные — на 4.
- Конечный результат масштабируется на h/3.
Вывод приближённого значения интеграла
На этом заключительном шаге мы улучшим нашу реализацию правила Симпсона, добавив более подробный вывод и сравнив численное приближение с точным значением интеграла.
Откройте предыдущий файл:
cd ~/project
nano simpson_integration.c
Обновите код, включив более подробный вывод:
#include <stdio.h>
#include <math.h>
// Функция для интегрирования: f(x) = x^2
double f(double x) {
return x * x;
}
// Точное вычисление интеграла для f(x) = x^2 от a до b
double exact_integral(double a, double b) {
return (pow(b, 3) - pow(a, 3)) / 3.0;
}
// Реализация правила Симпсона
double simpsons_rule(double a, double b, int n) {
double h = (b - a) / n; // Ширина каждого подынтервала
double sum = f(a) + f(b); // Первая и последняя точки
// Вычисляем сумму для чётных и нечётных точек
for (int i = 1; i < n; i++) {
double x = a + i * h;
sum += (i % 2 == 0 ? 2 : 4) * f(x);
}
return (h / 3) * sum;
}
int main() {
// Определение интервала интегрирования [a, b]
double a = 0.0; // Нижняя граница
double b = 1.0; // Верхняя граница
int n = 100; // Число подынтервалов (должно быть чётным)
// Вычисление приближения и точного интеграла
double approx_integral = simpsons_rule(a, b, n);
double exact_value = exact_integral(a, b);
double error = fabs(exact_value - approx_integral);
// Вывод подробных результатов
printf("Результаты приближения интеграла:\n");
printf("------------------------------\n");
printf("Функция: f(x) = x^2\n");
printf("Интервал: [%.2f, %.2f]\n", a, b);
printf("Число подынтервалов: %d\n\n", n);
printf("Приближение (правило Симпсона): %.6f\n", approx_integral);
printf("Точное значение: %.6f\n", exact_value);
printf("Абсолютная погрешность: %.6f\n", error);
printf("Относительная погрешность: %.4f%%\n", (error / exact_value) * 100);
return 0;
}
Компилируем и запускаем код:
gcc simpson_integration.c -o simpson_integration -lm
./simpson_integration
Пример вывода:
Результаты приближения интеграла:
------------------------------
Функция: f(x) = x^2
Интервал: [0.00, 1.00]
Число подынтервалов: 100
Приближение (правило Симпсона): 0.333333
Точное значение: 0.333333
Абсолютная погрешность: 0.000000
Относительная погрешность: 0.0000%
Ключевые дополнения на этом шаге:
- Добавлена функция
exact_integral()для вычисления точного значения интеграла. - Вычислены абсолютная и относительная погрешности.
- Создан отформатированный вывод, отображающий подробные результаты интегрирования.
Резюме
В этом лабораторном практикуме мы сначала определили функцию для интегрирования, f(x) = x^2, и интервал интегрирования [a, b] = [0, 1]. Затем мы реализовали алгоритм правила Симпсона для приближённого вычисления определённого интеграла функции. Правило Симпсона предполагает деление интервала на чётное число подынтервалов и вычисление взвешенной суммы значений функции в конечных точках и серединах этих подынтервалов. Наконец, мы выведем приближённое значение интеграла, полученное с помощью правила Симпсона.



