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

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

интеграл с помощью формулы Симпсона. Программа состоит из трех функций main, f и integral. Функция main вызывает функцию integral для вычисления интеграла и распечатывает на экране результат. Функция f принимает аргумент x типа float и возвращает значение интегрируемой функции в этой точке. Integral – основная функция программы: она выполняет все вычисления, связанные с нахождением определенного интеграла. Integral принимает четыре параметра:

пределы интегрирования типа float, допустимую относительную ошибку типа float и указатель на интегрируемую функцию. Вычисления выполняются до тех пор, пока относительная ошибка, вычисляемая по формуле | (In/2 – In) / In | , где In интеграл при числе разбиений n, не будет меньше требуемой. Например, допустимая относительная ошибка e = 0.02 это значит, что максимальная погрешность в вычислениях будет не больше, чем In * e = 0.02 * In. Функция реализована

с экономией вычислений, т. е. учитывается, что Yкр постоянная, а Yнеч = Yнеч + Yчет, поэтому эти значения вычисляются единожды. Высокая точность и скорость вычисления делают использование программы на основе формулы Симпсона более желательным при приближенном вычислении интегралов, чем использование программ на основе формулы трапеции или метода прямоугольников. Ниже предлагается блок – схема, спецификации, листинг и ручной

счет программы на примере поставленной выше задачи. Блок – схема позволяет отследить и понять особенности алгоритма программы, спецификации дают представление о назначении каждой переменной в основной функции integral, листинг - исходный код работающей программы с комментариями, а ручной счет предоставляет возможность проанализировать результаты выполнения программы. 2.     Блок – схема программы Ввод a, b, e, f(x) n = 4, h = (b

– a) / n s_ab = f(a) + f(b) s_even = 0, s_res = 0 i = 2, n – 1, 2 s_even = s_even + f(a + i * h) s_odd = 0, s_pres = s_res i = 1, n – 1, 2 s_odd = s_odd + f(a + i * h) s_res = h / 3 * (s_ab + 2 * s_even + 4 * s_odd) s_even = s_even + s_odd, n = n / 2, h = h / 2 | (s_pres – s_res) / s_res | > e ДА 3.     Спецификации Имя переменной Тип Назначение n int Число разбиений отрезка [a, b] i int Счетчик циклов a float Нижний предел интегрирования b float Верхний предел интегрирования h float Шаг разбиения отрезка e float Допустимая относительная ошибка f float (*) Указатель

на интегрируемую фун - цию s_ab float Сумма значений фун – ции в точках a и b s_even float Сумма значений фун – ции в нечетных точках s_odd float Сумма значений фун – ции в четных точках s_res float Текущий результат интегрирования s_pres float Предыдущий результат интегрирования 4.     Листинг программы #include <stdio.h> #include <math.h> /* Прототип фун – ции, вычисляющей интеграл */ float integral(float, float, float, float (*)(float)); /* Прототип фун – ции, задающей