§ 5. Интегрирование с автоматическим выбором шага методом Рунге

§ 5. Интегрирование с автоматическим выбором количества узлов МЕТОДОМ РУНГЕ

Погрешность в вычислении определенных ин­тег­ралов по приближенным формулам, опи­сан­ным в п. 3.1 - 3.4, за­ви­сит от шага разбиения ин­тер­­вала ин­те­гри­ро­ва­ния h и от гладкости ин­те­гри­руемой функ­ции f (x), по­этому в общем слу­чае заранее вы­числить по­греш­ность ин­тег­ри­ро­ва­ния не­­воз­мож­­но. На практике для оцен­ки по­греш­нос­ти поль­зу­ются удобным правилом Рун­ге. Опи­шем это пра­вило более подробно.

Пусть некоторый интервал [a, b] разбит рав­но­мер­но на n отрезков [xi ; xi+1 ], i = 1, 2, ..., N; x0 = a; xN = b. На каж­дом отрезке применим формулу тра­пе­ций:

.

Слева в последней формуле стоит точное зна­че­ние опре­деленного интеграла , а справа - его при­­бли­­же­н­ное зна­че­ние . Найдем по­греш­ность по­­следней фор­му­лы с уче­том оценок, по­лученных в § 2,

. (*)

Уменьшим теперь шаг разбиения вдвое и, рас­суж­дая подобным образом, получим

. (**)

Интегрируемая функция оставалась не­из­мен­ной в том и другом случае, формула ин­тег­ри­ро­ва­ния была также одинаковой, следовательно, конс­тан­та сi в обоих случаях должна быть тоже оди­на­ко­вой. Тогда, выражая сi hi из фор­мул (*) и (**) и выполнив эле­ментарные пре­об­ра­зо­ва­ния по­лу­чен­ного вы­ра­же­ния, будем иметь

,

откуда, пред­ставив 8 = 23 + 1 - 1, раскрыв скобки и при­ве­дя подобные, окон­ча­тел­ьно получим

. (3.7)

В выражении (3.7) в правой части стоят только известные величины - значения ин­тег­ра­лов, вы­чис­лен­ные для шагов hi и hi / 2 .

В общем случае, когда интегрируется функция не­ко­то­рой квадратурной формулой порядкa m, то­г­да формула (3.7) будет немного иной:

. (3.8)

Используя формулу (3.7) или (3.8), в зависимости от ти­па фор­му­лы приближенного интегрирования (пря­мо­у­голь­ни­ков, тра­пеций, Симсона или Нью­то­на-Ко­те­са) мож­но, за­­дав не­об­ходимую точ­ность вы­чис­ле­ний, ин­те­гри­ровать с ав­­­то­ма­ти­­чес­ким вы­бо­ром ша­­га ин­те­гри­ро­ва­ния. Про­це­ду­ры, ре­­а­ли­зу­ющие дан­­ный метод, можно взять из пре­ды­ду­щих § 2 - 4 и после некоторой пе­ре­ра­бот­ки использовать для ав­­то­ма­ти­ческого выбора шага ин­тегрирования. На при­­ме­ре про­це­­ду­ры intlps по­ка­жем, как это можно вы­пол­нить. Во вход­ные па­ра­­метры ука­­занной про­це­дуры до­бав­ляем но­­вую пе­­ре­мен­ную - eps, задающую не­­обходимую точ­­ность вы­­­чис­ле­ний. Текст переработанной про­це­ду­ры при­­во­дится ни­же.

procedure intlps (var s:real; k:integer;

eps:real);

begin

s := 0.0; n := 1;

repeat

s1 := s; h := (b-a) / n;

x := a;

if k<5 then

for i := 0 to n do

begin

if k <>3 then x := a+ h*i

else x:=a+h/2+h*i;

f := func (x);

if k=4 then f := f/2.0;

if (i=0) and (k<>2) then s := s + f;

if (i=n) and ((k=2) or (k=4)) then

s := s + f;

if (i<>0) and (i<>n) then

if k<>4 then s := s+f

else s := s + f*2;

end

else

begin

for i := 1 to n-1 do

s := 2*func(x+h*i)+4*func(x+h*i-h/2)+ s;

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

s := s / 6;

end;

s := s * h; n := n * 2;

until abs (s1 - s) > eps;

end.

Для контроля и проверки процедуры ис­поль­зо­­ва­лась функция, заданная в § 2, значения ко­­­то­рой вы­чис­ля­лись ме­тодом Симсона. Ре­зуль­та­­ты по­лучились сле­ду­ющие: при за­дан­ной точ­нос­ти 0,00001 по­тре­бо­ва­лось толь­ко одно раз­­би­е­ние от­рез­ка, и значение опре­де­ленного ин­те­гра­ла при n = 2 было равно 0.0968537329.

0

Соседние файлы в папке GLAVA3_1