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



Разработаем теперь программу для численного интегрирования функции 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 раз быстрее, чем метод левых прямоугольников.

 

Указания по выполнению работы и Требования к отчету

Вычислить приближенное значение интеграла , на интервале (a,b) с заданной точностью Ez и оценить эффективность программы. Для оценки фактической погрешности дана первообразная функция F(x).

Предварительно объявить функциональный тип данных funk с помощью оператора typedef, а в главной программе предусмотреть ввод исходных данных, вызов нашей подпрограммы и печать протокола решения задачи.

Отчет должен содержать:

1. Постановку задачи и заданные формулы f(x) и F(x).

2. Таблицы переменных и схемы алгоритмов (подпрограмм и главной программы).

3. Текст программы с комментариями.

4. Анализ результатов расчета.

Контрольные вопросы к защите отчета

1. Формулы и алгоритмы численного интегрирования функций.

2. Физический смысл переменных x, a, b, n, h, S.

3. Теоретические погрешности разных методов.

4. Идея алгоритма двойного просчета.

5. Понятие о погрешностях, - абсолютной, относительной, текущей, фактической, погрешности метода (теоретическая) и округления.

6. Физический смысл переменных S, S0, Iт.eзад, eтек, eфакт.

7. Какова будет теоретическая погрешность численного интегрирования функции f(x) = a X +b методом прямоугольников, а f(x) = a X3 + b X2 + c X + d - методом Симпсона? Почему?

8. Глобальные и локальные параметры.

9. Формальные и фактические параметры.

10 Механизмы передачи формальных/фактических параметров;

11. Назначение и синтаксис оператора typedef.

12. Какие параметры (данные) можно передавать через заголовок функции и оператор return, а какие нельзя ?

13. Чем отличаются вызовы функции s =priam(sin,a,b,n); и s =priam(&sin,a,b,n); ?


Приложение A

Листинг 1. Программа численного интегрирования по заданной погрешности

 

typedef double(*funk)(double x);

double f(double x){ //подъинтегральная функция f

x*x*exp(-2*x);

}//----------------------------------------------

double F(double x){ //первообразная функция F

exp(-2*x)*(x*x+x+0.5)/2;

}//----------------------------------------------

double priam(funk f, double a,double b, long n){

long i,m; double x,h,s,c=0;

m=n/2;   h=(b-a)/n;

x=a+c*h; s=0;

for(i=0;i<n;i++){

    s=s+f(x);

    x=x+h;

}

s*=h;    return s;

}//----------------------------------------------

void main(){

clrscr();

double a=0.1,b=3.9,ez=0.00001,et,ef,h,s0,s,It; long n;

//printf("\n Vvedite a,b,ez\n"); scanf("%lf%lf%lf",&a,&b,&ez);

double raz,e0=10,z1;

FILE *fout;

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

if(!(fout=fopen("результаты.txt","w")))

    fprintf(stderr, "не могу открыть файл результаты.txt.\n");

s0=0; n=4;

printf("\ns        et       ef      It   n raz");

printf("\n----------------------------------------------- ");

do{

   s=priam(&f,a,b,n);

   //s=Simpson(f,a,b,n);

   It=F(b)-F(a);

   et=fabs(s-s0); ef=fabs(s-It); raz=e0/et; e0=et;

   printf("\n%1.8lf %1.8lf %1.8lf %1.8lf %ld %6.1lf",s,et,ef,It,n,raz);

          fprintf(fout,"\n%1.8lf %1.8lf %1.8lf %1.8lf %ld %6.1lf",s,et,ef,It,n,raz);

   s0=s;

   n*=2;

}while(et>ez);

printf("\nIточ= %12.10lf s = %12.10lf raz= %5.1lf",It,s,raz);

fprintf(fout,"\nIточ= %12.10lf s= %12.10lf raz= %5.1lf",It,s,raz);

getch();

}//----------------------------------------------------------------


Приложение Б

ВАРИАНТЫ заданий 1 -30

1 0; 15
2 1; 3
3 0; 0.9
4 1; 2.2
5 1.2; 2
6 1.1; 2.2
7 0.1; 1.1
8 1.2; 2.8
9 0.1; 0.9
10 4.6; 5.9
11 1.2; 2.8
12 0.1; 1.6
13 0.3; 1.2
14 1.1; 2.7
15 0.1; 0.5
16 0.1; 1.8
17 1.1; 2.3
18 0; 1.8
19 0; 0.75
20 0.2; 2
21 0.1; 0.7
22 1.7; 2.9
23 1.2; 2.8
24 0.1; 0.9
25 0.2; 1.1
26 1.1; 1.9
27 0.2; 1.3
28 1.9; 3.2
29 0.3; 1.8
30 0.1; 1.9

ВАРИАНТЫ заданий 31 –60

31 0.2; 1.6
32 1; 2.1
33 0.1; 1.3
34 0.5; 2.1
35 1.3; 2.9
36 0.7; 0.9
37 0.1; 0.75
38 0.3; 1.9
39 0.1; 0.7
40 3.1; 3.8
41 1.1; 3.1
42 0.7; 2.2
43 0.1; 1.9
44 0.3; 2.5
45 0.1; 0.6
46 1.2; 2.8
47 3.2; 4.7
48 0.2; 1.1
49 0.1; 1.2
50 1.2; 2.4
51 0.2; 1.3
52 1.5; 3.4
53 0.95; 1.5
54 0.1; 0.8
55 2; 3
56 1.7; 2.9
57 0.2; 1.2
58 0.1; 1.9
59 1.3; 2.7
60 0.1; 0.7

 

 

СОДЕРЖАНИЕ

1 Цель работы.................................................................................................... 1

2 Алгоритмы численного интегрирования функций ................ 1

3 Численное интегрирование по заданной точности............... 4

4 Оценка погрешностей методов......................................................... 6

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

6 Указания по выполнению работы и Требования к отчету.. 9

7 Контрольные вопросы к защите отчета...................................... 10

Приложение А. Листинг программы численного интегрирования по заданной погрешности.................................................................................................... 11

Приложение Б. Варианты индивидуальных заданий..................... 12

 


Дата добавления: 2018-02-18; просмотров: 849; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!