МИНИСТЕРСТВО
ОБРАЗОВАНИЯ
И НАУКИ УКРАИНЫ
ДОНЕЦКИЙ
НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра
вычислительной техники
«Численное
интегрирование»
Выполнил:
студент гр. ВТ-01
аз
ИВАНИЦА
С.В.
Проверил:
КРАВЧЕНКО
АТ.
Лабораторная работа № 3
Донецк - 2003
Данная
лабораторная работа посвящена
вычислению определенного интеграла
различ-
ными численными методами.
Все они основаны на том, что интеграл
представляется в виде преде-
ла суммы
площадей, и позволяет вычислить эту
сумму с достаточной точностью.
-2 х 2
Рис.1.
График
подынтегральной функции/(х)
на всей числовой прямой.
Перед
тем,
как начать решение интеграла численными
методами, произведем вычисление
значения
по правилам ВМ. Для более точного и
быстрого вычисления прибегнем к помощи
про-
фессионального математического
пакета MachCad
Professional.
Произведем
вычисление интеграла
символьным
методом. Это нам даст точное математическое
(не численное!) вычисление значения
с
помощью символьного процессора MachCad.
Конечно,
символьное интегрирование
возможно
только для небольшого круга
несложных подынтегральных функций, но
в нашем случае мы по-
лучили довольно
точный результат.
'°'8
(
\
\0.66-
cos(2.31
•
х) - 0.04-
ехр(-2.61-
х) - 9.58-
х4
+
9.4.
х3
- 8.96-
х
-
5.5lj
dx->
-21.9974707521255222е
-1.1
Определенный
интеграл I
представляет собой площадь (рис.2.),
ограниченную
кривой
f(x),
осью
х и прямыми х=а
и х=Ь
(в нашем случае а=-1.1,
Ь=0.8).
Будем вычислять интеграл (1)
,
разбивая
интервал от а
до b
на
множество меньших интервалов, находя
приблизительно площадь
каждой
полоски, получающейся при
гаком
разбиении, и суммируя площади этих
полосок.
Требуется
вычислить следующий определенный
интеграл:
Дх)
-0.66*cos(2.31*x)~0.04*е™*
-9.58*х4
+9.4*х3
-8.96*х2
-5.51;
График
функции f(x)
представлен
па рис.1.
Рис.2.
Графическое
изображение
исходного интеграла.
Разобьем
интервал интегрирования на п
равных частей,
каждая длиной h=(b-a)/n.
Рас-
смотрим
теперь один из этих интервалов. Площадь,
лежащая под кривой y=f(x),
между х,
и х,
ц
равна:
fxi+l
f(x)
dx
v
xi
Если
h достаточно мало, то эту
площадь без большой ошибки можно
приравнять к площади
трапеции:
1.
= —(у.
+ у. ,)
'
'+,>
(2)
Просуммировав
площади по всем п
интервалам, получим:
I
=
п-1
=£
i
= О
где
хо
= а>
х„ = Ъ.
Теперь,
подставляя (2)
в (3),
получаем:
h
1. Правило трапеций.
For |
n = 15 |
Integral = |
-22.16432 |
For |
n = 55 |
Integral = |
-22.05757 |
For |
n = 126
|
Integral = |
-21.99988 |
В
результате получили довольно
приблизительное значение, которое хоть
и сходится к по-
лученному ранее, но
при больших значениях п
(600...800), что
приводит соответственно к боль-
шому
количеству суммирующих циклов.
Этот
метод оказался не очень эффективным.
Чтобы
найти более точное значение интеграла,
рассмотрим более усовершенствованные
правила
и методы численного интегрирования.
Чтобы
найти более точное
значение интеграла можно воспользоватея
стравнительно
про-
стым усовершенствованным методом
трапеций.
Выберем
некоторую другую величину шага разбиения
к
=
(Ь-а)/т,
причем т<>п.
Если
4
-
значение интеграла, вычисленное по
павилу трапеций с шагом К
а Д
- значение
интеграла ,
вычисленное по правилу трапеций с шагом
к,
то лучшее приближение ,
чем Д
или h
получается
по формуле:
(4)
Вычисленное
таким образом значение интеграла I
является лучшим приближеием ,
чем //,
или
Д.
Если же вторая производная у
”(х)
действительно постоянна при
а<=х<=Ь,
то ошибка огра-
ничения в данной
формуле равна нулю. Этот метод впервые
был предложен Ричардсоном (1927г.).
Листинг
программы, производящей вычисление
значения определенного интеграла
по экс-
траполяционному
переходу к пределу, представлен ниже:
{ ЛАБОРАТОРНАЯ
РАБОТА № 3.
"ЧИСЛЕННЫЕ МЕТОДЫ"
"
Численное интегрирование"
Программа
№ 2 : EXTRAPOLYATSIONNY
PEREXOD
К
PREDELU
}
Program
lab_3_l;
Uses
Crt;
Const
n =
15 ;
m
=
2*n+50;
a
=
-1.1;
b
=
0.8;
Type
Ar =
array[0..N+M]
of real;
Var
X :
Ar;
step,
Ih,
Ik,
Integral,
k :
real;
i,
iter
:
byte;
{
}
Function
Func (X:real)
:
real;
Begin
Func:=
0.66*cos
(2.31*X)-0.04*exp(-2.61*X)-9.58*X*X*X*X
+
9.4*X*X*X
- 8.96*X*X-5.51;
End
{
Func };
{
}
Procedure
Made_Integr
(iter :
word);
{
процедура,
считающая интеграл по
правилу трапеции }
Begin
step:=(b-a)/iter;
X[0]:=a;
X[iter]:=b;
For
i:=l to iter-1 do X[i]:=X[i-l] +
step;
Integral:=
0.0;
For
i:=0
to iter-1 do
Intearal:=
Integral
+
(step/2)*(Func(X[i]}
+
Func(X[i+1]));