Лабораторная
 

Cанкт-Петербургский Государственный Электротехнический Университет

 

 

 

 

 

 

 

 

 

 

 

 

КАФЕДРА МОЭВМ

 

Отчет по лабораторной работе 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( Приближ. знач. интреграла = %.7f ,s);

printf( При половине итераций = %.7f ,sn);

printf( 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( Приближ. знач. интреграла = %.7f ,s);

printf( 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( Приближ. знач. интреграла = %.7f ,s);

printf( abs(s-sn) = %.7f ,fabs(s-sn));

getch();

break;

};

clrscr();

} while(key!=4);

} // end of main

 

4. Результаты работы программы:

 

Программа вычисляет интеграл sin(x)e(-x2) на отр.[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