Б С Бусигін - Прикладна інформатика - страница 37

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 

n := 1; { Ім'я змінної, що приймає значення n}

n2:= 2; { Ім'я змінної, що приймає значення 2n} {    Фактично привласнюємо змінним значення виразів при n = 1 , яке } {моделює значення змінної n. Змінну 2n моделює значення змінної n2. } {Обмежуємо дію циклу з передумовою значенням n=40,} {що еквівалентно максимальному значенню n1=40}.

{}

Writeln   ('Значення  змінних=',   med1:8:1, med2:8:1, n:3,   Factor1n:8:1,  n2:3, Factor2n:8:1);

while    n <= 40 do begin

med1  := -med1; med2   := (-1)*med2; n:= n + 1;

Factor1n  := Factor1n * n; n2   := n2 + 2;

Factor2n  := Factor2n *   (n2-1)   * (n2);

Writeln       ('Значення       змінних=', med1:8:1,

med2:8:1,    n:3,    Factor1n:8:1, n2:5,

Factor2n:11:1);

end;

End.

Дуже важливим моментом є процес відображення циклічного (тобто послідовного) додавання деяких даних до значення визначеної змінної. Припустимо, маємо обчислити вираз Y = A+5, при значенні А=2.

На мові ТП це виглядає так:

А := 2;

Y := A + 5; {Стає Y = 7}

Але, якщо треба додати до значення, що знаходиться у змінній Y ще якесь значення (припустимо 8), це буде виглядати так:

Y := Y + 8;   { Стає Y = 15}

Y := Y + 10; { Стає Y = 25}

........................... {і так далі}.

Вираз X := X + 10 для комп'ютера вказує, що потрібно:

О узяти попереднє значення, що знаходиться у змінній Х;

© скласти його з постійною 10;

© заслати нове значення на старе місце у змінну Х. Інший приклад. Припустимо потрібно обчислити вираз:

f = cos x + cos y + cos z.

Якщо це записувати одним виразом, то можна на мові ТП написати так:

f  := cos   (x)   + cos   (y)   + cos (z).

Тоді вбудованою функцією ccs(x) будуть обчислені три значення косинусів від відповідних аргументів x, y, z, а потім, після підсумовування цих трьох значень, сума буде заслана у змінну f і замінить там попереднє значення. Але, якщо цей же вираз обчислювати у циклі, то потрібно попередньо очистити змінну f, а потім провадити додавання на кожному кроці. Очищення змісту змінної f виконується засиланням до неї нульового значення. Відповідний код може виглядати так:

f  := 0;

f := f + cos (x); f := f + cos (y); f  := f + cos (z);

У результаті виконання цієї послідовності команд отримаємо результат, що повинен дорівнювати обчисленому у вищенаведеному виразі.

Вправи

1. Обчислити за допомогою циклу з параметром for значення кінцевої суми S для виразу:

S = t ("l)nn2 +Z ("l)3nn3.

n=1 n=1

Проведіть дослідження роботи програми за допомогою дебаггера.

2. З використанням оператора циклу з передумовою while напишіть і виконайте програму табулювання функції y з дійсним аргументом x = 0.25 на відрізку зміни n [1, 5]. Проведіть дослідження роботи програми за допомогою дебаггера.

sin 3п - x

y =-!.

n!

3. З використанням оператора циклу з післяумовою while напишіть і виконайте програму табулювання функції y з дійсним аргументом на відрізку зміни n [1, 7] при х= -9. Проведіть дослідження роботи програми за допомогою дебаггера.

2n!

З

x

у

8.20. Особливості обчислення нескінченних (рос. - бесконечных) сум. Організація ітераційних процесів за допомогою циклів while та repeat

Одним з найбільш розповсюджених алгоритмічних процесів є математична дія додавання. У простих випадках сума виглядає звичайно так:

С = А + В.

Однак у більш складних випадках сума виглядає значно інакше, коли кількість елементів , що додаються, заздалегідь невідома, а результат прямує до границі (рос. - стремится к пределу) за деякою формулою. Типовим прикладом ітераційного циклічного процесу може бути задача обчислення суми нескінченного ряду. Поняття суми пов'язане з поняттям збіжності (рос. -сходимости) такого нескінченного ряду. Цей ряд значень ?0, іх,...,іп,... зветься збіжним (рос. - сходящимся), якщо сума їп = ґ0 + ґ1 + ... гп його перших (п+1)

елементів, що складаються при нескінченному зростанні п прямує до деякої границі 5, яка і зветься сумою ряду, тобто

Ніл £ гг = 5

і = 0

Загальний член tn ряду, що збігається, при цьому прямує до нуля, тобто:

Кт Іп = 0;   Кт     - ^_і) = 0.

п — со п — со

Таким чином, послідовність s1, 52,..., sn,... є послідовністю значень, яку ми шукаємо і визначає наступні умови закінчення додавання:

Sn Sn-1

< є   або    tJ < є.

Взагалі, сумою декількох елементів зветься додавання чергових значень до суми усіх попередніх елементів з цієї послідовності.

У математичному виді це записується за допомогою знаку додавання

^ 1,11 1

>— = 1 +-+-+ ... +- (8.11)

ПҐі п!        1 • 2   1 • 2 • 3 1 • 2 • 3 • _ • п v }

X - = 1 + 2 + 3 + - + - (8-12) п        2   3 п

n

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

Так, як операції додавання у математичному розумінні потрібно виконувати до нескінченності (оо), потрібно розуміти, що у комп'ютері таківеликі значення, звичайно ж, оброблятися не можуть. З іншого боку, як правило, потрібно обчислювати кінцеву суму з деякою точністю. Розглянемо, що мається на увазі у цьому випадку.

