@DobriyParen

Как вычислить порядок погрешности в этом коде по формуле?

вот был код изначально
#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;
}
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы