3. Якщо поточний символ – відкриваюча дужка, то поміщаємо її в стек.

4. Якщо поточний символ – закриваюча дужка, то витягаємо символи зі стека у вихідний рядок доти, поки не зустрінемо в стеці відкриваючу дужку (тобто символ із пріоритетом, рівним 1), яку варто просто знищити. Закриваюча дужка також знищується.

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

Згідно із цими правилами створений модуль «Unit3.cpp», що містить функцію перетворення рядка у зворотний польський запис OPZ (блок 3 у блок-схемі алгоритму), алгоритм якої наведений у додатку. У даному модулі використані також допоміжні функції PUSH, PRIOR, DEL. Функція PUSH записує в стек, на вершину якого вказує HEAD, символ a. Повертає покажчик на нову вершину стека. Функція PRIOR обчислює пріоритет поточного символу, природно, лише в тому випадку, якщо поточний символ – математична операція. Функція DEL видаляє символ.

Для роботи з отриманим зворотним польським записом створена функція (блок 4), організована у вигляді модуля, що підключається, «Unit5.cpp». Блок-схема даної функції наведена в додатку. На початковому етапі (блоки 1–13) у циклі аналізується рядок, що містить зворотний польський запис. Якщо символ раніше задекларований ('x', 'u', 'v', 'e', '1'..'9'), те його значення заноситься в поточний елемент масиву th. На наступному етапі (блоки 14–29) здійснюється «зворотний хід» польської нотації: аналізується кожний символ рядка, і якщо цей символ раніше задекларований, те його значення міститься в стек (блоки 15–17). У випадку, якщо поточний символ – знак математичної операції, то зі стека витягають останні два елементи й з ними проводиться зазначена операція. Результат заноситься на вершину стека. Стік у функції реалізований у вигляді односпрямованого масиву типу double. Функція повертає перший елемент стека.

5. Опис програми

 

Після проведеного огляду програмних засобів для розробки даного програмного продукту, було обране середовище Borland C++ Builder. Мова С++ добре зарекомендував себе ефективністю, лаконічністю запису алгоритмів, логічною стрункістю програми. Програми, написані мовою С++, порівнянні по швидкості із програмами, написаними мовою асемблера; при цьому вони більше наочні й прості в супроводі. Середовище Borland C++ Builder є засобом швидкої розробки windows-додатків, що дозволяє створювати додатка мовою С++, використовуючи середовище розробки й бібліотеку компонентів Delphi.

Готова програма являє собою файл, що виконується, з ім'ям «Adams3.exe», реалізований у вигляді Widows-Додатка в середовищі Borland C++ Builder. Після запуску програми на робочому вікні з'являється робоче вікно із заголовком «Рішення систем диференціальних рівнянь». В активному вікні можна виділити наступні області:

1)  Область уведення вихідних даних.

2)  Вікно висновку результатів.

3)  Поле відображення графіків отриманих функцій, що є

рішенням заданої системи, і графіків щирого рішення.

4)  Основне меню.

1) Область вихідних даних містить поля, у які потрібно ввести початкові дані: систему диференціальних рівнянь; інтервал, на якому потрібно знайти рішення заданої системи; припустиму погрішність; умови Коші в початковій крапці заданого інтервалу; кількість кроків «сітки» і крок висновку отриманих значень шуканих функцій у вузлах сітки.

У поля «du/dx= «і «dv/dx= «уводяться диференціальні рівняння, що містять символи, 'u', 'v' 'x', 'e', '1'..'9', '+', '-', '*', '/', '^', ' (', ')'. Тут: символи 'u' і 'v' являють собою шукані функції, символ 'e' є підставою натурального логарифма, символ '^' позначає операцію піднесення в ступінь. Використання інших символів небажано, тому що вони будуть зігноровані програмою.

Поля із заголовком «інтервал [a; b]» містять початкову й кінцеву крапку проміжку, на якому буде знайдене рішення заданої системи.

