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

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

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

dynamo.h
Клас dynamo

calc
  |
  +--dynamo

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

Якщо у класі model задані праві частини системи алгедраїчних рівнянь y=F(t), F - n-вимірна вектор-функція, y - n-вимірний вектор, то за допомогою даного класу можна здійснити чисельне моделювання динаміки моделі.

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

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


 

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

 

Конструктори
dynamo <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

 

Опис

Даний клас розраховує динаміку моделі з кроком 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. Приблизно так:

Dynamo dyn(0.5); //будемо моделювати з кроком 0.5
//запуск розрахунків динаміки моделі MyModel на області MyCauchyRegion із записом результатів у MyResult
dyn.Calculate(MyModel, MyCauchyRegion, MyResult);

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

v = dyn.Calculate(MyModel, MyCauchyRegion);

запише результат у v (типу valarray).

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


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

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