Розробка програми пошуку рішення системи диференціальних рівнянь двома методами Рунге Кутта

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Введення
У курсовій роботі у відповідності із завданням на проектування вирішується завдання розробки програми пошуку рішення системи диференціальних рівнянь двома методами: Рунге-Кутта і Рунге-Кутта-Мерсона.
У даній пояснювальній записці проводиться опис послідовності кроків щодо складання програми на алгоритмічній мові Turbo Pascal. Розглядаються питання математичного формулювання і алгоритмізації завдання, розробки блок-схеми алгоритму її рішення, складання вихідної Pascal-програми та реалізації обчислень за складеною програмою.
Вибір методу обчислення, звернення до довідки за програмою і вихід з програми забезпечується за допомогою спеціального меню. Введення вихідних даних та виведення результатів обчислення виконується в окремому для кожного методу обчислень вікні.
У пояснювальній записці наводиться також порівняння точності обчислень коренів системи рівнянь використаними методами.

1. Постановка завдання
Ставиться завдання скласти програму розв'язання системи диференціальних рівнянь:
(1)
Потрібно знайти розв'язок системи диференціальних рівнянь (1) методом Рунге-Кутта і методом Рунге-Кутта-Мерсона. Вибір методу рішення посредствам меню, за допомогою клавіш управління курсором.
Таким чином, програма повинна забезпечувати можливість:
вибору користувачем чисельного методу пошуку рішення системи диференціальних рівнянь;
надати користувачеві можливість отримати коротку довідку про програму;
виведення результатів обчислення на дисплей у зручному для сприйняття вигляді.
У результаті сформулюємо наступне завдання зі створення програми:
вид системи диференціальних рівнянь повинен задаватися в підпрограмі - процедурою;
вид правій частині рівнянь повинен задаватися в підпрограмі - функції;
програма після завантаження повинна виводити на дисплей вихідне вікно-заставку, в якій відображаються загальні відомості про статус програми і її автора;
після виконання вказаної у рядку підказки процедури переходу має виводитися вертикальне меню з пунктами: «Довідка», «Метод Рунге-Кутта», «Метод Рунге-Кутта-Мерсона» і «Вихід»
при виборі в меню пункту «Довідка» повинна виводитися коротка довідка про призначення програми;
після вибору в меню варіанти чисельного методу повинно відкриватися окреме вікно, в якому будуть вводитися початкові умови і виводитися результат пошуку обраним методом;
при виборі пункту меню «Вихід» програми повинна завершувати роботу.

2. Математичне формулювання задачі
Задача Коші полягає у вирішенні систем звичайних диференціальних рівнянь (1) першого порядку, подаються у вигляді:
(1.1)
Де j = 1 N-номер кожної залежної змінної y j, x-незалежна змінна.
Рішення системи (1.1) при заданих початкових умовах x = x 0, y 1 (x 0) = y 10, ..., y 2 (x 0) = y 20, y N (x 0) = y N 0 зводитися до знаходження залежностей (інтегральних кривих) y 1 (x), ..., y 2 (x), y N (x), що проходять через точки (x 0, y 10), (x 0, y 20), ..., (x 0, y N 0). Задача Коші зводитися до інтегрування диференціальних рівнянь. Порядок методу чисельного інтегрування при цьому визначається і порядок методу рішення (1).
2.1 Метод Рунге-Кутта
Цей метод є найбільш поширеним методом розв'язання систем (1.1) при кроці h = const. Його перевагою є висока точність-похибка - І менша схильність до виникнення нестійкості рішення. Алгоритм реалізації методу полягає в циклічних обчисленнях Y j (i +1) на кожному i +1 кроці за наступними формулами:
(2)
(3)
(4)
(5)
(6)
При переході від однієї формули до іншої задаються або визначаються відповідні значення x і Y j і знаходяться по підпрограмі значення функції F j (x, Y j).
2.2 Метод Рунге-Кутта-Мерсона
Автоматична зміна кроку в ході вирішення систем диференціальних рівнянь необхідно, якщо рішення потрібно отримати із заданою точністю. При високій точності (похибка ) Та вирішенні у вигляді кривих з сильно розрізняється крутизною автоматичну зміну кроку забезпечує зменшення загальної кількості кроків у кілька разів, різко зменшується ймовірність числової нестійкості, дає більш рівномірне розташування точок графіка кривих (рішень) при їх виведення на друк. Даний метод забезпечує наближену оцінку похибок на кожному кроці інтегрування. Похибка інтегрування має порядок h 5. Цей метод реалізується наступним алгоритмом: Задаємо число рівнянь N, похибка ε = E, початковий крок інтегрування h = H і початкове значення y 10, ..., y N 0. За допомогою п'яти циклів з керуючою змінною J = 1,2, .., N обчислюємо коефіцієнти:
(7)
(8)
(9)
(10)
(11)
Знаходимо (в останньому циклі) значення (12)
(12)
І похибка
(13)
Перевіряємо виконання умов
(14)
(15)
Якщо умова (14) не виконується, то ділимо крок h на 2 і повторюємо обчислення. Якщо ця умова виконується і виконується умова (15), значення x i +1 = x i + h і Y j (i +1), то вважаємо, що рішення системи диференціальних рівнянь знайдено з заданою точністю. Якщо умова (15) не виконується, крок h збільшується вдвічі і обчислення повторюються.

