Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет.docx
Скачиваний:
29
Добавлен:
23.02.2015
Размер:
129.19 Кб
Скачать

2.1.1 Вычисление определенных интегралов методом прямоугольников

Требуется найти приближенное значение определенного интеграла

.

Точное значение этого интеграла равно площади фигуры, снизу ограниченной отрезком осиOX, сверху - кривой , слева - отрезком от точки (a,0) до точки (a, f(a)), справа - отрезком от точки (b,0) до точки (b, f(b)). Приближенное значение интеграла вычисляется при замене площади теоретической фигуры суммой элементарных фигур простой конфигурации. Все численные методы вычисления определенного интеграла основаны на разбиении отрезка интегрирования наn одинаковых по длине отрезков с шагом разбиения

Приближенное значение интеграла определяется суммой слева

или суммой справа

.

2.1.2. Вычисление определенных интегралов методом трапеций

Функция в методе трапеций аппроксимируется на каждом шагеинтегрирования отрезком прямой линии, проходящей через точкии. Интеграл определяется как сумма площадей трапеций с высотойh и основаниями и. В этом случае формула для вычисления приближенного значения интеграла имеет вид

.

2.1.3. Вычисление определенных интегралов методом Симпсона

Метод Симпсона (метод парабол) основан на аппроксимации подынтегральной функции на каждом шаге,i=0, 2, 4, 6,... параболой, проходящей через три соседние точки: ,,. Число шагов интегрирования в методе Симпсона должно быть четным. Тогда количество узлов будет нечетным. Приближенное значение интеграла в методе Симпсона вычисляется по формуле

.

2.1.4. Блок-схема алгоритма

Начало

Заставка

Введите количество разбиений

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

a, b

n

h =

x=a, x<b-0.1*h, x=x+h

sumLeft=sumLeft+f(x)

A

A

x=a+h, x<0.1*h+b, x=x+h

sumRight=sumRight+f(x)

Левая сумма sumLeft

Правая сумма sumRight

x=a, x<b-0.1*h, x=x+h

s=0.5*(f(x)+f(x+h))

sumTrap=sumTrap+s

Значение интеграла

(метод трапеций)

sumTrap*h

Средняя сумма

В

В

i=1, i<n, i=i+1

x=a+i*h

s=s+f(x)

simpson=(h/3)*(f(a)+f(b)+4*s+2*f(0))

Значение интеграла

(метод Симпсона),

simpson

Конец

2.1.6. Код программы:

#include <math.h>

#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;

double F(double x)

{

double F;

F= exp(tan(x/3.3));

return F;

}

int main()

{

cout<<"Dubrovskiy K.V., R-100101, Variant 5"<<endl;

cout<<"exp(tan(x/3.3)), {x, 0,2}"<<endl; //Заданный интеграл

double zpl, zpp, zt, zs, h, a, b, n, i;

char l='y';

do

{

zpl=0; zpp=0; zt=0; zs=0;

cout<<"Vvedite n:"<<endl;

cin>>n;

a=0; b=2;

h=(b-a)/n;

cout<<"\nh="<<h<<"\n"<<endl;

cout<<"\nMetod pryamougolnikov:"<<endl;

for (i=0; i<=(n-1); i++)

{

zpl+=F(a+i*h);

}

zpl=zpl*h;

cout<<"Sleva: "<<zpl<<endl;

for (i=1; i<=n; i++)

{

zpp+=F(a+i*h);

}

zpp=zpp*h;

cout<<"Sprava: "<<zpp<<endl;

cout<<"Srednee: "<<(zpp+zpl)/2<<endl;

cout<<"\nMetod trapezii:"<<endl;

for (i=1; i<=n-1; i++)

{

zt+=F(a+i*h);

}

zt=zt*h+h*(F(a)+F(b))/2;

cout<<zt<<endl;

cout<<"\nMetod Simpsona:"<<endl;

for (i=1; i<=(n/2)-1; i++)

{

zs+=2*F(a+2*i*h);

}

for (i=1; i<=n/2; i++)

{

zs+=4*F(a+(2*i-1)*h);

}

zs=(zs+F(a)+F(b))*h/3;

printf("%.8f", zs);

cout<<"\nHotite izmenut' n? Y/N"<<endl;

cin>>l;

}while (l=='y');

_getch();

return(0);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]