Исследование точности численного интегрирования

Задание исследования

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

Подробное описание задачи и способы ее решения

Необходимо провести исследования так называемой внутренней сходимости численного интегрирования методами Симсона и трапеций различных функций, задаваемых с помощью функций языка С. Предполагается, что отрезок интегрирования [a,b] разбит на n равных частей системой точек (сеткой).

Контроль внутренней сходимости заключается в циклическом вычислении приближенных значений интеграла для удваиваемого по сравнению со значением на предыдущем прохождении цикла числа n. Отношения абсолютной величины разности этих значений к абсолютной величине предыдущего приближенного значения принимается в качестве критерия достижения точности интеграла.

Построить зависимости количеств итераций от различных величин критерия точности.

Построить обратные зависимости критерия точности от количества итераций.

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

Исследовать влияние увеличения верхнего предела интегрирования на точность (при прочих неизменных условиях)

Метод трапеций

, где

Метод Симпсона

, где

Результаты исследований

Таблица и график зависимости количества итераций от различных значений критерия точности

Для

Критерий точности

Количество итераций

-0,1676631

14

-0,1518916

16

-0,0046931

12

-0,0026531

11

-0,0002639

10

-0,0001709

2

-0,0001297

9

-0,0000557

3

-0,000025

8

-0,0000198

4

-0,0000096

5

-0,0000038

6

0

15

0,0000052

7

0,071089

13

Критерий точности

Количество итераций

-0,1127271

16

-0,0750288

15

-0,0540677

14

-0,0021415

12

-0,0005711

11

-0,0000458

9

-0,0000381

2

-0,0000191

3

-0,000008

4

-0,000004

5

-0,0000019

7

-0,0000002

6

0,000005

8

0,0002983

10

0,0164377

13

Критерий точности

Количество итераций

-0,0066709

13

-0,0042367

14

-0,0003561

10

-0,0000016

5

-0,000001

4

0,0000005

3

0,0000006

6

0,0000009

2

0,0000009

7

0,0000223

8

0,000056

9

0,0002782

11

0,0003474

12

0,005293

16

0,0053267

15

Критерий точности

Критерий точности

-61,4469795

12

-5,714047

3

-1,0215755

13

-0,7241433

2

-0,5121117

4

-0,3222643

11

-0,2163614

7

-0,1536629

9

-0,0930261

14

0,0353183

16

0,057059

15

0,1697371

5

0,2025534

10

0,2504728

6

0,6202592

8

Критерий точности

Количество итераций

-0,0119308

16

-0,0007834

13

-0,0000079

3

-0,0000041

4

-0,0000037

7

-0,0000027

5

-0,0000027

6

-0,000002

8

-0,0000016

2

0,0000003

10

0,0000062

9

0,0000385

11

0,0000802

12

0,0005452

15

0,0016689

14

Критерий точности

Количество итераций

-0,0026286

16

-0,0012416

14

-0,0000118

3

-0,0000107

4

-0,0000046

5

-0,0000046

9

-0,0000028

6

-0,0000021

7

-0,0000005

2

0,0000011

10

0,0000018

8

0,0000023

11

0,000058

12

0,0001049

13

0,0027928

15

Таблица и график зависимости значений критерия точности от количества итераций

Для функции

По отношению к предыдущему значению

По отношению к аналитическому значению

Критерий точности

Количество итераций

Критерий точности

Количество итераций

-0,0001709

2

-0,0001932

2

-0,0000557

3

-0,0000629

3

-0,0000198

4

-0,0000224

4

-0,0000096

5

-0,0000108

5

-0,0000038

6

-0,0000043

6

0,0000052

7

0,0000058

7

-0,000025

8

-0,0000283

8

-0,0001297

9

-0,0001466

9

-0,0002639

10

-0,0002983

10

-0,0026531

11

-0,002998

11

-0,0046931

12

-0,0052891

12

0,071089

13

0,0797403

13

-0,1676631

14

-0,2014365

14

0

15

0

15

-0,1518916

16

-0,1518916

16

Для функции

По отношению к предыдущему значению

По отношению к аналитическому значению

Критерий точности

Количество итераций

Критерий точности

Количество итераций

-0,0000381

2

-0,0000666

2

-0,0000191

3

-0,0000335

3

-0,000008

4

-0,0000141

4

-0,000004

5

-0,0000069

5

-0,0000002

6

-0,0000004

6

-0,0000019

7

-0,0000033

7

0,000005

8

0,0000088

8

-0,0000458

9

-0,0000802

9

0,0002983

10

0,000522

10

-0,0005711

11

-0,0009997

11

-0,0021415

12

-0,0037465