У поле «кількість кроків сітки» потрібно ввести ціле число, рівне кількості крапок по осі OX на заданому інтервалі, у яких шукаємо значення функцій u(x) і v(x).

Поле «крок висновку» містить ціле число, що визначає частоту висновку на екран результатів із множини результатів у всіх вузлах заданої сітки.

Поля під загальною назвою «початкові умови» містять умови Коші – значення шуканих функцій на початку заданого інтервалу [a, b].

Для коректної роботи програми всі поля повинні бути заповнені. При запуску програми всі перераховані вище поля вже містять стандартну інформацію для тесту програми, яку можна змінювати.

Користувачеві надається можливість вибору режиму програми. При запуску програми мітка біля напису «Не використовувати метод сіток, що згущаються,» відсутній, і програма, використовуючи метод сіток, що частішають, підбере після першого натискання кнопки «виконає» оптимальне значення кількості кроків для досягнення заданої точності. Після повторного натискання кнопки «виконати» будуть зроблені обчислення вже для значення кроку, що рекомендується, сітки. Якщо мітка поставлена, то після натискання кнопки «виконати» буде вирішена задача Коші для заданого інтервалу, але задана точність не буде досягнута. Даний режим дозволяє вводити різні системи диференціальних рівнянь, відмінних від стандартних тестових, рішенням яких є функції u(x)=2*x, v(x)=exp(x).

2) Всі результати, отримані в ході роботи програми, відображаються в окремому вікні (мал. 2). При бажанні, всю інформацію із цього вікна можна зберегти в окремий файл.

3) Отримане рішення у вигляді графіків шуканих функцій виводиться в окреме поле (мал. 2). Тут відображаються також графіки функцій f(x)=2*x і f(x)=exp(x), що є точним рішенням для тестових систем диференціальних рівнянь. Поле відображення графіків надобіддя.

4) Основне меню містить наступні пункти: «Файл» і «Про програму» (мал. 3). У свою чергу пункт меню «Файл» містить наступні підпункти: «новий», «відкрити», «зберегти як…» і «вихід».

При виборі пункту «новий» всі поля й вікна будуть очищені. Поле відображення графіків буде також очищено.

Вибравши пункт «зберегти як…», вся інформація з вікна результатів буде збережена в обраний користувачем файл (за замовчуванням txt).

Вибір пункту «відкрити» приводить до завантаження із уже збереженого раніше файлу системи диференціальних рівнянь.

Програма працює стабільно, не приводить до помилок.

 


Информация о работе «Рішення систем диференціальних рівнянь за допомогою неявної схеми Адамса 3-го порядку»
Раздел: Математика
Количество знаков с пробелами: 26806
Количество таблиц: 2
Количество изображений: 9

Похожие работы

Скачать
27789
1
13

... vn-1 і vn-2. Замітимо, що метод предиктора-коректора не являється самостартуючим. 3. Метод Рунге-Кутта Для пояснення методу Рунге-Кутта подивимось спочатку розв’язок диференціального рівняння першого порядку (27) Метод Рунге-Кутти другого порядку для розв’язку рівняння (27) модна, використовуючи стандартні значення, записати наступним чином: (28) ...

Скачать
75610
0
0

... дощ?—отримаємо таку загальну відповідь:—і корисний, і шкідливий; або: плоска чи сферична поверхня Землі? Відповідь — і плоска, і сферична. Звернемося для прикладу до оцінки відомого вчинку гетьмана України І. Мазепи російським імператором Петром І у листі до полтавського полковника після одержання звістки про виступ Мазепи проти Москви: “Изменник, богоотступник, вор. . . для собственной своей ...

Скачать
146069
20
0

... ії професійного самовдосконалення за допомогою чинника "Мотиваційна тренінгові програма". Завданням даного дослідження є розгляд наступних аспектів у вивченні питання діагностики та формування у співробітників органів внутрішніх справ мотивації професійного самовдосконалення: теоретичні питання вивчення мотивації професійної діяльності; методичні положення вивчення та формування мотивації професі ...

Скачать
99892
0
3

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

0 комментариев


Наверх