Федеральне агентство з освіти РФ
Тульський державний університет
Кафедра АОТ і ОС
Курсова робота
по курсу інформатика
"Наближеного обчислення значень ВИЗНАЧЕНОГО ІНТЕГРАЛА"
Тула, 2007
Зміст
Введення
Метод середніх прямокутників
Метод трапецій
Метод Ньютона-Котеса
Метод Чебишева
Блок-схема основної програми
Блок-схема процедури: метод трапецій
Блок-схема процедури: метод Ньютона-Котеса
Блок-схема процедури: метод Чебишева
Текст програми
Список використаної літератури
Введення
На практиці рідко вдається обчислити точно визначений інтеграл. Наприклад, в елементарних функціях не обчислюється функція Лапласа
широко використовується в теорії ймовірностей для обчислення ймовірностей, пов'язаних з нормально розподіленими випадковими величинами.
Завдання чисельного інтегрування полягає в знаходженні наближеного значення інтеграла:
(1)
від безперервної на відрізку [a, b] функції .
Чисельні методи інтегрування застосовуються у випадках, коли не вдається знайти аналітичний вираз первісної для функції або якщо функція задана таблично. Формули чисельного інтегрування називаються квадратурних формул.
Приклад: Наближене нерівність
(2)
де q j - деякі числа, x j - деякі точки відрізка [a, b], називається квадратурної формулою, яка визначається вагами q j і вузлами x j.
Кажуть, що квадратурна формула точна для многочленів ступеня m, якщо при заміні на довільний алгебраїчний m наближене рівність (2) стає точним.
Розглянемо деякі широко використовуються приклади наближеного обчислення визначених інтегралів, квадратурні формули.
Метод середніх прямокутників
Обчислення визначеного інтеграла геометрично означає обчислення площі фігури, обмеженої кривою , Прямими х = а і х = b і віссю абсцис. Наближено ця площа дорівнює сумі площ прямокутників.
Позначимо , Де
n - кількість кроків.
Формула лівих прямокутників:
Формула правих прямокутників:
Більш точною є формула середніх прямокутників:
Метод трапецій
Площа під кривою замінюється сумою площ трапецій:
або
Неважко переконатися, що
Оскільки точність обчислень за наведеними формулами залежить від числа розбиття n вихідного відрізка [a; b], то обчислювальний процес доцільно будувати ітераційним методом, збільшуючи n до тих пір, поки не буде виконана умова
<
де - Значення інтеграла на кроці, а - Точність обчислень.
Метод Ньютона-Котеса
Замінимо підінтегральна функція f (x) інтерполяційним многочленом Лагранжа:
.
Тоді
;
(1)
Так як dx = hdq, то
Так як , То
Остаточно отримуємо формулу Ньютона-Котеса:
(2)
Величини H i називають коефіцієнтами Ньютона-Котеса. Вони не залежать від f (x). Їх можна обчислювати заздалегідь для різного числа вузлів n (таблиця 1).
Формула Ньютона-Котеса з n вузлами точна для поліномів ступеня не вище n. Для одержання більшої точності не рекомендується використовувати формули з великим числом вузлів, а краще розбивати відрізок на подотрезкі, до кожного з яких застосовується формула з одним і тим же невеликим числом вузлів.
Таблиця 1. Значення коефіцієнтів Ньютона-Котеса
H | N | |||
1 | 2 | 3 | 4 | |
H 0 | 1 / 2 | 1 / 6 | 1 / 8 | 7 / 90 |
H 1 | 1 / 2 | 2 / 3 | 3 / 8 | 16/45 |
H 2 | - | 1 / 6 | 3 / 8 | 2 / 15 |
H 3 | - | - | 1 / 8 | 16/45 |
H 4 | - | - | - | 7 / 90 |
Цікаво відзначити, що з формули (2) випливають як приватні випадки: формула трапецій при n = 1
;
формула Сімпсона при n = 2
;
правило трьох восьмих при n = 3
.
Формулу (2) при n> 6 не застосовують, тому що коефіцієнти Ньютона-Котеса стають занадто великими і обчислювальна похибка різко зростає.
Метод Чебишева
П.Л. Чебишев запропонував формулу:
,
в якій коефіцієнти c i фіксовані, а х i підлягають визначенню.
Користуючись алгебраїчними властивостями симетричних многочленів, опустивши перетворення, обмежимося готовими результатами. У таблиці 2 наведені значення вузлів квадратурної формули Чебишева для деяких значень n.
Таблиця 2. Значення вузлів квадратурної формули Чебишева
Число інтервалів n | Номер вузла i | Значення вузла X i |
1 | 1 2 | 0,211325 0,788675 |
2 | 1 2 3 | 0,146447 0,500000 0,853553 |
3 | 1 2 3 4 | 0,102673 0,406204 0,593796 0,897327 |
4 | 1 2 3 4 5 | 0,083751 0,312730 0,500000 0,687270 0,916249 |
5 | 1 2 3 4 5 6 | 0,066877 0,288740 0,366682 0,633318 0,712260 0,933123 |
Для будь-яких меж інтегрування маємо:
де ,
Значення x i беруться з таблиці при обраному значенні n. Для підвищення точності можна не тільки збільшувати кількість вузлів, але і розбивати відрізок [a, b] на подотрезкі, до кожного з яких застосовується відповідна формула. Не рекомендується застосовувати формули з великою кількістю вузлів (n> = 8). Доведено, що для n = 8 побудувати квадратурної формули Чебишева неможливо.
Блок-схема основної програми
Блок-схема процедури: метод трапецій
Блок-схема процедури: метод Ньютона-Котеса
Блок-схема процедури: метод Чебишева
Текст програми
program Curs;
uses crt, graph;
var i, n: integer;
t: byte;
a, b, eps, h: real;
x, sum1, sum2, seps, m0, m1, m2, m3, m4: real;
lf: text;
st: string;
function f (x: real): real;
begin
f: = 19.44 * exp (0.224 * x);
end;
procedure gr (xn, xk: real);
var x, y, mx, my, dx, dy,
ymin, ymax, xh: real;
xb, yb, xm, ym, xl, yv, xp, yn, bord1, bord2, bord3, bord4, xt, yt, xt1, yt1, dxp, dyp, nd, nr, i, kx, ky, k: integer;
st: string;
begin
k: = 100;
xh: = (xk-xn) / 100;
ymax: = f (xn);
dx: = (xk-xn) / 100;
for i: = 1 to 100 do
begin x: = xn + dx * i;
y: = f (x);
if y> ymax then ymax: = y;
end;
ymin: = 0;
ymax: = round (ymax);
nd: = detect;
initgraph (nd, nr, 'c: \ tp7 \ bgi');
bord1: = 60; kx: = 6;
bord2: = 30; ky: = 8;
bord3: = 30;
bord4: = 80;
xb: = 0; yb: = 0; xm: = getmaxx; ym: = getmaxy;
xl: = xb + bord1;
xp: = xm-bord2;
yv: = yb + bord3;
yn: = ym-bord4;
dxp: = (xp-xl) div kx;
dyp: = (yn-yv) div ky;
dx: = (xk-xn) / kx;
dy: = (ymax-ymin) / ky;
xl: = xp-dxp * kx;
yn: = yv + dyp * ky;
mx: = (xp-xl) / (xk-xn);
my: = (yn-yv) / (ymax-ymin);
setfillstyle (1,15);
bar (xb, yb, xm, ym);
setcolor (0);
setlinestyle (0,0,1);
bar (xl, yv, xp, yn);
rectangle (xl, yv, xp, yn);
settextjustify (0,2);
settextstyle (2,1,4);
setcolor (9);
for i: = 0 to kx do begin
xt: = xl + dxp * i;
str (xn + dx * i: 6:3, st);
line (xt, yn 3, xt, yn +3);
outtextxy (xt +4, yn +8, st);
end;
settextstyle (0,0,1);
for i: = 0 to ky do begin
yt: = yv + dyp * i;
str (ymax-dy * i: 6:3, st);
line (xl 3, yt, xl +3, yt);
outtextxy (xl 56, yt 4, st);
end;
outtextxy (xl +100, bord3 div 2, 'y = 19.44 * exp (0.224 * x)');
setcolor (12);
if xn * xk <0 then begin
xt: = xl-trunc (xn * mx);
line (xt, yv, xt, yn);
end;
if ymax * ymin <0 then begin
yt: = yv + trunc (ymax * my);
line (xl, yt, xp, yt);
end;
xh: = (xk-xn) / 5;
for i: = 0 to 5 do begin
setcolor (3);
x: = xn + xh * i;
y: = f (x);
xt: = xl + trunc ((x-xn) * mx);
yt: = yv + trunc ((ymax-y) * my);
circle (xt, yt, 3);
if i> 0 then
line (xt, yt, xt1, yt1);
setcolor (5);
rectangle (xt1, yt1, xt, yn);
xt1: = xt;
yt1: = yt;
end;
repeat until keypressed;
closegraph;
end;
function pr: real;
var s, x: real;
begin
s: = 0;
x: = a;
for i: = 1 to n do
begin
s: = s + abs (f (x)) * h;
x: = x + h;
end;
pr: = s;
end;
function tr: real;
var s, x: real;
begin
s: = 0;
x: = a;
for i: = 1 to n do
begin
s: = s + (f (x) + f (x + h)) / 2 * h;
x: = x + h;
end;
tr: = s;
end;
function ch: real;
var s, dp, kf, a1, b1: real;
begin
s: = 0;
kf: = sqrt (1 / 3);
for i: = 2 to n +1 do
begin
a1: = a + h * (i 2);
b1: = a1 + h;
s: = s + ((b1 a1) / 2) * (f ((a1 + b1) / 2 kf * ((b1 a1) / 2)) + f ((a1 + b1) / 2 + kf * ((b1 a1) / 2)));
end;
ch: = s;
end;
function si: real;
var s, x, f1, f2: real;
begin
s: = 0;
x: = a;
i: = 1;
f1: = 0;
repeat
f1: = f1 + f (a + h * i);
i: = i +2;
until i> = n;
i: = 2;
f2: = 0;
repeat
f2: = f2 + f (a + h * i);
i: = i +2;
until i> = n;
s: = h / 3 * (f (a) + f (bh) + (4 * f1) + (2 * f2));
si: = s;
end;
begin
assign (lf, 'otchet.txt');
rewrite (lf);
clrscr;
write ('Введіть значення лівої межі інтегрування:'); readln (a);
write ('Введіть значення правого межі інтегрування:'); readln (b);
write ('Введіть значення похибки:'); readln (eps);
write ('Введіть початкове значення кількості разбиений:'); readln (n);
writeln;
gr (a, b);
write ('Чекайте, йде обробка даних');
m0: = 0;
writeln (lf, 'Курсова робота');
writeln (lf, 'ПО КУРСУ ІНФОРМАТИКА');
writeln (lf, '«наближеного обчислення значень');
writeln (lf, 'ВИЗНАЧЕНОГО ІНТЕГРАЛА »');
writeln (lf, 'Виконав: студент гр.');
writeln (lf, 'Варіант 22 y = 19.44 * exp (0.224 * x)');
writeln (lf, 'Xn =', a: 5:3, 'Xk =', b: 5:3, 'Eps =', eps: 5:3);
writeln (lf);
writeln (lf, 'РЕЗУЛЬТАТИ ОБЧИСЛЕНЬ');
repeat
h: = abs (b - a) / n;
m1: = pr;
m2: = tr;
m3: = si;
m4: = ch;
seps: = abs (m1 m0);
writeln (lf, '│', n: 7, '│', m1: 11:8, '│', m2: 11:8, '│', m3: 11:8, '│', m4: 11: 8, '│', seps: 11:8, '│');
m0: = m1;
n: = n +200;
until (seps <= eps);
clrscr;
reset (lf);
while not eof (lf) do
begin
readln (lf, st);
writeln (st);
end;
{Write ('Натисніть <Enter> для виходу з програми');
repeat until keypressed;}
close (lf);
end.
Список використаної літератури
Бахвалов Н.С. «Чисельні методи». М.: Наука, 1987 - 598 с.
Каліткін М.М. «Чисельні методи». М.: Наука, 1988 - 512 с.
Крилов В.І. «Обчислювальні методи». М.: Наука, 1977 - 408 с.
Нечаєв В.І., Нечаєва О.А., Почуева Л.М. «Чисельні методи». Тула, 1999.