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