Общие динамические системы
Цель лекции: Показать эффективность объктно-ориентированного подхода для моделирования динамических систем. Создать классы на языке C# для моделирования динамических систем с непрерывным и дискретным временем.
Динамической системой называют математическую модель системы, процессы в которой развиваются во времени. Состояние динамической системы характеризуется фазовыми координатами, которые принадлежат фазовому пространству. Время в динамической системе может быть как непрерывным, так и дискретным. Фазовое множество может быть конечным или бесконечным.
Пусть дано непустое множество , которое мы будем называть
фазовым пространством, а каждый элемент этого множества
описывает состояние рассматриваемой системы. Через
мы будем
обозначать либо множество
, либо множество
натуральных чисел
. Это множество будет
играть роль времени. В первом случае мы будем рассматривать
непрерывные динамические системы, а во втором - дискретные.
Абстрактно заданной динамической системой называется
однопараметрическая полугруппа преобразований множества
![p:{\cal A}\times{\rm T}\to{\cal A},](/sites/default/files/tex_cache/8b365c690d576c19c7df704efc40ed2d.png)
-
для любого
,
-
для любых
,
.
Соответственно, чтобы задать динамическую систему необходимо
фиксировать множества ,
и задать отображение
,
удовлетворяющее указанным выше условиям. Пусть
,
. Рассмотрим систему обыкновенных дифференциальных
уравнений
-го порядка, которая имеет единственное глобальное
решение для всех
. Тогда решение этой системы задает
отображение
![y=y(y^0,t):\Bbb{R}^n\times\Bbb{R}_+\to\Bbb{R}^n.](/sites/default/files/tex_cache/a590771bd4446c5f7181121f9f0c00a4.png)
Дискретную динамическую систему можно построить следующим образом.
Пусть у нас некоторое множество и задан оператор
![T:{\cal A}\to{\cal A}.](/sites/default/files/tex_cache/2943c0088d240a6ebcd48cd810313bac.png)
![p(a,n)](/sites/default/files/tex_cache/c805271dd1a364469a6c6b9c0abe52d7.png)
![p(a,n)=T^na,\ n\in\Bbb{N},](/sites/default/files/tex_cache/29132d0caa7f772c725f6209f520af0a.png)
![T^0](/sites/default/files/tex_cache/710aa1139b6b1ded35738e9e1945a19c.png)
Конечным автоматом называется набор , где
- конечное множество
(входной/выходной алфавит),
- конечное множество (внутренние состояния),
-
начальное состояние,
- функция переходов
![\Phi:\Sigma\times Q\to\Sigma\times Q.](/sites/default/files/tex_cache/b446b997638fc9b318a38867831452b8.png)
![{\cal A}=\Sigma\times Q](/sites/default/files/tex_cache/b2a25616191d17d62d53d4db2d19b8c8.png)
![{\rm T}=\Bbb{N}](/sites/default/files/tex_cache/2263b38761485370425149f511786046.png)
![{\cal A}={\cal A}_\Sigma\times{\cal A}_Q](/sites/default/files/tex_cache/aa88d28a2c8f33d8470b3ee434e92f7a.png)
![p](/sites/default/files/tex_cache/83878c91171338902e0fe0fb97a8c47a.png)
![p(\{\sigma_0,q_0\},0)=\{\sigma_0,q_0\},](/sites/default/files/tex_cache/a8e278b341ffc8adc05c266e585c14d5.png)
![p(\{\sigma_0,q_0\},1)=\{\sigma_1,q_1\},](/sites/default/files/tex_cache/6e839927cf64f5bb03f25ec9677af699.png)
![p(\{\sigma_1,q_1\},2)=\{\sigma_2,q_2\}](/sites/default/files/tex_cache/71b7a4606dcf9d127303fc2a4a253d98.png)
Приступим к реализации класса на C# для описания абстрактной динамической системы.
![\begin{verbatim}
class TT
{
public TT() { }
}
class TR : TT
{
public double t;
public TR()
{
t = 0;
}
}
class TN : TT
{
public int n;
public TN()
{
n = 0;
}
}
abstract class TDS
{
public object A;
public TT T;
public TDS(object A)
{
this.A = A;
T = new TT();
}
abstract public void Next();
}
\end{verbatim}](/sites/default/files/tex_cache/c08c2697a7f2b9305b4a7ee1aba54601.png)
![\begin{verbatim}
abstract class TRDS : TDS
{
public TRDS(object A)
: base(A)
{
T = new TR();
}
public double Get_t()
{
return ((TR)T).t;
}
protected void Set_t(double t)
{
((TR)T).t = t;
}
public void Inc(double dt)
{
Set_t(Get_t() + dt);
}
}
\end{verbatim}](/sites/default/files/tex_cache/0543e56165952b9cbb7e9082da5ad347.png)
![\begin{verbatim}
abstract class TNDS : TDS
{
public TNDS(object A)
: base(A)
{
T = new TN();
}
public int Get_n()
{
return ((TN)T).n;
}
protected void Set_n(int n)
{
((TN)T).n = n;
}
public void Inc()
{
Set_n(Get_n() + 1);
}
}
\end{verbatim}](/sites/default/files/tex_cache/a48f2b729b434a5ab41c704b85dd3bef.png)