3. Алгоритмізація задачі
Відповідно до постановленій в розділі 2 завданням доцільно реалізувати алгоритм, що використовує звернення до відповідних підпрограм з головної програми.
Алгоритм роботи головного програми наступний:
Приховати курсор з використанням підпрограми - процедури приховування курсору і вивести в спеціальному вікні заставку програми, що містить відомості про призначення програми, виконавця та керівника курсової роботи, а також підказку для користувача про подальші дії, з використанням підпрограми - процедури заставки.
Запустити підпрограму-процедуру вертикального меню при натисненні будь-якої клавіші з використанням підпрограм-процедур побудови вікна, виведення рамки вікна і приховання курсору.
Запустити підпрограму-процедуру довідки і вивести в спеціальному вікні довідкові відомості про роботу з програмою при виборі пункту меню «Довідка» з використанням рядка-підказки про повернення в меню.
Запустити підпрограму-процедуру пошуку розв'язку системи диференціальних рівнянь методом Рунге-Кутта при виборі пункту меню «Метод Рунге-Кутта» з використанням включення курсору, а також рядки-підказки про повернення в меню.
Запустити підпрограму-процедуру пошуку розв'язку системи диференціальних рівнянь методом Рунге-Кутта-Мерсона при виборі пункту меню «Метод Рунге-Кутта-Мерсона» з використанням включення курсору, а також рядки-підказки про повернення в меню.
Завершити роботу програми при виборі пункту меню «Вихід».
Алгоритм пошуку рішення системи рівняння методом Рунге-Кутта в підпрограмі-процедурі runkut включає наступні кроки:
Створити вікно для введення вихідних даних і виведення результатів обчислення.
Відновити відображення курсора нормального розміру відповідної підпрограмою - процедурою.
Задати початковий крок-h і початкові значення x о, y 10, ..., y N 0.
У підпрограмі-функції задаємо вид правій частині рівнянь.
У підпрограмі-процедурі задаємо вигляд системи диференціальних рівнянь.
Організувати цикл для пошуку коефіцієнтів похибки за формулами (2-5)
За формулою (6) знайти рішення системи диференціальних рівнянь.
Вивести результати обчислень в тому ж вікні.
Вивести у вікні запит про продовження обчислень з новими вихідними даними.
Виконати аналіз коду натиснутої у відповідь на запит клавіші: при натисканні "Y" повторити введення знову, при натисканні "N" перейти у вікно з меню.
Алгоритм пошуку рішення системи рівнянь методом Рунге-Кутта-Мерсона в підпрограмі процедурі rukutm включає:
Створення вікно для введення вихідних даних і виведення результатів обчислення.
Відновлення відображення курсора нормального розміру відповідної підпрограмою - процедурою.
Завдання початкового крок-h, початкових значень x о, y 10, ..., y N 0 і точності обчислення-ε.
Підпрограмі-процедурі задаємо вигляд системи диференціальних рівнянь
У підпрограмі-функції задаємо вид правій частині рівнянь
За допомогою п'яти циклів з керуючою змінною J = 1, N обчислюємо коефіцієнти за формулами (7) - (11).
В останньому циклі знаходимо рішення системи диференціальних рівнянь за формулою (12) і похибка за формулою (13).
Перевірка виконання умов (14) і (15). Якщо перша умова не виконується то h: = h / 2 і переходимо до п.5.
Якщо виконуються обидві умови, то значення x i +1 = x i + h і Y j (i +1) виводимо на екран.
Якщо друга умова не виконується, то h: = h + h і переходимо до п.5.
Вивести результати обчислень в тому ж вікні.
Вивести у вікні запит про продовження обчислень з новими вихідними даними.
Виконати аналіз коду натиснутої у відповідь на запит клавіші: при натисканні "Y" пoвторіть введення знову, при натисканні "N" перейти у вікно з меню.

