Метод Симпсона на компьютере — страница 3

  • Просмотров 2292
  • Скачиваний 197
  • Размер файла 19
    Кб

интегрируемую фун – цию */ float f(float); main() { float result; result = integral(0, 6, .1, f); printf("%f", result); return 0; } /* Реализация фун – ции, задающей интегрируемую фун – цию */ float f(float x) { /* Функция f(x) = x³(x - 5)² */ return pow(x, 3) * pow(x - 5, 2); } /* Реализация фун – ции, вычисляющей интеграл */ float integral(float a, float b, float e, float (*f)(float)) { int n = 4, i; /* Начальное число разбиений 4 */ float s_ab = f(a) + f(b); /* Сумма значений фун – ции в a и b */ float h = (b – a) / n; /* Вычисляем шаг */ float s_even = 0, s_odd; float s_res =

0, s_pres; /* Сумма значений фун – ции в нечетных точках */ for (i = 2; i < n; i += 2) { s_even += f(a + i * h); } do { s_odd = 0; s_pres = s_res; /* Сумма значений фун – ции в четных точках */ for (i = 1; i < n; i += 2) { s_odd += f(a + i * h); } /* Подсчет результата */ s_res = h / 3 * (s_ab + 2 * s_even + 4 * s_odd); /* Избегаем деления на ноль */ if (s_res == 0) s_res = e; s_even += s_odd; n *= 2; h /= 2; } while (fabs((s_pres - s_res) / s_res) > e);/* Выполнять до тех пор, пока результат не будет удовлетворять допустимой ошибке */ return fabs(s_res); /* Возвращаем результат */

} 5.     Ручной счет Таблица константных значений для n = 8 Имя переменной Значение a 0 b 6 e .1 s_ab 216 h .75 Подсчет s_even i a + i * h f(a + i * h) s_even 2 1.5 41.34375 41.34375 4 3 108 149.34375 6 4.5 22.78125 172.125 Подсчет s_odd i a + i * h f(a + i * h) s_odd 1 .75 7.62012 7.62012 3 2.25 86.14158 93.7617 5 3.75 82.3973 176.159 7 5.25 9.044 185.203 Подсчет s_res ò f(x) dx s_res = h / 3 * (s_ab + 2 * s_even + 4 * s_odd) Абсолютная ошибка 324 325.266 1.266