МСС ресурс | Freeware | Open source | Кафедра МСС | Факультет |
Пакет |
|
ПРО ПАКЕТ | ПОПЕРЕДНІЙ КЛАС | НАСТУПНИЙ КЛАС |
calc
|
+--integration_rk45
Якщо у класі 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> |
|
Наслідкові функції-члени класу 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
Всі права застережено.