Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМП Интегралы.doc
Скачиваний:
3
Добавлен:
07.05.2019
Размер:
478.21 Кб
Скачать

5. Разработка программы и анализ результатов

Разработаем теперь программу для численного интегрирования функции f(x) по заданной погрешности ez по алгоритмам рис. 2-5 (См. листинг в приложении А).

Для этого объявим новый тип данных funk - как указатель на функцию одного аргумента и разработаем универсальные функции численного интегрирования методами прямоугольников и парабол по заданному n с прототипами:

double Priam(funk f, double a, double b, long n);

double Simpson(funk f, double a, double b, long n);

Универсальность наших функций в том, что при их вызове можно в качестве фактического параметра передавать любую подъинтегральную функцию f. В качестве результата подпрограммы возвращают зависящие от n значения квадратур (2) или (5). Алгоритм двойного просчета (для вычисления по заданной погрешности ez ) реализуем в главной программе main ( ), где организуем ввод исходных данных, и циклический процесс вызовов функции priam(f,a,b,n) с печатью результатов в виде протокола по мере достижения заданной точности.

Для удобства оценки эффективности алгоритмов включим в протокол переменную raz, с помощью которой будем контролировать - во сколько раз уменьшается погрешность et при уменьшении шага h в два раза. Предыдущее значение погрешности et будем хранить в ячейке e1 , тогда значение raz = e1/et.

В результате расчетов по разным методам мы получили следующие результаты, согласующиеся с формулами теоретической погрешности.

Протокол работы программы по левым прямоугольникам

с= 0 a= 0.2 b= 1.1 ez=0.0001

S Iт ef et n raz примеч.

0.0792461 0.0923399 0.0130938 0.0792461 4 12.6 не дост

0.0860534 0.0923399 0.0062864 0.0068073 8 11.6 не дост

0.0892602 0.0923399 0.0030797 0.0032067 16 2.1

0.0908159 0.0923399 0.0015240 0.0015556 32 2.1

0.0915818 0.0923399 0.0007581 0.0007659 64 2.0

0.0919619 0.0923399 0.0003780 0.0003800 128 2.0

0.0921511 0.0923399 0.0001887 0.0001892 256 2.0

0.0922456 0.0923399 0.0000943 0.0000944 512 2.0

Протокол работы программы методом центральных прямоугольников

с = 0.5 a= 0.2 b= 1.1 ez=1e-05

S Iт ef et n raz примеч.

0.0928608 0.0923399 0.0005208 0.0928608 4 10.8 не дост

0.0924670 0.0923399 0.0001270 0.0003938 8 235.8 не дост

0.0923715 0.0923399 0.0000315 0.0000954 16 4.1

0.0923478 0.0923399 0.0000078 0.0000236 32 4.0

0.0923419 0.0923399 0.0000019 0.0000059 64 4.0

Протокол работы программы методом Симпсона a= 0.2 b= 1.1 ez=1e-06

S Iт ef et n raz примеч.

0.0924123 0.0923399 0.0000723 0.09241230 4 10.8 не дост

0.0923448 0.0923399 0.0000048 0.00006748 8 1369.5 не дост

0.0923402 0.0923399 0.0000003 0.00000453 16 14.9

0.0923400 0.0923399 0.0000000 0.00000029 32 15.7

Примечание. Поскольку в нашей программе предыдущим значениям S0 и e1 мы вынуждены присваивать произвольные значения, то помеченные зачеркнутым шрифтом данные считаем недостоверными и во внимание не принимаем.

Из полученных протоколов видно, что с увеличением n в два раза при левых и правых прямоугольниках погрешность уменьшается примерно в 2 раза, методе центральных прямоугольников обеспечивает уменьшение в 4 раза, а в методе Симпсона - в 15.7 ≈16 раз.

Мы убедились, что метод Симпсона более эффективный. Для обеспечения одинаковой заданной точности ez = 0.000001 методу Симпсона достаточно 16 ординат, центральным прямоугольникам - 64, а левым - 1024. Можно утверждать, что метод Симпсона считает в ≈60 раз быстрее, чем метод левых прямоугольников.