4. Ідентифікатори програми
Для вказівки відповідності позначень змінних у формулах математичного формулювання та їх ідентифікаторів у програмі зведемо їх у таблицю 1:
Таблиця 1
Позначення параметрів
Сенс параметра
У формулах
У програмі
Y 1 ... Y n
Y [1] ... Y [n]
Початкові наближення
ε
E
Точність результату
h
H
Крок інтегрування
До ij
K [j]
Коефіцієнти похибки
N
n
Кількість рівнянь

F [1]
Перше рівняння системи

F [2]
Друге рівняння системи
Решта ідентифікатори є проміжними чи службовими.

5. Блок-схема алгоритму
5.1 Блок-схема алгоритму головний програми
Spravka
runkuta
початок
Zastavka
MоyMenu
k10 = readkey
K10 <> # 13
P = 1
P
rukutm
Кінець
k10
P = 4
p = 1
p = p +1
P = 1
p = 1
p = p-1

MоyMenu

k10



Ні Так
# 72 # 80
Так Ні Так Ні

5.2 Блок-схема алгоритму підпрограми-процедури runkut
Вхід
Normcursor
textcolor (15);
h =?
h
h <= 0
Y0 [i] =? Xo =?
Y0 [i], Xo
''Рішення:'', y 1, y 2
j
textcolor (14);
Hidecursor
Метод Рунге-Кутта
 

Повідомлення
Блок-схема: дисплей: Повідомлення Так Ні
Ch


Ch = readkey
Блок-схема: рішення: Ch = readkey Так
ur


j: = 1,2
v: = H * f [j]; k [j]: = v;
y [j]: = W [j] + v / 2;
Ні
Блок-схема: альтернативний процес: Вихід


y [j]: = W [j] + (k [j] + h * f [j]) / 6;
W [j]: = y [j];
ur
Блок-схема: типовий процес: ur j
j: = 1,2



5.3 Блок-схема алгоритму підпрограми-процедури rukutm
Normcursor
textcolor (15);
Метод Рунге-Кутта-Мерсона
e [j]: = f [j] * H; y [j]: = W [j] + (a [j] +4 * d [j] + e [j]) / 6; e2: = abs ( -2 * a [j] +9 * c [j] -8 * d [j] + e [j]) / 30;
e2 <= e1
Вхід


Y0 [i], Xo, e
Блок-схема: дані: Y0 [i], Xo, e
h <0
Блок-схема: рішення: h <0
h
Блок-схема: дані: h
h =?
Блок-схема: дисплей: h =? Ні Так
e2 <e1/20
Блок-схема: рішення: e2 <e1/20


Ні Так
d2: = d2 +1
e3: = 0;


Так Ні
Y0 [i] =? Xo =? Е =?
ur
Блок-схема: дисплей: Y0 [i] =? Xo =? Е =?


j: = 1,2
''Рішення:'', y 1, y 2
j
textcolor (14);
a [j]: = f [j] * H; y [j]: = W [j] + a [j] / 3;


Hidecursor
Блок-схема: типовий процес: Hidecursor
Повідомлення
Блок-схема: дисплей: Повідомлення
Ch
Блок-схема: дані: Ch
Ch = readkey
Блок-схема: рішення: Ch = readkey
Блок-схема: альтернативний процес: Вихід
J: = 1,2
j
j: = 1,2
d [j]: = f [j] * H; y [j]: = W [j] + a [j] / 2-1.5 * c [j] +2 * d [j];
ur
Блок-схема: типовий процес: ur j
Так


