Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.DOC
Скачиваний:
13
Добавлен:
01.05.2014
Размер:
66.05 Кб
Скачать

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("\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