вот был код изначально
#include<stdio.h>
#include<math.h>
int main()
{
int i ,n;
double sum,a,b,h,x,delta;
a=0.0;
b=1.0;
n=100;
h=(b-a)/double(n);
sum=0.0;
//printf("h=%.16lf\n")
for(i=1;i<=n;i++)
{
x=a+h*(double(i)-0.5);
sum=sum+10.0*pow(x,9.0);
}
sum=sum*h;
delta=1.0-sum;
printf("h=%.16lf, delta=%.16lf\n",h,delta);
}
eps(n) /eps(2n) =2^y. y - и есть порядок погрешности. eps(n) и eps(2n) посчитаете с помощью программы.
#include <stdio.h>
#include <math.h>
int main() {
int i, n;
double sum, a, b, h, x, delta;
a = 0.0;
b = 1.0;
n = 100;
h = (b - a) / double(n);
sum = 0.0;
for (i = 1; i <= n - 1; i++) {
x = a + h * (double(i));
sum += 10.0 * pow(x, 9.0);
}
sum += (10.0 * pow(a, 9.0) + 10.0 * pow(b, 9.0)) / 2.0;
sum *= h;
delta = 1.0 - sum;
double sum_2n, eps_n, eps_2n, y;
// Вычисляем сумму для n=200
n = 200;
h = (b - a) / double(n);
sum_2n = 0.0;
for (i = 1; i <= n - 1; i++) {
x = a + h * (double(i));
sum_2n += 10.0 * pow(x, 9.0);
}
sum_2n += (10.0 * pow(a, 9.0) + 10.0 * pow(b, 9.0)) / 2.0;
sum_2n *= h;
// Вычисляем погрешности
eps_n = fabs(1.0 - sum);
eps_2n = fabs(1.0 - sum_2n); // Вычитаем точное значение интеграла и берем модуль
// Вычисляем порядок погрешности
y = log(eps_n / eps_2n) / log(2.0);
printf("h = %.16lf, delta = %.16lf\n", h, delta);
printf("eps(%d) = %.16lf\n", n / 2, eps_n);
printf("eps(%d) = %.16lf\n", n, eps_2n);
printf("y = %.16lf\n", y);
return 0;
}