Ні

5.4 Блок-схема підпрограми-процедури moymenu
Вхід
GotoXY (15, i +5)
I = p
TextbackGround (4)
TextbackGround (3)
Так
Ні
Menu [i]
i
I: = 1,4

5.5 Блок-схема підпрограми-процедури ur
Вхід
вихід
f [1]: = f1 (x, y [1], y [2]); f [2]: = f2 (x, y [1], y [2]);
 


5.6 Блок-схема підпрограми-функції f 1
Вхід
вихід
f1: = y1 + y2-x1 * x1 + x1-2;
 

5.7 Блок-схема підпрограми-функції f 2
Вхід
вихід
f2: =- 2 * y1 +4 * y2 +2 * x1 * x1-4 * x1-7;
 

5.8 Блок-схема підпрограми-процедури CursorSize
Вхід
Regs
AH: = $ 01; CH: = Hi (size); Cl: = Lo (Size); intr ($ 10, Regs);
вихід
Ні
Так
 


5.9 Блок-схема підпрограми-процедури HiddeCursor
Вхід
CursorSize
($ 2000)
вихід


5.10 Блок-схема підпрограми-процедури NormCursor
Вхід
CursorSize
($ 0607)
Вихід
 


5.9 Блок-схема підпрограми-процедури Spravka
Вхід
Window (0,0,80,24)
"ДОВІДКА"
"Дана програма вирішує систему диференціальних рівнянь."
y `1 = y1 + y2-x1 * x1 + x1-2
y `2 =- 2 * y1 +4 * y2 +2 * x1 * x1-4 * x1-7

"Методом Рунге-Кутта або методом Рунге-Кутта-Мерсона."
"Праві частини системи диференціальних рівнянь задані в підпрограма"
"Свої функції замість вихідних.
Після переходу в меню виберіть клавішами керування курсором необхідний пункт. "
При виборі пунктів меню "Метод Рунге-
Кутта "або" Метод Рунге-Кутта-Мерсона "уведіть вихідні дані,
"Програма виведе полученниерезультати."
GotoXY (5,20)
Ch = readkey
Для повернення в меню натисніть будь-яку клавішу
Вихід
"Функціях f1 і f2 відповідно. У даних підпрограмах можна задати



5.10 Блок-схема підпрограми-процедури Zastavka
Вхід
GotoXY (3,1)
"Міністерство освіти Республіки Білорусь"
"Білоруський національний технічний університет"
"Програма розв'язання системи диференціальних рівнянь"
"Курсова робота"
"З дисципліни
"Інформатика" "
"Виконавець: Неверовская Я.Б"
"Гр. 102816 "
"Керівник: Петренко С.М."
"Мінськ 2008 "
window (0,0,80,25)
Ch = readkey
"Для повернення в меню натисніть будь-яку клавішу ... "
вихід
GotoXY (1,6)
GotoXY (1,15)
GotoXY (40,23)



