Вычислить интеграл методом Ньютона

Задача: решить интеграл методом ньютона, при этом использовать функцию для вычисления значения интегралов, передавая подынтегральную функцию в функцию integral() в качестве параметра. Интеграл - введите сюда описание изображения(N=15). Формула:введите сюда описание изображения Саму программу посчитал, но решает она неправильно. Получаемые значения меньше, чем должны быть. Проверял с помощью Вольфрама.

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

double ff(double x) {
    return cos(x) / (1 + sin(x) * sin(x));
}

double sf(double x) {
    return x * exp(x + 1) / 2;
}

double Integral(double a, double b, double (*f)(double), int N) {
    double h = (b - a) / N, result = f(a) + f(b), copy = a;
    for (int i = 1; i <= b - 1; i++)
    {
        copy += h;
        if (i % 3 == 0) result += 2 * f(copy);
        else
            result += 3 * f(copy);
    }
    return 3 * h / 8 * result;
}

int main() {
    printf("integral = %lf\n", Integral(1, 5, ff, 15));
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Собственно, простая описка — удивительно, что вы ее не заметили: не

for (int i = 1; i <= b - 1; i++)

а

for (int i = 1; i <= N - 1; i++)

и сразу получаете -1.464176, что очень близко к точному -1.46395... Возьмите N побольше — и вообще совпадет :)

→ Ссылка