Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_1_05_ВНУ.doc
Скачиваний:
2
Добавлен:
08.09.2019
Размер:
1.71 Mб
Скачать

Ітераційні цикли

У процесі різних обчислень доводиться будувати послі­довність значень g1, g2, ...gn, що визначаються внаслідок по­вторення тіла циклу. Ці значення утворюють збіжну послідов­ність, що прямує до деякої границі а

Це, звичайно, цикли з невідомою наперед кількістю по­вторень. Кожне наступне значення послідовності обчислюється через попереднє gn-1 і з урахуванням збіжності є точнішим наближенням до результату, тобто границі а. Цикли, що реалізують таку послідовність наближень, називаються ітераційними.

Умова продовження (чи закінчення) в ітераційних циклах ґрунтується на властивості безмежного наближення елементів послідовності до границі а. Ітераційний цикл закінчується, коли для деякого п виконується умова

,

де ε - допустима похибка обчислень.

Розглянемо приклади використання ітераційних циклів.

Обчислення суми знакозмінного ряду із заданою точністю

Обчислити в точці х значення функції y=cos(x) та суму нескінченного ряду:

,

де

Визначимо загальний член ряду за рекурентною формулою

.

Звідси

Тоді

Програма має такий вигляд:

program SumZnZm;

var

x,y,yn,pn,s,eps: real;

n: integer;

begin

writeln(' Введіть значення x',

' та точність eps');

readln(x,eps);

s:=0;

yn:=1;

n:=0;

while abs(yn)>eps do

begin

s:=s+yn;

n:=n+1;

pn:=-sqr(x)/(2*n*(2*n-1));

yn:=yn*pn

end;

y:=cos(x);

writeln('cos(',x:6:2,')=',y:7:3);

writeln('Сума ряду s=',s:7:3);

readln;

end.

Обчислення суми знакопостійного ряду із заданою точністю з використанням формули залишкового члена

Обчислити з точністю ε всі значення функції та відповідні суми знакопостійного ряду

змінюючи х на інтервалі [с; d] з кроком h.

Залишковий член оцінювати за формулою

В даному випадку маємо складний циклічний процес, а саме процес типу “цикл в циклі”. Зовнішній цикл (арифметичний) змінює значення х на інтервалі [а; b] з кроком h. Внутрішній цикл забезпечує для конкретного значення х обчислення відповідних значень функції y та суми S. Оскільки обчислення суми необхідно виконати з заданою точністю ε, то внутрішній цикл буде ітераційним.

На відміну від попереднього прикладу всі члени даного ряду одного і того ж знаку. Оцінку точності такого ряду здійснюють не за величиною поточного члена ряду, а за величиною залишкового члена. Зауважимо, що формули залишкових членів рядів дово­дяться в курсі математичного аналізу і, при потребі, їх можна знайти в довідниках.

Побудуємо рекурентні співвідношення.

Для поточного ряду:

Для залишкового члена ряду:

Для суми:

program SumZnPo;

uses

Crt;

Var c,d,h,eps,x,y,a,r,s:real;

k:integer;

Begin

CIrScr;

Writeln(' Введіть межі інтервалу c,d,',

' та крок h:');

Readln(c,d,h);

Write('Введіть точність обчислень eps:');

Readln(eps);

x:=c;

While x<=d+h/2 do

Begin

a:=1; s:=a; r:=2*x*x/3; k:=1;

While abs(r)>=eps do

Begin

a:=(x/(2*k-1))*(x/(2*k))*a;

r:=(x/(2*k+1))*(x/(2*k+2))*r;

s:=s+a;

k:=k+1;

End;

y:=(exp(x)+exp(-x))/2;

Writeln('x=',x:8:3,' y=',y:9:4,' s=',s:9:4);

x:=x+h;

End;

Readln;

End.