6. Текст вихідної програми
program Kursovoy;
Uses CRT, DOS;
Const N = 2;
Label 11;
Type
mas = Array [1 .. 4] of String [60];
Const
menu: mas = ('Довідка',
'Метод Рунге-Кутта',
'Метод Рунге-Кутта-Мерсона',
'Вихід');
var
i, s, p: integer;
h, v, x, e1, e2, e3: real;
y, w, k, f, e, a, c, d: array [1 .. 10] of real;
j, d2: integer;
k2: byte;
stop: boolean;
eps, dx, dy, x0, y0: real;
f11, f22: real;
c1, kod, k10: Char;
pass: string;
ch: char;
function f1 (x1, y1, y2: real): real;
begin
f1: = y1 + y2-x1 * x1 + x1-2;
end;
function f2 (x1, y1, y2: real): real;
begin
f2: =- 2 * y1 +4 * y2 +2 * x1 * x1-4 * x1-7;
end;
procedure ur ;
begin
f [1]: = f1 (x, y [1], y [2]);
f [2]: = f2 (x, y [1], y [2]);
end;
Procedure CursorSize (Size: word);
var
Regs: Registers;
begin
With Regs do
begin
AH: = $ 01;
CH: = Hi (size);
Cl: = Lo (Size);
intr ($ 10, Regs);
end;
end;
procedure HiddeCursor;
begin
CursorSize ($ 2000);
end;
Procedure NormCursor;
begin
CursorSize ($ 0607);
end;
Procedure ramka (x1, y1, x2, y2: byte);
const
a = # 201;
b = # 205;
c = # 187;
d = # 186;
e = # 188;
f = # 200;
begin
TextColor (15);
TextBackground (4);
Clrscr;
GoToxy (x1, y1);
write (a);
for i: = x1 +1 to x2-1 do write (b);
write (c);
for i: = y1 +1 to y2-1 do
begin
gotoxy (x1, i);
write (d);
Gotoxy (x2, i);
write (d);
End;
GoToxy (x1, y2);
write (f);
for i: = x1 +1 to x2-1 do write (b);
write (e);
End;
Procedure Okno (x1, y1, x2, y2, Fcolor, Tcolor: byte);
Begin
Clrscr;
TextMode (3);
HiddeCursor;
Ramka (x1, y1, x2, y2);
Window (x1 +1, y1 +1, x2-1, y2-1);
TextBackground (Fcolor);
TextColor (Tcolor);
Clrscr;
Gotoxy (1,1);
End;
Procedure Zastavka;
begin
Okno (1,1,79,23,3,15);
GoToXY (3,1);
writeln ('');
Writeln ('Міністерство освіти Республіки Білорусь');
Writeln ('Білоруський національний технічний університет');
GoToXY (1,6);
writeln ('Програма вирішення системи диференціальних рівнянь');
writeln;
writeln;
writeln;
writeln;
writeln ('Курсова робота');
writeln ('з дисципліни "Інформатика"');
GoToXY (1,15);
Writeln ('Виконавець: Неверовская Я.Б');
writeln ('гр.102826');
writeln ('Керівник: Петренко С.М.');
writeln;
writeln;
writeln ('Мінськ 2008');
Window (0,0,80,25);
gotoxy (40,23);
TextColor (15);
gotoxy (1,79);
writeln ('Для продовження натисніть будь-яку клавішу ...');
repeat until keydivssed;
while keydivssed do c1: = readkey;
clrscr;
End;
Procedure Spravka;
var
ch: char;
Begin
Okno (1,1,79,23,3,15);
Writeln ('ДОВІДКА');
Writeln;
Writeln ('Ця програма дозволяє знайти рішення системи диференціальних рівнянь.');
Writeln ('Зокрема системи рівнянь:');
Writeln ('y `1 = y1 + y2-x1 * x1 + x1-2');
Writeln ('y `2 =- 2 * y1 +4 * y2 +2 * x1 * x1-4 * x1-7');
Writeln;
Writeln ('методом Рунге-Кутта або методом Рунге-Кутта-Мерсона.');
Writeln ('Праві частини системи диференціальних рівнянь задані в підпрограма');
Writeln ('функціях f1 і f2 відповідно. У даних підпрограмах можна задати');
Writeln ('свої функції замість вихідних.');
Writeln ('Після переходу в меню виберіть клавішами керування курсором');
Writeln ('необхідний пункт.');
Writeln ('При виборі пунктів меню "Метод Рунге-Кутта" або "Метод');
Writeln ('Рунге-Кутта-Мерсона "уведіть вихідні дані, програма виведе');
writeln ('отримані результати. ");
Window (2,2,79,24);
Textcolor (15);
gotoxy (5,20);
write ('Для повернення в меню натисніть будь-яку клавішу ...');
ch: = readkey;
End;
Procedure moymenu;
begin
clrscr;
Okno (10,5,60,20,3,15);
For i: = 1 to 4 do
begin
Gotoxy (15, i +5);
if i = p then Textbackground (4) else
Textbackground (3);
write (Menu [i]);
end;
End;
procedure Exitfrom;
begin
writeln;
gotoxy (50,26);
Writeln ('Для прдолженія обчислення натисніть Y, для виходу-N');
ch: = readkey;
if ch = # 121 then moymenu else Zastavka;
end;
Procedure runkut;
label 2;
begin
clrscr;
textcolor (15);
NormCursor;
Writeln ('Метод Рунге-Кутта');
2: Write ('Задайте позитивний початковий h =');
read (h);
if h <= 0 then
goto 2
else begin
write ('Задайте початкове Xo =');
read (x);
for j: = 1 to n do
begin
Write ('Задайте початкові y0 [', j ,']=');
readln (W [j]);
y [j]: = W [j];
end;
ur ;
for j: = 1 to n do
begin
v: = H * f [j];
k [j]: = v;
y [j]: = W [j] + v / 2;
end;
ur ;
for j: = 1 to n do
begin
v: = H * f [j];
k [j]: = k [j] +2 * v;
y [j]: = W [j] + v / 2;
end;
ur ;
for j: = 1 to n do
begin
v: = H * f [j];
k [j]: = k [j] +2 * v;
y [j]: = W [j] + v;
end;
ur ;
Textcolor (5);
Writeln ('рішення системи диференціальних рівнянь:');
for j: = 1 to n do
begin
y [j]: = W [j] + (k [j] + h * f [j]) / 6;
writeln ('y [', j ,']=', y [j]: 12:9);
W [j]: = y [j];
end;
HiddeCursor;
textcolor (14);
gotoxy (1,24);
writeln ('Для продовження обчислення натисніть <Y>,');
writeln ('для виходу <N>');
ch: = readkey;
if ch = # 121 then runkut else moymenu;
end; end;
Procedure rukutm;
label 3;
begin
clrscr;
textcolor (15);
NormCursor;
Writeln ('Метод Рунге-Кутта-Мерсона');
3: Write ('задайте позитивний початковий крок h =');
read (h);
if h <= 0 then
goto 3
else begin
Write ('Задайте похибка обчислень e =');
read (e1);
write ('Задайте початкове Xo =');
read (x);
for j: = 1 to n do
begin
write ('Введіть початкове Y0 [', j ,']=');
readln (w [j]);
y [j]: = W [j];
end;
k2: = 0;
e3: = 0;
ur ;
d2: = 0;
for j: = 1 to n do
begin
a [j]: = f [j] * H;
y [j]: = W [j] + a [j] / 3;
end;
x: = x + h / 3;
ur ;
for j: = 1 to n do
begin
y [j]: = W [j] + (a [j] + f [j] * H) / 6;
end;
ur ;
for j: = 1 to n do
begin
c [j]: = f [j] * H;
y [j]: = W [j] + a [j] / 8 +0.375 * c [j];
end;
x: = x + h / 6;
ur ;
for j: = 1 to n do
begin
d [j]: = f [j] * H;
y [j]: = W [j] + a [j] / 2-1.5 * c [j] +2 * d [j];
end;
x: = x + h / 2;
ur ;
for j: = 1 to n do
begin
e [j]: = f [j] * H;
y [j]: = W [j] + (a [j] +4 * d [j] + e [j]) / 6;
e2: = abs (-2 * a [j] +9 * c [j] -8 * d [j] + e [j]) / 30;
if e2 <= e1 then
if e2 <e1/20 then d2: = d2 +1 else
e3: = 0;
end;
if e3 <> 0 then begin
x: = xh;
for j: = 1 to n do begin
y [j]: = W [j];
end;
H: = H / 2;
end
else k2: = 1;
if d2 = n then H: = H + H;
Textcolor (5);
Writeln ('рішення системи диференціальних рівнянь:');
for i: = 1 to n do begin
writeln ('y [', i ,']=', y [i]: 12:9);
W [i]: = y [i];
end;
HiddeCursor;
textcolor (14);
gotoxy (1,24);
writeln ('Для продовження обчислення натисніть <Y>,');
writeln ('для виходу <N>');
ch: = readkey;
if ch = # 121 then rukutm else moymenu;
end; end;
BEGIN
Clrscr;
Zastavka;
11: hiddecursor;
p: = 1;
moymenu;
k10: = readkey;
while k10 <> # 13 do
begin
Case k10 of
# 72: if p = 1 then p: = 4 else p: = P-1;
# 80: if p = 4 then p: = 1 else p: = p +1;
end;
moymenu;
k10: = readkey;
end;
Case p of
1: Spravka;
2: runkut;
3: rukutm;
4: exit;
end;
goto 11;
END.

7. Результати роботи програми
Після запуску програми відповідно до поставленим завданням на проектування виводиться вікно заставки програми, наведене на малюнку 1.

Малюнок 1. Вікно заставки.
Після натискання будь-якої клавіші виводиться вікно з меню, представлене на малюнку 2.

Малюнок 2. Вікно з меню.
При виборі пункту меню «Довідка» відкривається відповідні вікно в якому знаходиться довідкова інформація про програму. Приклад такого вікна представлений на малюнку 3.


Малюнок 3. Вікно довідки.
При виборі пункту меню «Метод Рунге-Кутта» або «Метод Рунге-Кутта-Мерсона» відкривається відповідні вікна, в яких вводяться вихідні дані і виводяться результати обчислення. Приклади таких вікон представлені на малюнках 4 (Метод Рунге-Кутта) і 5 (Метод Рунге-Кутта-Мерсона).

Малюнок 4. Обчислення методом Рунге-Кутта.

Малюнок 5. Обчислення методом Рунге-Кутта-Мерсона.

8. Аналіз результатів
Для аналізу результатів зведемо дані кількох розрахунків у таблицю.
Таблиця 2 - Результати розрахунків

Метод Рунге-Кутта-Мерсона
Метод Рунге-Кутта
Y 01
Y 02
Х про
h
E
Y 01
Y 02
Х про
h
1
2
1
1
0.02
0,001
2
1
1
0.02
Y 1
2.018133460
2,018237453
Y 2
0,812223824
0,0812215653
Порівняння методів показує, що вони забезпечують приблизно однакове рішення.
У більшості випадків метод Рунге-Кутта-Мерсона дає більш точний результат (похибка ). Крім того, хоча він громіздкий в реалізації, але швидка збіжність методу компенсує збільшення числа допоміжних операцій і, різко зменшує ймовірність числової нестійкості.

9. Інструкція по роботі з програмою
Файл NYBKURSO.pas з вихідним текстом Паскаль-програми знаходиться за адресою E: \ 2 kurs \ Неверовская. Результат компіляції вихідної програми NYBKURSO.exe знаходиться в тій же папці.
Необхідно запустити на виконання NYBKURSO.exe або завантажити Turbo Pascal, зробити поточним каталог Неверовская, відкрити файл з вихідною Паскаль-програмою NYBKURSO.pas і запустити її на виконання командою Run \ Run.
Після виведення заставки програми натиснути будь-яку клавішу для переходу в меню і відкрити вікно довідки. Після ознайомлення з довідкою натисканням будь-якої повернеться у вікно меню, за допомогою клавіш управління курсором вибрати метод обчислення і ввести за запитом програми значення, а також похибку.
Результати обчислення виводяться в тому ж вікні, де вводилися вихідні дані.
Для продовження обчислень слід відповісти на запит програми натисканням клавіші 'Y', що забезпечить перехід до повторного введення даних. Натискання клавіші "N 'призводить до переходу в меню програми.
Завершення роботи з програмою реалізується вибором пункту меню "Вихід".

Висновок
У цій роботі розроблена блок-схема і реалізована засобами мови програмування Турбо-Паскаль програма, що дозволяє вирішити систему диференціальних рівнянь:

методом Рунге-Кутта-Мерсона і методом Рунге-Кутта.
Програма по запиту користувача повідомляє загальні відомості по роботі з програмою і робить обчислення, вибір методу обчислення проводиться за допомогою меню, введення даних здійснюється з клавіатури по запиту програми.
З аналізу результатів обчислення можна зробити висновок про більшу точності обчислення за методом Рунге-Кутта-Мерсона.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
99.8кб. | скачати


Схожі роботи:
Розробка програми пошуку рішення системи диференціальних рівнянь двома методами Рунге-Кутта
Програма розв язання звичайних диференціальних рівнянь однокроковими методами
Рішення диференціальних рівнянь
Рішення диференціальних рівнянь 2
Рішення диференціальних рівнянь 2
Рішення систем диференціальних рівнянь
Рішення звичайних диференціальних рівнянь
Розробка програми вирішення системи лінійних рівнянь
Експериментальне дослідження властивостей методів Рунге-Кутта
© Усі права захищені
написати до нас