Я пытаюсь вычислить интеграл от функции f (x) = (1-x ^ 2) ^ (1/2) от x = 0 до x = 1.Ответ должен быть примерно пи / 4.В настоящее время я получаю 2.
Моя текущая реализация правила трапеции выглядит следующим образом:
double
def_integral(double *f, double *x, int n)
{
double F;
for (int i = 0 ; i < n ; i++) {
F += 0.5 * ( x[i+1] - x[i] ) * ( f[i] + f[i+1] );
}
return F;
}
Я создаю N делений для аппроксимации области под кривой между x_1 = 0 и x_N = 1 путем циклического перехода от i к N с x_i = i / N.
int
main(int argc, char **argv)
{
int N = 1000;
double f_x[N];
double x[N];
for (int i = 0 ; i <= N ; i++) {
double x = i * 1. / N;
f_x[i] = sqrt(1. - pow(x, 2.));
//printf("%.2f %.5f\n", x, f_x[i]); //uncomment if you wanna see function values
}
double F_x = def_integral(f_x, x, N);
printf("The integral is %g\n", F_x);
}
Результат 2, который я получаю в настоящее время, должен зависеть от числа делений N, однако, независимо от того, получу я N = 10000 или N = 100, я все равно получу 2.
Есть предложения?