Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С (для ИВТ) / Готовые лабы С / Лаба5 / Laba 5 (3)
.c#include <stdio.h>
#include <math.h>
// Функция вычисления интеграла методом парабол (Симпсона)
double Integral(double a, double b, int n, double (*f)(double)) {
if (n % 2 != 0) n++; // Метод Симпсона требует четное n
double h = (b - a) / n;
double sum = f(a) + f(b);
for (int i = 1; i < n; i++) {
double x = a + i * h;
if (i % 2 == 0) {
sum += 2 * f(x);
} else {
sum += 4 * f(x);
}
}
return (h / 3) * sum;
}
// Первая подынтегральная функция: 1/x
double f1(double x) {
return 1.0 / x;
}
// Вторая подынтегральная функция: sqrt(4 - x³)
double f2(double x) {
return sqrt(4 - x*x*x);
}
int main() {
double a1 = 1.0, b1 = 2.0; // Пределы для первого интеграла
double a2 = 0.0, b2 = pow(4, 1.0/3.0); // Пределы для второго интеграла (верхний предел: кубический корень из 4)
int n = 10; // Количество разбиений
printf("Numerical integration using Simpson's method (n = %d)\n\n", n);
// Вычисление первого интеграла
double result1 = Integral(a1, b1, n, f1);
printf("Integral 1: [1/x] from %.2f to %.2f\n", a1, b1);
printf("Result: %.6f\n\n", result1);
// Вычисление второго интеграла
double result2 = Integral(a2, b2, n, f2);
printf("Integral 2: [sqrt(4 - x^3)] from %.2f to %.2f\n", a2, b2);
printf("Result: %.6f\n", result2);
// Сравнение с аналитическим решением для первого интеграла
double exact1 = log(b1) - log(a1);
printf("\nExact value for integral 1: %.6f\n", exact1);
printf("Error: %.6f\n", fabs(result1 - exact1));
return 0;
}
Соседние файлы в папке Лаба5