Коли виконуються обчислення на деякому £-му кроці вже мається накопичена сума (к-1) елементів і черговий к елемент додавання (рис. 8.42), що сумується до загальної купи.

і + а2 + ... + а к-і) + а к

к-1

І

п=1

Рис. 8.42. Схема додавання у нескінченних сумах

З точки зору значення чергового елементу ряду, то він зробить тим менший внесок у загальну суму, чим меншим він буде сам. Якщо він стане менше якоїсь достатньо малої постійної величини (константи) (наприклад, наперед заданої величини є = 0.0000001 чи деякої іншої), він повинен перестати вкладати відповідний внесок у загальну суму і впливати на ті цифри суми, які потрібні для точного її обчислення. Але, як свідчить досвід чисельних обчислень, є ще деякі фактори, котрі впливають на процес розробки алгоритму. Подивимось уважніше на результати обчислення сум, що відображаються формулами (8.11) та (8.12). Виявляється, що точність залежить ще і від того, як швидко збільшується знаменник дроби, що обчислюється. Так для формули (8.11) значення компонентів будуть змінюватися так (табл.8.43).

Таблиця 8.43

_Зміна значень компонентів формули (8.11)_

 

 

Значення суми К елементів

Значення п

Значення елемента —

п!

К 1

Е—

1

1.000000000

1.0

2

0.500000000

1.5

3

0.166666666

1.6(6)

 

10

0.000000275

1.718281801

11

0.000000025

1.718281826

12

0.000000002

1.718281828

Примітка. К - кількість підсумованих елементів

Обчислимо формулу (8.12). Бачимо, що знаменник дроби, що має участь у виконанні потрібних дій росте дуже швидко і це можна бачити у наступній таблиці 8.44:

Таблиця 8.44 Значення елементів ряду (8.12)_

Значення п

Значення

п

к 1

Значення V

п=1 П

1

1

1.0000000

2

0.5

1.5000000

3

0.3(3)

1.8333(3)

10 0.1000000

2.9289683

1350 0.0007407

7.7854450

10224

0.0000978

9.8097577

20000

0.0000500

10.4807282

100000

0.0000100

13.0901461

1000000

0.0000010

15.3927267

5000000

0.0000002

17.0021642

10 000 000                0.0000001 17.6953113

Уявляється, що коли елемент, який додається, зменшується дуже повільно, передбачити його внесок у загальну суму досить важко. Тому Ви повинні мати на увазі декілька варіантів алгоритмів, що можуть дати змогу отримати потрібний результат у різних випадках чи використати дебаггер для контролю точності результату обчислень.

Подивимось уважніше на таблиці 8.43 та 8.44. Для успішного завершення сумування елементів першої суми, достатньо перевірити умову, щоб черговий елемент ряду був менший деякого малого числа є (епсілон), яке завдає сам програміст (користувач). Величина є і буде контролювати точність кінцевої суми. Іншою мовою, (згідно таблиці 8.45), якщо ми порівнюємо значення

чергового елемента — з є= 1е-6 (так записується у ТП число 0.000001), то

п!

отримуємо значення суми з точністю приблизно 6 знаків після крапки. При порівнянні значення тих же елементів з є= 1е-7, точність збільшується, і так далі.

Таблиця 8.45

_Залежність значення кінцевої суми від є

Значення є, що завдає користувач

Кінцеве значення параметра п

Значення останнього

1 . елемента — у суммі п!

Значення кінцевої

к 1

суми V

п=1 п !

1е-6 10

0.000000275 1.718281801

1е-7 11

0.000000025 1.718281826

1е-8 12

0.000000002 1.718281828

Реалізація алгоритму ітераційного обчислення ряду підходом може виглядати так: з таким

Uses Crt;

Const Eps = 1.e-7;    {Задаємо точність обчислення 8=0.0000001}

Var

Sum,  Elm,  Fact    :  Real;   {Об'являємо змінні} n :  Integer;   { Об'являємо змінну для обчислення n} Begin    ClrScr;   {Очищаємо екран процедурою ClrScr} n := 1; {Ініціалізуемо n}

Sum := 0;   {Обнуляємо змінну під суму} Elm := 1;   {Ініціалізуємо Elm для входу у цикл} Fact  := 1;   { Ініціалізуємо начальне значення факторіалу} while    Elm > Eps do begin

Fact := Fact * n;   {Моделюємо значення факторіалу n!}

Elm := 1/ Fact;   { Моделюємо значення елементу — }

n!

co і

Sum := Sum + Elm;   { Моделюємо суму V}

n=i n!

n := n + 1;   { Моделюємо зміну значень індекса n}

end;

Writeln('Rezultat= ', Sum); {Виводимо на екран результат} End.

Вправи

1. Обчислити наближене значення нескінченної суми 5 з точністю до

є=0.05. 5 = — +     +...+-1-+...

1- 4   4 • 7       (3л-2)(3л +1)

2. Обчислити наближене значення нескінченної суми 5 з точністю до

Е=о.оо5. 5 = х-+—-...+(-іГ(2^ ±-

3. Обчислити наближене значення нескінченної суми з точністю до

8=0.00001. 5 = х- —+-...+(-і)л—±...

2!    4!       v   ' (2л)!

4. Обчислити наближене значення нескінченної суми 5 з точністю до

8=0.00000001. 5 =  +     1)2 +■■■+(х-Л)Л +...

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 


Похожие статьи

Б С Бусигін - Прикладна інформатика