- •Етапи підготовки і рішення задач на еом
- •Програма, що не має помилок часу трансляції і виконання, може і не дати вірних результатів через так звані логічні помилки в обраному алгоритмі, тобто алгоритмічних помилок.
- •Запис алгоритмів у виді блок – схем
- •Мови програмування
- •1. Основні поняття алгоритмічної мови Бейсік.
- •3. Сталі та змінні.
- •4. Функції. Вирази.Оператор присвоєння
- •Вправи та запитання
- •5. Надання значень змінним
- •Оператор read.
- •6. Виведення результатів
- •Оператор Результат
- •Оператор Результат
- •7.Лінійні програми
- •Розгалуження
- •1.Логічний вираз
- •3. Команда розгалуження if. Повна форма умовної команди.
- •10.Цикли
- •11.Оператори циклу
- •12. Обчислення суми, добутку
- •13. Ітераційні цикли
- •14. Вкладені цикли
- •Мал.12 Схеми вкладених циклів.
- •15. Використання масивів
- •Вправи та запитання
- •16. Нестандартні функції та підпрограми
- •17. Робота з текстовими даними
- •18. Оператори роботи з графічною інформацією.
- •19. Робота з файлами даних
- •20 Основи роботи в пакеті MathCad
- •Визначення основних понять та позначень, безпосередньо зв'язаних з процесом обчислень у середовиіщі пакету Вхідний алфавіт
- •Типи констант і змінних
- •Розмірність, одиниці вимірів та одиниці маштабування
- •Базові обчислювальні конструкції пакета
- •Реалізація ітеративних обчислень.
- •Функції керування обчисленнями
- •Побудова декартових графіків
- •Методи доступу і роботи з файлами даних
- •Вбудовані функції та функції користувача
- •Розділ 21Алгоритми та програми реалізації загальних чисельних методів.
- •21.1. Розв’язання систем лінійних рівнянь.
- •21.2 Інтерполяція та екстраполяція.
- •21.3. Розв’язання нелінійних та трансцендентних рівнянь.
- •21.4 Розв’язування систем нелінійних рівнянь.
- •Програма 14
- •21.5. Пошук екстремумів функцій одної та багатьох змінних.
- •Програма 15
- •Програма 16
- •Програма 17
21.3. Розв’язання нелінійних та трансцендентних рівнянь.
Розв’язання нелінійних (зокрема, трансцендентних) рівнянь виду
F(x)=0 (2)
заключається у відшукуванні одного або всіх коренів на відрізку [a, b] зміни x. Зазвичай намагаються локалізувати кожен корінь у своєму відрізку [a, b]. Тоді знаходження всіх коренів зводиться до локалізації кожного кореня з послідуючим звуженням відрізків локалізації кореня [a, b] одним з описаних нижче методів.
Метод простих ітерацій заснований на представленні (2) у вигляді
x=f(x) (3)
і багатократному застосуванні ітераційної формули xn+1=f(xn) до того часу, доки дотримується умова
|xn+1-xn|≥ε,
де
ε
– задана погрішність обчислення кореня
x.
Ітераційний процес збігається (тобто
),
якщо дотримується умова
Програма 7
10 PRINT ’ВВЕДІТЬ РІВНЯННЯ X=F(X) МЕТОДОМ’
15 PRINT ’ПРОСТИХ ІТЕРАЦІЙ’
20 INPUT ’ЗАДАЙТЕ ПОЧАТКОВЕ ЗНАЧЕННЯ X X0=’X
25 INPUT ’ЗАДАЙТЕ ПОГРІШНІСТЬ РЕЗУЛЬТАТУ E=’E
30 GOSUB 70
40 IF ABS(F-X)<E THEN 60
50 LETX=F:GOTO 30
60 PRINT ’КОРІНЬ X=’X: GOTO 20
65 REM ’ПІДПРОГРАМА ОБЧИСЛЕННЯ F(X)’
70 LETF=SIN(X)+.25
75 RETURN:END
В рядку 70 програми 7 записаний вираз f(x)=sin x+0,25 (підпрограма), що відповідає розв’язанню трансцендентного рівняння
F(x)=x – sin x – 0,25=0.
Для
початкового значення
x=x0=1,2
та погрішності
ε=E=1∙10-6
отримаємо
за часом рахунку біля 5 с.
Метод Ньютона (дотичних) заснований на заміні F(x) у точці початкового наближення x=x0 дотичної, пересікання якої з осью x дає перше наближення x1, тощо (рис.4). Таким чином, ітераційний процес сходження до кореня реалізується формулою
до того часу, поки дотримується умова. Метод забезпечує швидку (квадратичну) збіжність, якщо
У
якості x0
обирають той кінець відрізку [a,
b],
на якому знаки F(x0)
та
співпадають. Виграш у часі обчислень
за рахунок швидкої збіжності зменшується
через необхідність обчислення окрім
F(xn)
похідної
Виключення складають приватні випадки,
коли вираз, за яким обчислюється
не складніше виразу для обчислення
F(xn)
окремо.
Програма 8
10 PRINT ’РОЗВ’ЯЗАННЯ РІВНЯНЬ F(X)=0 МЕТОДОМ НЬЮТОНА’
20 INPUT ’ЗАДАЙТЕ ПОЧАТКОВЕ НАБЛИЖЕННЯ X0=’X
25 INPUT ’ЗАДАЙТЕ ПОГРІШНІСТЬ РЕЗУЛЬТАТУ E=’E
30 GOSUB 60:LETX=X-F
40 IF ABS(F)>E THEN 30
50 PRINT ’КОРІНЬ РІВНЯННЯ X=’X:GOTO 20
55 REM ’ПІДПРОГРАМА ОБЧИСЛЕННЯ F(X)/(DF/DX)’
60 LETF=(X-SIN(X)-.25)/(1-COS(X))
70 RETURN:END
П
р и к л а д. Обчислити корінь рівняння
(4) на відрізку [1,1; 1,2]. В данному випадку
отож
Обчислення
цього виразу оформлено підпрограмою,
що записана з рядка 60. Оскільки
та F(x)>0
при x=b,
у якості
початкового зближення візьмемо x0=b=1,2.
Модифікований
метод Ньютона заключається
у тому, що замість обчислення похідної
на
кожному кроці ітерацій знаходиться її
наближене значення
де
.
Отже, ітераційна формула має вигляд
Значення Δx не обов’язково повинно дорівнювати ε. Рівність дозволяє зменшити кількість вихідних даних при вводі.
Програма 9
10 PRINT ’РОЗВ’ЯЗАННЯ РІВНЯНЬ F(X)=0 МОДИФІКОВАНИМ’
15 PRINT ’МЕТОДОМ НЬЮТОНА’
20 INPUT ’ЗАДАЙТЕ ПОЧАТКОВЕ НАБЛИЖЕННЯ X0=’X
25 INPUT ’ЗАДАЙТЕ ПОГРІШНІСТЬ РЕЗУЛЬТАТУ E=’E
30 GOSUB 70: LETL=F: LETX=X+E
40 GOSUB 70:LETL=E*L/(F-L):LETX=X-L-E
50 IF ABS(L)>E THEN 30
60 PRINT ’КОРІНЬ РІВНЯННЯ X=’X:GOTO 20
70 LETF=X-SIN(X)-.25
80 RETURN:END
Метод
Рибакова
також можна розглядати як модифікацію
метода Ньютона при заміні
деяким
числом
де ξ
– значення x
на відрізку [a,
b],
при якому
максимальна. При
збіжність
не порушується, але уповільнюється.
Метод Рибакова зручне для пошуку всіх
коренів рівняння (2) на відрізку [a,
b]
з допомогою слідую чого алгоритму.
Задаємо початкові значення x=x0=a.
Для кожної n-ої ітерації (n=0, 1, 2, ...) обчислюємо
(7)
і перевіряємо умову
(8)
Якщо
(8) не виконується, виходить, знайдені
всі корені. В противному випадку
перевіряємо виконання умови
Якщо вона виконується, повторюємо цикл
обчислень по формулі (7). Якщо ця умова
не виконана, значить, xn+1
є одним з коренів і значення xn+1
виводиться на друк. Після цього переходимо
до виконання наступного пункту.
Задаємо початкове наближення до чергового кореня
і, якщо x0<b,
йдемо до виконання п.2. Якщо x0≥b,
обчислення вважаємо завершеними.
Кількість
ітерацій при реалізації методу Рибакова
Функція F(x)
на відрізку [a,
b]
може мати похідну з розривами першого
роду.
Програма 10
10 PRINT ’ЗНАХОДЖЕННЯ ВСІХ КОРЕНІВ РІВНЯННЯ F(X)=0’
15 PRINT ’В ІНТЕРВАЛІ ВІД А ДО В МЕТОДОМ РИБАКОВА’
20 INPUT ’ВВЕДІТЬ ГРАНИЦІ ІНТЕРВАЛУ A, B ’A, B
25 INPUT ’ЗАДАЙТЕ ПОГРІШНІСТЬ ЗНАХОДЖЕННЯ КОРЕНЯ E=’E
30 INPUT ’ЗАДАЙТЕ ЧИСЛО M=’M:LETX=A:LETT=0:LETI=0
40 GOSUB 120:LETZ=X+ABS(F)/M
50 IF Z >=B GOTO 115
60 IF Z-X >=E GOTO 90
70 IF T=0 THEN LETW=Z
80 LETX=Z+E:LETY=Z:LETT=1:GOTO 40
90 IF T<>1 THEN 110
100 LETI=I+1:PRINT!2.0!’X’I’=’!F1.9! (Y+W)/2:LETT=0
110 LETX=Z:GOTO 40
115 PRINT ’КІНЕЦЬ ОБЧИСЛЕНЬ’:STOP
120 LETF=X^4-13*X^2+36
130 RETURN:END
Метод ділення відрізку [a, b] надвоє (метод дихотомії) реалізується наступним алгоритмом (для F(a)>0).
Знаходимо x=(a+b)/2.
Обчислюємо F(x).
Якщо F(x)>0, задаємо a=x, інакше b=x.
Перевіряємо умову b-a=ε; якщо вона виконується, йдемо до п.1, якщо не виконується, закінчуємо обчислення і рахуємо, що
з
заданою точністю ε.
Кількість ітерацій при використанні цього методу
значуще, і тому збіжність його повільна. Однак при будь-якій ширині відрізку [a, b] збіжність гарантована. Крім того, простота реалізації методу зменшує кількість допоміжних операцій і частково компенсує збільшення загального часу рахунку через повільну збіжність.
Метод порозрядного зближення для пошуку всіх коренів відрізку [a, b] реалізується наступним алгоритмом.
Задаємо крок c=h, x=a, k=0 і знаходимо W=sngF(x).
Задаємо значення x=(x+c)і перевіряємо умову (x-c)≥b. Якщо вона виконується, йдемо до п.2, інакше до п.4.
Обчислюємо F(x) І перевіряємо умову FW/c>0. Якщо вона виконується, йдемо до п.2, інакше до п.4.
Задаємо c=-c/R, де R – показник розрядності (зменшення кроку c), і перевіряємо виконання умови |c|>ε/R, де ε – задана погрішність обчислення кореня. Якщо ця умова виконується, йдемо до п.2, інакше до п.5.
Задаємо k=k+1 і виводимо на друк (індикацію) значення k-го кореню xk=x. Тоді уважаємо c=h, W= -W і йдемо до п.2.
Програма 11
01 PRINT ’РОЗВ’ЯЗАННЯ РІВНЯНЬ F(X)=0 МЕТОДОМ ДИХОТОМІЇ’
05 INPUT ’E, R, I0, D’ E, R, I0, D
10 INPUT ’A, B, H’ A, B, H
20 LETX=(A+B)/2
30 GOSUB 90
40 IF F>0 THEN 60
50 LETB=X: GOTO 70
60 LETA=X
70 IF B-A>H THEN 20
80 PRINT ’КОРІНЬ=’X: STOP
90 LETF=E-X-R*I0*(EXP(D*X)-1)
100 RETURN: END
Програма 12
10 PRINT ’ОБЧИСЛЕННЯ ВСІХ КОРЕНІВ НЕЛІНІЙНОГО РІВНЯННЯ F(X)=0’
20 PRINT ’В ІНТЕРВАЛІ (A,B) МЕТОДОМ ПОРОЗРЯДНОГО НАБЛИЖЕННЯ’
30 INPUT ’ЗАДАЙТЕ ГРАНИЦІ ІНТЕРВАЛУ A, B ’A,B
40 INPUT ’ЗАДАЙТЕ ПОГРІШНІСТЬ ОБЧИСЛЕННЯ КОРЕНІВ E=’E
50 INPUT ’ЗАДАЙТЕ КРОК ПОЧАТКОВОГО ПОШУКУ H=’H
60 LETC=H:LETK=0:LETX=A:GOSUB 120:LETW=SGN(F)
70 LETX=X+C”IF X-C>=B THEN PRINT ’КІНЕЦЬ’:STOP
80 GOSUB 120:IF F*W/C>0 THEN 70
90 LETC=-C/4:IF ABS(C)>E/4 THEN 70
100 LETK=K+1:PRINT!2.0!’X’K!F1.9!’=’X
110 LETC=H:LETW=-W:GOTO 70
120 LETI=.2718*X*EXP(-10*X)+1E-8*(EXP(20*X)-1)
130 LETF=(1-X)/125-I:RETURN:END
Метод
хорд
(рис.
5.а).
При цьому
методі кожне значення xn+1
знаходиться як точка перетину осі
абсцис з хордою, яка проведена через
точки F(a)
та F(b)
, при чому одна з цих точок фіксується
– та, для якої знаки F(x)
та
однакові. Якщо нерухомий кінець хорди
x=a,
то
а якщо нерухомий кінець хорди x=b, то
Якщо
|xn+1-xn|>ε,
то
в
першому
випадку
вважаємо
b=xn+1,
в
другому
a=xn+1
і
повторюємо
обчислення.
При
використанні методу хорд
вважається, що корінь знаходиться на
відрізку [a,
b].
Метод січних (рис.5.б) реалізується алгоритмом, описаним вище, якщо абсциси a та b взяті з однієї сторони від кореня і не фіксуються.
Необхідність обчислення (умови збіжності цих методів аналогічні (6)) і вибору однієї з двох формул ускладнюють практичне застосування методів хорд та січних по одинці.
Комбінований метод січних – хорд забезпечує гарантовану збіжність при виборі у межах відрізку [a, b] двох наближень: нульового x0 та першого x1. Він реалізується алгоритмом, описаним для методу Ньютона з заміною похідної її наближеним значенням – множник перед F(xn):
Програма 13.
01 PRINT ‘Рішення рівняння F(x)=0 комбінованим’
02 PRINT ‘Методом перетину-хорд’
05 INPUT ‘E,R,10,,D’E, R,10,D
10 INPUT ‘X0,X1,H’ X0, X1, H
20 LET X=X0: GOSUB 80
30 LET A=F: LET X=X1: GOSUB 80
40 LET B=F: LET Y=X0-A*(X1-X0)/(B-A)
50 LET X0=X1: LET X1=Y
60 IF ABS(X1-X0)>H THEN 20
70 PRINT ‘Корень=’X1: STOP
80 LET F=E-X-R*10*(EXP(D*X)-1)
90 RETURN: END
100 RETURN: END
