Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.03 Кб
Скачать
#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