МСС ресурс Freeware Open source Кафедра МСС Факультет  

Пакет
"Моделювання
Динамічних Систем"
v5.2

ПРО ПАКЕТ ПОПЕРЕДНІЙ КЛАС НАСТУПНИЙ КЛАС      

rk45.h
Клас integration_rk45

calc
  |
  +--integration_rk45

Використовує класи :
model, cauchy_region, result_manager
 

Якщо у класі model задані праві частини системи диференціальних рівнянь x'=F(t,x), де x n-вимірний вектор (n>0), F - n-вимірна вектор-функція, то за допомогою даного класу можна здійснити чисельне розв’язування задачі Коші. Клас реалізує метод Рунге-Кутта 4(5) порядку.

Передбачено можливість роботи із довільним типом даних (за замовчуванням із типом double), що дозволяє проводити обчислення з підвищенною точністю. У режимі відладки (DEBUG) здійснюється автоматичний контроль допустимості операцій.

У файлі mds.h визначено наступні типи.
typedef double MDS_DEFAULT_TYPE;
typedef mds_exception_message MDS_DEFAULT_EXCEPTION;
typedef integration_rk45 <MDS_DEFAULT_TYPE, MDS_DEFAULT_EXCEPTION> IntegrationRK45;


 

Члени класу
T step
           Параметр інтегрування: крок методу.

 

Конструктори
integration_rk45 <class T = MDS_DEFAULT_TYPE, class EXCEPTION = MDS_DEFAULT_EXCEPTION> (const T& userStep)
             Параметр: крок методу userStep. Типи: T - тип обчислень, EXCEPTION - тип винятків.

 

Функції-члени класу
 virtual valarray <T>

Method(const valarray<model*>& pModels, const cauchy_region& region, result_manager& resCalc, bool isEnlargedPhase)
           Алгоритм інтегрування. Покажчики на моделі, які підлягають інтегруванню знаходяться у pModels; границі інтегрування задаються у region; збереження поточних результатів здійснюється за допомогою resCalc. Повертає значення як фазовий вектор у останній точці інтегрування при isEnlargedPhase = false, або розширений фазовий вектор (перша координата - час) при isEnlargedPhase = true.

 

Наслідкові функції-члени класу calc
Calculate, CalcReturnValue

 

Опис

Даний клас реалізує метод Рунге-Кутта 4(5) порядку інтегрування систем звичайних диференціальних рівнянь (з фіксованим кроком step).

Запуск процесу інтегрування здійснюється за допомогою сервісних функцій типу Calculate(const valarray<model*>& pModels, const cauchy_region& region, result_manager& resCalc, bool isEnlargedPhase = false) класу calc. Тут перший параметр – покажчик (або valarray покажчиків) на модель, що підлягає інтегруванню. Коли мова йшла про клас model, зазначалося, що цей клас проектувався, зокрема, для того, щоб компонувати з окремих моделей загальний комплекс, отже логічно припустити наявність можливості проводити інтегрування для всіх моделей комплексу одночасно (через valarray<model*>). Початкові та кінцеві умови задаються у region класу cauchy_region. Проміжні результати (якщо вони потрібні) – у resCalc класу result_manager. Приблизно так:

IntegrationRK45 integr(0.5); //будемо інтегрувати з кроком 0.5
//запуск процесу інтегрування моделі MyModel на області MyCauchyRegion із записом результатів у MyResult
integr.Calculate(MyModel, MyCauchyRegion, MyResult);

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

v = integr.Calculate(MyModel, MyCauchyRegion);

запише результат інтегрування у v (типу valarray).

Зауваження:
1) якщо початкові умови порушують границі інтегрування (тобто алгоритм не зробить жодної ітерації), то контейнер MyResult не поповниться, а результат v не визначений;
2) знак кроку step не важливий, якщо у region умовою виходу є фінальний час. Але якщо умовою виходу є деяка функція користувача, то знак кроку step необхідно вказувати згідно напрямку руху у досліджуваному процесі (додатній, якщо час зростає та від'ємний у протилежному випадку).

Див. також опис класу integration.


Будь-ласка, надсилайте пропозиції, питання, зауваження: soft@unicyb.kiev.ua
Запрошуємо також до участі у самому проекті: надсилайте свої матеріали, які, по-можливості, будуть виставлені на сайті (див. Для авторів).

Кафедра Моделювання складних систем факультету кібернетики Київського університету імені Тараса Шевченка
03127, Україна, Київ, просп. Глушкова 2, корп. 6, кафедра МСС тел.: (044) 259-05-31, (044) 259-02-37, e-mail: garash@unicyb.kiev.ua
Всі права застережено.