МСС ресурс | Freeware | Open source | Кафедра МСС | Факультет |
Пакет |
|
ПРО ПАКЕТ | ПОПЕРЕДНІЙ КЛАС | НАСТУПНИЙ КЛАС |
Даний клас призначений для функцій обробки моделей, якщо цю обробку необхідно проводити від чогось_початкового і до чогось_фінального. Наприклад, моделювання можна проводити на відрізку часу від t0 до T. Або інтегрування можна задавати початковою умовою Коші (x(t0)=x0) та продовжувати процес доки траєкторія не перетне задану поверхню g(t,x)=0. За допомогою представленого класу можна вказувати границі процесу у вищезазначених випадках.
Передбачено можливість роботи із довільним типом даних (за замовчуванням із типом double), що дозволяє проводити обчислення з підвищенною точністю. У режимі відладки (DEBUG) здійснюється автоматичний контроль допустимості операцій.
У файлі mds.h
визначено наступні типи.
typedef double MDS_DEFAULT_TYPE;
typedef mds_exception_message MDS_DEFAULT_EXCEPTION;
typedef cauchy_region <MDS_DEFAULT_TYPE, MDS_DEFAULT_EXCEPTION> CauchyRegion;
Члени класу | |
private T |
t0 Початковий час t0. |
private valarray
<T> |
x0 Умова Коші {x1(t0), x2(t0),..., xn(t0)} |
private T |
tFinal Фінальний час. Використовується у випадку, якщо не задано функцію виходу Region() . |
private int(*)
(const T&, const valarray<T>&) |
Region Покажчик на функцію, що визначає кінцеву умову, повертаючи 1 – якщо аргумент належить, -1 – не належить, 0 – на границі області. Якщо така функція не задана, буде використано значення tFinal . |
private valarray
<bool> |
mask Маска для відокремлення фази з розширеного фазового вектору. |
Конструктори |
cauchy_region <class T = MDS_DEFAULT_TYPE, class EXCEPTION
= MDS_DEFAULT_EXCEPTION> (const valarray<T>& cauchyCond,
int(*f) (const T&, const valarray<T>&)) Базовий
конструктор: умова Коші (як елемент розширеного фазового простору) &
функція виходу Region(). Типи: T - тип обчислень, EXCEPTION
- тип винятків. |
cauchy_region <class T = MDS_DEFAULT_TYPE, class EXCEPTION
= MDS_DEFAULT_EXCEPTION> (const valarray<T>& cauchyCond,
const T& time) Умова
Коші (як елемент розширеного фазового простору) & час виходу time .
Типи: T - тип обчислень, EXCEPTION - тип винятків. |
cauchy_region <class T = MDS_DEFAULT_TYPE, class EXCEPTION
= MDS_DEFAULT_EXCEPTION> (const T& t0, const valarray<T>&
x0, int(*f) (const T&, const valarray<T>&)) Умова
Коші x (t0 )=x0 та функція виходу Region().
Типи: T - тип обчислень, EXCEPTION - тип винятків. |
cauchy_region <class T = MDS_DEFAULT_TYPE, class EXCEPTION
= MDS_DEFAULT_EXCEPTION> (const T& t0, const valarray<T>&
x0, const T& time) Умова
Коші x (t0 )=x0 та час виходу time .
Типи: T - тип обчислень, EXCEPTION - тип винятків. |
cauchy_region <class T = MDS_DEFAULT_TYPE, class EXCEPTION
= MDS_DEFAULT_EXCEPTION> (const T& t0, int(*f) (const T&,
const valarray<T>&)) Початковий
час t0 та функція виходу Region(). Типи: T
- тип обчислень, EXCEPTION - тип винятків. |
cauchy_region <class T = MDS_DEFAULT_TYPE, class EXCEPTION
= MDS_DEFAULT_EXCEPTION> (const T& t0, const T& time) Початковий
час t0 та час виходу time . Типи:
T - тип обчислень, EXCEPTION - тип винятків. |
Функції-члени класу | |
int |
isRegion(const valarray<T>& x) const Перевірка належності області розширеного фазового вектору x (перша координата
- час). Повертає: 1 – аргумент належить області, -1 – аргумент не належить області, 0 – аргумент на границі області. |
int
|
isRegion(const T& t, const valarray<T>& x)
const Перевірка належності області фазового вектору x у момент часу t .
Повертає: 1 – аргумент належить області, -1 – аргумент не належить області, 0 – аргумент на границі області. |
T& |
GetStartTime(T& arg) const Записує у arg початковий час. Повертає зсилку на аргумент. |
T |
GetStartTime() const Повертає початковий час. |
T& |
GetFinalTime(T& arg) const Записує у arg фінальний час (якщо він заданий, інакше повертає 0).
Повертає зсилку на аргумент. |
T |
GetFinalTime() const Повертає початковий час (якщо він заданий, інакше повертає 0). |
int |
isFuncFinalCondition() const Повертає 1, якщо задана функція виходу Region() або 0 в протилежному випадку. |
valarray <T>&
|
GetCauchyCondition(valarray<T>& arg, bool isEnlargedPhase
= false) const Записує у arg умову Коші. Якщо isEnlargedPhase = false ,
то буде записаний вектор x0 , в протилежному випадку - розширений
фазовий вектор (перша координата - час t0 ). Повертає зсилку
на arg . |
T& |
GetCauchyCondition(T& arg_t, valarray<T>&
arg_x) const Записує у arg_t початковий час t0 , у arg_x
умову Коші x0 . Повертає зсилку на arg_t . |
T& |
GetCauchyCondition(T& arg_t) const Записує у arg_t початковий час t0 . Повертає зсилку на
arg_t . |
valarray <T>
|
GetCauchyCondition(bool isEnlargedPhase = false)
const Повертає
умову Коші. Якщо isEnlargedPhase = false , то буде повернуто
вектор x0 , в протилежному випадку - розширений фазовий вектор
(перша координата - час t0 ). |
size_t |
GetCauchyConditionSize() const Повертає
розмірність вектора x0 . |
Опис |
Для використання класу необхідно ініціалізувати змінну одним із конструкторів (ініціалізацію можна проводити прямо у аргументах функції, яка вимагає цей клас в якості вхідного параметру, як, наприклад, при інтегруванні). Отже перший аргумент конструктора може бути або умовою Коші (тобто точкою розширеного фазового простору, оформленою як valarray<T>): t0, x1(t0), x2(t0),..., xn(t0), або просто початковим часом t0, або парою (t0,x0). Кінцева умова може бути або кінцевим часом Т, або функцією (типу характеристичної), що повертає 1 – якщо її аргумент належить області, -1 – не належить, 0 – знаходиться на границі області. Для будь-якого варіанту кінцевих умов функції
isRegion(const valarray<T>& x);
isRegion(const T& t, const valarray<T>& x);
повертатимуть 1 – якщо аргументи
належать розглядуваній області, -1 – не належать, 0 – знаходяться
на границі. Неважко здогадатися, що при заданій функції виходу (замість фінального
часу) isRegion() просто „переводить стрілки” на вашу функцію,
інакше проводяться перевірки типу ,
. УВАГА:
isRegion() використає вашу функцію виходу, якщо ви її задали, або
фінальний час.
Наприклад
//задамо час від 0 до 10:
CauchyRegion mySimpleRegion(0., 10.);
//задамо умову Коші для 2-вимірного вектора фазових координат
та фінальний час 15:
valarray<double> v(2);
v[0] = 3.14;
v[1] = -10.0;
double t0 = 0.0;
CauchyRegion myCauchyRegion(t0, v, 15.0);
//добавимо функцію виходу:
int myCondition(const double& t, const valarray<double>&
x)
{
if (t<15 && x[0] * x[0] + x[1] * x[1]
< 0.1)
return 1;
return -1;
}
CauchyRegion mySuperPuperRegion (t0, v, myCondition);
В останньому прикладі було побудовано спеціальну функцію виходу. Функція-член isRegion() видаватиме 1 поки час не перевалить за 15, або ж квадрат норми фази – за 0.1.
Приклад використання МДС знаходиться у файлі main.cpp у директорії mds_example. Додаткова інформація по використанню міститься в описі пакету.
Будь-ласка, надсилайте пропозиції, питання, зауваження: soft@unicyb.kiev.ua
Запрошуємо також до участі у самому проекті: надсилайте свої матеріали, які,
по-можливості, будуть виставлені на сайті (див. Для
авторів).
Кафедра Моделювання складних систем факультету кібернетики Київського
університету імені Тараса Шевченка
03127, Україна, Київ, просп. Глушкова 2, корп. 6, кафедра МСС тел.: (044) 259-05-31,
(044) 259-02-37, e-mail: garash@unicyb.kiev.ua
Всі права застережено.