Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Численные методы лекции 6-8.doc
Скачиваний:
7
Добавлен:
25.08.2019
Размер:
463.36 Кб
Скачать

Численное интегрирование

Для вычисления определенного интеграла используется формула Ньютона-Лейбница: ,

где F(x) – одна из первообразных функции f(x) (такая что F’(x)=f(x)).

Однако функция f(x) может быть задана таблицей или графиком, а также аналитически, но нахождение первообразной в аналитическом виде затруднительно. В этих случаях применяют методы приближенного (численного) интегрирования.

Формулы, используемые для приближенного вычисления однократных интегралов, называют квадратурными формулами.

Считая f(x)  Ln(x), на [a,b], получим

не зависит от x, обозначим через Ai

Перейдем всюду к переменной t: , откуда , .

При x = x0 t = 0;

x = xn .

Тогда .

Таким образом, Ai=(b-a) Hi, где , i=0,1,…,n.

Формула трапеций

Найдем коэффициенты формулы ,

где , i=0,1,…,n при n=1.

При i = 0

При i = 1

Формула на отрезке [x0, x1] примет вид:

Для отрезка [a, b]: (*)

Рассмотрим погрешность:

На отрезке [x0, x1] погрешность .

При (*) дает значение интеграла с избытком;

при (*) дает значение интеграла с недостатком.

На отрезке [a, b] .

Поскольку hn=|b-a|, то , где .

Программа численного интегрирования методом трапеций:

program lab_4_1a;

var i,n :integer;

s,h,a,b,x :real;

function f(x: real):real;

begin {функция в виде f:=[математическое выражение]}

f:=sin(x);

end;

begin

write('Введите левую и правую границы отрезка - ');

readln(a,b);

write('Введите шаг - '); readln(h);

n:=round(abs((b-a)/h));

s:=0;

for i:=0 to n do

begin

x:=a+h*i;

s:=s+f(x);

end;

s:=h*(s-(f(a)+f(b))/2);

writeln('Искомый определенный интеграл равен ',s:10:6);

readln;

end.

Блок-схема численного интегрирования методом трапеций:

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

n:=round(abs(b-a)/h)

s:=0

x := a+h*i

s := s+f(x)

s := h*(s-(f(a)+f(b))/2)

Введите левую и правую границы отрезка - 0 3

Введите шаг - 0.1

Искомый определенный интеграл равен 1.988334

Введите левую и правую границы отрезка - 0 3

Введите шаг - 0.05

Искомый определенный интеграл равен 1.989578

program lab_4_1;

var i,n :integer;

s,h,a,b,x :real;

function f(x: real):real;

begin {записать, функцию в виде f:=[математическое выражение]}

f:=sin(x);

end;

begin

write('Введите левую и правую границы отрезка - ');

readln(a,b);

write('Введите число точек - '); readln(n);

h:=abs((b-a)/n);

s:=0;

for i:=0 to n do

begin x:=a+h*i;

s:=s+f(x);

end;

s:=h*(s-(f(a)+f(b))/2);

writeln('Искомый определенный интеграл равен ',s:10:6);

readln;

end.

Введите левую и правую границы отрезка - 0 3.1415

Введите число точек - 100

Искомый определенный интеграл равен 1.999836

Введите левую и правую границы отрезка - 0 3.1415

Введите число точек - 1000

Искомый определенный интеграл равен 1.999998

Введите левую и правую границы отрезка - 0 3.1415

Введите число точек - 10000

Искомый определенный интеграл равен 2.000000