Лабораторная работа: Исследование точности численного интегрирования
Таблица и график зависимости значений критерия точности от количества итераций
Для функции
По отношению к предыдущему значению | По отношению к аналитическому значению | ||||
Критерий точности | Количество итераций | Критерий точности | Количество итераций | ||
-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 |
Следовательно, увеличение верхнего предела приводит к увеличению точности интегрирования
Список библиографических источников
1. Справочник по математике/Бронштейн И.Н., Семендяев К.А.-М.:Физико-математическая литература, 1998.
Текст программы
/* Курсовая работа по информатике
"Исследование точности численного интегрирования"
"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);
}