12

0,0164377

13

0,0286955

13

-0,0540677

14

-0,0959378

14

-0,0750288

15

-0,1259331

15

-0,1127271

16

-0,1750124

16

Сравнение результатов

Таблица сравнительных результатов

Метод трапеции n=1000000

Метод Симпсона

n =1000000

Аналитический результат

Функция

Пределы

4,5051475

4,5240183

4,49980967

f(x)=1/x

0,1…..9

1,7491462

1,7500761

1,791756469

f(x)=1/x*x

0,3…..5

1,9991885

1,9999505

2

f(x)=sin(x)

0…….π

-0,0000512

0,000003

0

f(x)=sin(2*x)

0…….π

0,2857157

0,2856935

0,285714285

f(x)=sin(7*x)

0…....π

0,2222053

0,2222133

0,222222222

f(x)=sin(9*x)

0…....π

Таблица влияния увеличения верхнего предела на точность интегрирования

Аналитическое значение

Практическое значение

Верхний предел

Погрешность

4,49980967

4,5217996

9

-0,02198993

4,605170186

4,624969

10

-0,019798814

4,787491743

4,8039412

12

-0,016449457

4,941642423

4,9557843

14

-0,014141877

5,075173815

5,0875444

16

-0,012370585

5,192956851

5,2039275

18

-0,010970649

5,298317367

5,3082042

20

-0,009886833

Следовательно, увеличение верхнего предела приводит к увеличению точности интегрирования

Текст программы

/* Курсовая работа по информатике

"Исследование точности численного интегрирования"

"Research of Accuracy of Numerical Integration"

Преподаватель:

Студенты: Степанов А.Г.

Черепанов К.А.

Группа: Р-207

*/

# include <stdio.h>

# include <io.h>

# include <stdlib.h>

# include <iostream.h>

# include <string.h>

# include <math.h>

int main ()

{

FILE *fp; /*указатель на поток*/

int n,i,t,j,N;

float a,b,h,Sum[100],x,y,coa;

printf("Research of Accuracy of Numerical Integration\n");

/*Ввод точности вычисления*/

printf("Enter accuracy of calculation n= ");

scanf("%d",&n);

/*Ввод начала интегрирования*/

printf("Enter beginnings of integration= ");

scanf("%f",&a);

/*Ввод предела интегрирования*/

printf("Enter limit of integration= ");

scanf("%f",&b);

 

/*Открытие файла-источника*/

while((fp=fopen("data3.xls","w"))==NULL)

{

puts("Error!!! Can't open file \nInput name of file\n");

}

/*Ввод количества итераций*/

printf("Enter number of Itteration N= ");

scanf("%d",&N);

/*Вычисление шага интегрирования*/

h=(a+b)/n;

printf("Step=%.3f\n",h);

/*******Вычисление интеграла методом трапеций*******/

for(j=1;j<=N;j++)

{

h=(a+b)/(int(pow(2,j-1))*n);

Sum[j]=0;

for(i=0;i<=(int(pow(2,j-1))*n);i++)

{

x=a+i*h;

if(i==0)

t=1;

else

t=2;

y=t*(h/2)*(sin(2*x));

Sum[j]=Sum[j]+y;

}

if (j>1)

{

coa=(Sum[j]-Sum[j-1])/Sum[j-1];

printf("Criterion of accuracy=%.5f Number of iteration=%d\n",coa,j);

fprintf(fp,"%.7f\t",coa);

fprintf(fp,"%d\t\n",j);

}

}

printf("The sum by a method of trapezes=%.7f\n",Sum[1]);

fprintf(fp,"The sum by a method of trapezes=%.7f\n",Sum[1]);

/*******Вычисление интеграла методом Симпсона*******/

for(j=1;j<=N;j++)

{

h=(a+b)/(int(pow(2,j-1))*n);

Sum[j]=0;

for(i=0;i<=(int(pow(2,j-1))*n);i++)

{

x=a+i*h;

if(i==0||i==n)

t=1;

else

{

if(i%2==0)

t=2;

else

t=4;

}

y=t*(h/3)*(sin(2*x));

Sum[j]=Sum[j]+y;

}

if (j>1)

{

coa=(Sum[j]-Sum[j-1])/Sum[j-1];

printf("Criterion of accuracy=%.5f Number of iteration=%d\n",coa,j);

fprintf(fp,"%.7f\t",coa);

fprintf(fp,"%d\t\n",j);

}

}

printf("The sum by a Simpson's method= %.7f\n",Sum[1]);

fprintf(fp,"The sum by a Simpson's method=%.7f\n",Sum[1]);

scanf("%d",&b);

}