- •Етапи підготовки і рішення задач на еом
- •Програма, що не має помилок часу трансляції і виконання, може і не дати вірних результатів через так звані логічні помилки в обраному алгоритмі, тобто алгоритмічних помилок.
- •Запис алгоритмів у виді блок – схем
- •Мови програмування
- •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
Програма 16
10 PRINT ‘Пошук максимуму F(x) методом дихотомії’
20 INPUT ‘Введення границі інтервалу пошуку A,B’A,B
25 INPUT ‘Задайте похибку результату E=’E
30 IF ABS(B-A)<2*E THEN 100
40 LET C=(A+B-E)/2:LET D=(A+B+E)/2
50 LET X=C:GOSUB 120:LET K=F
60 LET X=D:GOSUB 120:LET L=F
70 IF K>L THEN 90
80 LET A=C: GOTO 30
90 LET B=D: GOTO 30
100 LET X=(A+B)/2:GOSUB 120
110 PRINT ‘XM=’X:PRINT’F(XM)=’F:STOP
120 LET F=((.1*X-2)*X+10)*X
130 RETURN: END
Програма 17
10 PRINT ‘Пошук максимуму F(x) методом золотого розрізу’
20 INPUT ‘Введіть границі змінної X A,B ‘A,B
25 INPUT ‘Задайте похибку результату E=’ E
30 LET K=(SQR(5)-1)/2
40 GOSUB 140
50 GOSUB 160
60 IF ABS(D-C)<E THEN 120
70 IF L>M THEN 100
80 LET A=C:LET C=D:LET L=M
90 GOSUB 160:GOTO 60
100 LET B=D:LET D=C:LET M=L
110 GOSUB 140:GOTO 60
120 LET X=(C+D)/2:PRINT’XM=’X
130 GOSUB 180:PRINT’F(XM)=’F:STOP
140 LET C=A+(1-K)*(B-A)
150 LET X=C:GOSUB 180:LET L=F:RETURN
160 LET D=A+K*(B-A)
170 LET X=D:GOSUB 180:LET M=F:RETURN
180 LET F=((.1*X-2)*X+10)*X
190 RETURN:END
21.6.Обчислення означених інтегралів.
Означений інтеграл:
l= (11)
з межами інтегрування a та b можна трактувати як площину фігури, яка обмежена ординатами a та b, віссю абсцис х та графіком підінтегральної функції f(x).
Звичайний означений інтеграл, у якого відома його першообразна F(x), обчислюється
За формулою Ньютона – Лейбніца:
I=F(b)-F(a).
Тому достатньо обчислити значення функції F(x).
Численне інтегрування застосовується, якщо знайти F(x) складно чи неможливо. Воно заключається в інтерполяції f(x) на відрізку a, b відповідним поліномом, для якого певний інтеграл обчислюється за формулою численного інтегрування. Зазвичай відрізок a, b розбивається на m частин, до кожної з яких застосовується відповідна проста формула. Таким чином виникають складні формули численного інтегрування.
Метод прямокутників – найпростіший прийом численного інтегрування, при якому функція y=f(x) замінюється інтерполяційним многочленом нульового порядку. Для збільшення точності інтегрування відрізок a, b розбивається на m частин і формула прямокутника застосовується до кожного відрізку. Наведемо формулу прямокутників:
I
Внаслідок низької точності цей метод майже не застосовується.
Модифіційний метод прямокутників базується на представленні f(x) ординатами, які зміщенні на величину 0,5h, де h=(b-a)/m:
I h f(xi+0,5h)+ f() – значення другої функції f(x) в точці x=, де вона є максимальною.
Метод трапецій заключається в лінійній апрксимації f(x) на відрізку a, b. Для зменшення похибки a, b розбивається на m частин довжини h=(b-a)/m (при методі прямокутників f(xi)=const=yi на цьому відрізку).
З врахуванням сумування ординат всередині відрізка a, b формула методу трапецій має вигляд:
I f(x)dx f(a)+4f(a+h)+2f(a+2h)+4f(a+3h)+…+4f(b-h)+f(b)- f().
Вираження для остаточного члена показує, що формула Сімпсона є точною, навіть якщо f(x) –многочлен третього ступня. Ця особливість формули Сімпсона пояснює її переважаюче застосування – у деяких ЄВМ обчислення по ній реалізується мікропрограмно.
Програма 18.
П р и к л а д. Обчислити інтеграл
I= dx=1,398717474
при а=0 та b=1. Обчислення підінтегральної функції оформляється підпрограмою – див. Рядок 110. Для m=M=8 дістанемо І=1,39871724
Програма 18.
10 PRINT ‘Численне інтегрування методом Сімпсона’
20 INPUT ‘Введіть нижню границю інтегрування A=’A
25 INPUT ‘Введіть верхню границю інтегрування В=’B
30 INPUT ‘Введіть число інтервалів інтегрування M=’M
40 LET H=(B-A)/M/2 : LET X=A
50 GOSUB 110 : LET I=F:LET N=0
60 LET X=X+H :GOSUB 110 : LET I=I+4*F
70 LET N=N+2 : IF N=2*M THEN 90
80 LET X=X+H : GOSUB 110 : LET I=I+2*F : GOTO 60
90 LET X=B : GOSUB 110 : LET I=(I+F)*H/3
95 PRINT ‘Для A=’A’ B=’B M=’M: PRINT’’
100 PRINT ‘Значення інтегралу I=’I :GOTO 30
110 LET F=SQR(2*X+1) : RETURN : END
21.7. Розв’язання систем диференціальних рівнянь.
Завдання Коші заключається в розв’язанні систем звичайних диференційних рівнянь першого порядку, які представлені у вигляді:
=F1(x, y1, …, yj, …, yn),
=Fi (x, y1, …, yj, …, yn), (12)
=FN (x,y1, …, yj, …, yn),
де j=IN – номер кожної залежної змінної уj, х – незалежна змінна. Якщо завдання Коші розв’язується для аналізу поведінки системи чи об’єкту в часі, то х є часом (x=t). Розв’язання системи при заданих початкових умовах x=x0, y1(x0)=y10, y2(x0)=y20,…, yN(x0)=yN0 зводиться до пошуку залежностей (інтегральних кривих) y1(x), y2(x), …, yj(x), …, yN(x), які проходять через точки, задані початковими умовами (x0, y10), (x0, y20), …, (x0, yj0), …, (x0, yN0). Завдання Коші зводиться до інтегрування диференціальних рівнянь. Порядок методу численного інтегрування при цьому оприділяє і порядок методу розв’язання (12).
Узагальнена форма запису кожного з рівнянь системи може бути представлена в загальному вигляді:
=Fj(x, Yj),
де Yj в правій частині рівняння – вектори змінних у1, у2, ..., уj, …, yN, a Fj – права частина кожного з рівнянь. В загальному, одне диференційне рівняння (y=Yj=Y1, FJ=F=F1) записується у вигляді
=F1(x,y) (13)
Диференційне рівняння вищого порядку
Y(n)=F(x, y, y1, y11, …, y(n-1), (14)
де (n) – порядок рівняння може бути зведений до системи вигляду (12) чи (13) за допомогою слідуючих перетворень:
=y1,
=y2,
…………………..
=yn-1,
=F(x, y, y1, …., yn-1 (15).
Розв’язання (12) зводиться до рішення системи диференційних рівнянь першого порядку (15).
Метод Єйлера – Коші – найпростіший метод першого порядку для чисельного інтегрування диференційних рівнянь. Він реалізується слідуючою формулою:
Yj(i+1)=Yji+hFj(xi, Yji),
де h – крок інтегрування (прирощення змінної х). Цей метод має систематичне накопичення помилок.
Метод Єйлера - Коші з ітераціями заключається в обчисленні на кожному кроці початкового значення
Y(0)j(i +1)= Yji + hFj ( xi, Yji).
Далі з допомогою ітераційної формули
Y(k)j(i+1)= Yji + Fj (xi, Yji) + Fj (xi+1, Y(k-1)j(i+1)
розв’язання уточнюється. Ітерації проводять до тих пір, поки не співпаде задане число цифр результату на двох останніх кроках ітерацій. Похибка методу R (h3). Число ітерацій не повинно перевищувати 3 – 4, інакше потрібно зменшити крок h.
Модифіційний метод Єйлера другого порядку реалізується слідуючими рекурентними формулами:
Yj(i+1)= Yji + hFj (xi+ h/2, Y*j(i+1/2)),
де Y*j(i+1/2)=Yji + hFj (xi, Yji)/2. Метод дає похибку R (h3) і має менший час обчислень, бо замість декількох ітерацій відбувається обчислення тільки одного значення Y*j(i+1/2).
Метод трапецій – один із модифікацій методу Єйлера другого порядку. Він реалізується застосуванням на кожному кроці формули
Yj(i+1)= Yji + (Kj1 + Kj2),
де Kj1= hFj (xi, Yji), Kj2= hFj (xi + h, Yji + Kj1), і дає похибку R (h3). Цей метод відноситься до загальних методів Рунге – Кутта.
Метод Рунге – Кутта четвертого порядку є найбільш поширеним методом розв’язання систем (12) при кроці h = const. Його перевагою є висока точність – похибка R (h5) – і менша схильність до виникнення нестійкості рішення. Алгоритм реалізації методу Рунге – Кутта заключається в циклічних обчисленнях Yj(i+1) на кожному і+1 кроці по слідуючих формулах:
K1j = hFj (xi, Yji); K2j = hFj (xi + , Yji + K1j );
K3j = hFj (xi + , Yji + K2j );
K4j = hFj (xi + h, Yji + K3j);
Yj(i+1)= Yji + ( K1j + 2K2j + 2K3j + K4j).
При переході від одної формули до іншої задаються або обчислюються відповідні значення х та Yj та знаходяться по програмі значення функцій Fj (x, Yj).
Розв’язання одного диференційного рівняння методом Рунге – Кута відбувається по наведеним формулам, якщо в них опустити індекс j, а з алгоритму виключити цикли. Останнє різко спрощує програму та дозволяє отримати мінімальний можливий час рахунку.
Програма 19.
10 PRINT ‘Розв’язання одного диференційного рівняння’
20 PRINT ‘ методом Рунге – Кутта’
30 INPUT ‘Задайте крок H=’H : INPUT’ Задайте початкове X0=’X
40 INPUT ‘Введіть початкове Y0=’Z : LET Y=Z
50 GOSUB 100:LET A=F*H:LET X=X+H/2:LET Y=Z+A/2
60 GOSUB 100:LET B=F*H:LET Y=Z+B/2
70 GOSUB 100:LET C=F*H:LET X=X+H/2:LET Y=Z+C
80 GOSUB 100:LET Y=Z+(A+2*(B+C)+H*F)/6:LET Z=Y
90 PRINT ‘Для X=’X:PRINT’Y=’:GOTO 50
100 LET F=-Y:RETURN:END
П р и к л а д. Для диференційного рівняння y = - y/ = - y при = 1, h= 0,1, x0= 0 та y0= 1 будемо отримувати y (0,1)= 0,9048375, y (0,2)= 0,8187309014, y (0,3)= 0,740818422, y (0,4)= 0,6703202889, y (0,5)= 0,6065309344. Час видачі одного значення y (x) біля 1 с. Підпрограма вичислення
F= dy/dx
записується з рядка 100.
Програма 19.
10 PRINT ‘Розв’язання системи диференційних’
20 PRINT ‘Рівнянь методом Рунге – Кутта’
30 INPUT ‘Введіть число рівнянь N=’N
40 DIM Y(N), A(N), K(N), F(N), W(N)
50 INPUT ‘Задайте крок H=’H
60 INPUT ‘Задайте початкове X0=’X
70 FOR J=1 TO N:PRINT!2.0! ‘Задайте початкове Y0(‘J’)’
80 INPUT W(J):LET Y(J)=W(J):NEXT J
90 GOSUB 200:FOR J=1 TO N:LET U=H*F(J)
100 LET K(J)=U:LET Y(J)=W(J)+U/2:NEXT J
110 LET X=X+H/2:GOSUB 200:FOR J=1 TO N
120 LET U=H*F(J):LET K(J)=K(J)+2*U
130 LET Y(J)=W(J)+U/2:NEXT J
140 GOSUB 200:FOR J=1 TO N:LET U=H*F(J)
150 LET K(J)=K(J)+2*U:LET Y(J)=W(J)+U:NEXT J
160 LET X=X+H/2:PRINT!F1.9! ‘Для X=’X:GOSUB 200
170 FOR J=1 TO N:LET Y(J)=W(J)+(K(J)+H*F(J))/6
180 PRINT !2.0! ‘Y(‘J’)=’!F1.9! Y(J)
190 LET W(J)=Y(J):NEXT J:GOTO 90
200 LET F(1)=Y(2):LET F(2)=(Y(1)/X-Y(2))/X-Y(1)
210 RETURN:END
Метод Рунге – Кутта – Мерсона з автоматичною зміною кроку забезпечує приблизну оцінку похибки на кожному кроці інтегрування. Похибка інтегрування має порядок h5 . Цей метод реалізується слідуючим алгоритмом:
Задаємо число рівнянь N, похибка =E, початковий крок інтегрування h= H та початкове значення x0, y10, …, yN0.
За допомогою 5 циклів з керуючою змінною J= 1, 2, …, N обчислюємо коефіцієнти:
K0j= hFj (xi; Yji);
K1j= hFj (xi + h; Yji + K0i );
K2j = hFj (xi + h; Yji + K0j + K1j );
K3j = hFj (xi + h; Yji + K0j + K2j );
K4j = hFj (xi + h; Yji + K0j - K2j + 2K3j);
Знаходимо (в останньому циклі) значення
Yj(i+1) = Yji + (K0j + 4K3j + K4j)/6
та похибку
Rj(i+1) = (- 2K0j + 9K2j – 8K3j + K4j)/30.
Перевіряємо виконання умов
Rj(i+1) E, Rj(i+1) E/30.
Якщо перша умова не виконується, ділимо крок h на 2 та повторюємо обчислення з п.2, відновлюючи початкове значення Yji. Якщо ця умова виконується та виконується друга умова, то значеня xi+1= xi +h та Yj(i+1) виводяться на друк. Якщо друга умова не виконується, то крок h збільшується в два рази і обчислення знову повторюються з п.2.
Таким чином, Yj(n+1) виводиться на друк тільки при одночасному виконанні умов цього пункту.