Лабораторная работа2
.DOCCанкт-Петербургский Государственный Электротехнический Университет
КАФЕДРА МОЭВМ
Отчет по лабораторной работе N8
вариант N4
Преподаватель : Титов М.С.
Студент : Виноградов К. Ю.
Группа : 6361
Санкт-Петербург
1. Задание:
Составить программу, вычисляющую заданный интеграл по формулам прямоугольников, трапеций Симпсона. Найти наименьшее значение n, при котором каждая из формул дает приближенное значение интеграла с погрешностью, не превышающей eps.
,eps=0,0001.
2. Теоретическая часть:
Формула прямоугольника
Формула трапеций
Формула Симпсона
Наименьшее значение n определяется с помощью правила Рунге.
Если можем вычислить и , то тогда , где
k=2 при использовании формул прямоугольника и трапеций, следовательно мы делим отрезок [a,b] тех пор , пока |-|³0.0003;
k=4 при использовании формулы Симпсона, здесь отрезок [a,b] делим до тех пор пока |-|³0.0015
3. Текст программы:
//Программа для вычисления интеграла на отрезке [0;1] при
// заданной точности eps=0.0001 по формулам прямоугольников, трапеций, Симпсона.
// Программа написана ст. гр. 6311 Виноградовым Константином
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
double F(double x)
{
double F1;
F1=sin(x)*(exp(-pow(x,2)));
return F1;
};
void main()
{ char key;
int n,i;
double s,s1,s2,sn,h,a,b;
a=0; b=1;
clrscr();
cout<<" Численное интегрирование "<<endl;
cout<<" автор: ‚Виноградов К.Ю. ( 6361 ) "<<endl;
cout<<" ------------------------------- "<<endl<<endl;
do
{
cout<<" ” Формулы интегрирования: "<<endl;
cout<<" 1 - формула прямоугольников "<<endl;
cout<<" 2 - формула трапеций "<<endl;
cout<<" 3 - формула Симпсона "<<endl;
cout<<" 4 - выход из программы. "<<endl<<endl;
key=getch();
switch(key)
{
case '1':
s=0;sn=0;
cout<<" Метод прямоугольников "<<endl;
cout<<" ‚ Введите n: ";
cin>>n;
h=(b-a)/n;
for (i=1;i<=n;i++)
s=s+F(a+h*(2*i-1)*0.5);
s=h*s;
h=(b-a)/(n*0.5);
for (i=1;i<=n*0.5;i++)
sn=sn+F(a+h*(2*i-1)*0.5);
sn=h*sn;
printf("\n Приближ. знач. интреграла = %.7f ",s);
printf("\n При половине итераций = %.7f ",sn);
printf("\n abs(s-sn) = %.7f ",fabs(s-sn));
getch();
break;
case '2':
s=0;sn=0;
cout<<" Метод трапеций "<<endl;
cout<<" ‚ Введите n: ";
cin>>n;
h=(b-a)/n;
for (i=1;i<=n;i++)
s=s+F(a+h*i)+F(a+h*(i-1));
s=h*s*0.5;
h=(b-a)/(n*0.5);
for (i=1;i<=n*0.5;i++)
sn=sn+F(a+h*i)+F(a+h*(i-1));
sn=h*sn*0.5;
printf("\n Приближ. знач. интреграла = %.7f ",s);
printf("\n abs(s-sn) = %.7f ",fabs(s-sn));
getch();
break;
case '3':
s=0;s2=0;s1=0;sn=0;
cout<<" Метод Симпсона "<<endl;
cout<<" ‚ Введите n: ";
cin>>n;
h=(b-a)/n;
for (i=1;i<=n;i++)
s1=s1+F(a+h*(2*i-1)*0.5);
for (i=1;i<=(n-1);i++)
s2=s2+F(a+i*h);
s=h/6*(F(a)+F(b)+4*s1+2*s2);
h=(b-a)/(n*0.5);
s1=0;s2=0;
for (i=1;i<=n*0.5;i++)
s1=s1+F(a+h*(2*i-1)*0.5);
for (i=1;i<=(n*0.5-1);i++)
s2=s2+F(a+i*h);
sn=h/6*(F(a)+F(b)+4*s1+2*s2);
printf("\n Приближ. знач. интреграла = %.7f ",s);
printf("\n abs(s-sn) = %.7f ",fabs(s-sn));
getch();
break;
};
clrscr();
} while(key!='4');
} // end of main
4. Результаты работы программы:
Программа вычисляет интеграл sin(x)e(-x^2) на отр.[0;1] c eps=0.0001
С помощью данной программы были получены следующие результаты :
Значение интеграла по формулам:
-Прямоугольников n=20 Iп=0,2948462
n=10 Iп=0,2952913
Погрешность по правилу Рунге (не должна быть >0.0003) :0.004451
-Трапеций n=20 Iт=0,2944022
Погрешность по правилу Рунге (не должна быть >0.0003) :0.0008892
-Cимпсона n=20 Iс=0,2946982
Погрешность по правилу Рунге (не должна быть >0.0015) :0.0000004
-Прямоугольников n=100 Iп=0,2947041
n=50 Iп=0,2947219
Погрешность по правилу Рунге (не должна быть >0.0003) :0.0000178
-Трапеций n=100 Iт=0,2946863
Погрешность по правилу Рунге (не должна быть >0.0003) :0.0000355
-Cимпсона n=100 Iс=0,2946982
Погрешность по правилу Рунге (не должна быть >0.0015) :0.0000000
-Прямоугольников n=200 Iп=0,2946997
n=100 Iп=0,2947041
Погрешность по правилу Рунге (не должна быть >0.0003) :0.0000044
-Трапеций n=200 Iт=0,2946452
Погрешность по правилу Рунге (не должна быть >0.0003) :0.0000089
-Cимпсона n=200 Iс=0,2946982
Погрешность по правилу Рунге (не должна быть >0.0015) :0.0000000
-Прямоугольников n=26 Iп=0,2947858
n=13 Iп=0,2950488
Погрешность по правилу Рунге (не должна быть >0.0003) :0.0002631
-Трапеций n=36 Iт=0,294668
Погрешность по правилу Рунге (не должна быть >0.0003) :0.0002741
-Cимпсона n=4 Iс=0,2947135
Погрешность по правилу Рунге (не должна быть >0.0015) :0.0002462