Опубликован: 18.05.2011 | Доступ: свободный | Студентов: 871 / 65 | Оценка: 4.40 / 4.20 | Длительность: 12:30:00
Лекция 20:

Общие динамические системы

< Лекция 19 || Лекция 20: 1234 || Лекция 21 >
Аннотация: Рассматриваются общие динамические системы, с точки зрения объектно-ориентированного подхода. Изучаются как динамические системы с дискретными временем, так и динамические системы в непрерывным временем. Приведены характерные примеры динамических систем.

Цель лекции: Показать эффективность объктно-ориентированного подхода для моделирования динамических систем. Создать классы на языке C# для моделирования динамических систем с непрерывным и дискретным временем.

Динамической системой называют математическую модель системы, процессы в которой развиваются во времени. Состояние динамической системы характеризуется фазовыми координатами, которые принадлежат фазовому пространству. Время в динамической системе может быть как непрерывным, так и дискретным. Фазовое множество может быть конечным или бесконечным.

Пусть дано непустое множество {\cal A}, которое мы будем называть фазовым пространством, а каждый элемент этого множества a\in{\cal A} описывает состояние рассматриваемой системы. Через {\rm T} мы будем обозначать либо множество {\rm R}_+=\{t\in\Bbb{R}:t\ge0\}, либо множество натуральных чисел \Bbb{N}=\{0,1,2,\dots\}. Это множество будет играть роль времени. В первом случае мы будем рассматривать непрерывные динамические системы, а во втором - дискретные.

Абстрактно заданной динамической системой называется однопараметрическая полугруппа преобразований множества {\cal A}

p:{\cal A}\times{\rm T}\to{\cal A},
удовлетворяющее следующим условиям:

  1. p(a,0)=a для любого a\in{\cal A},
  2. p(p(a,t_1),t_2)=p(a,t_1+t_2) для любых a\in{\cal A}, t_1,t_2\in{\rm T}.

Соответственно, чтобы задать динамическую систему необходимо фиксировать множества {\cal A}, {\rm T} и задать отображение p, удовлетворяющее указанным выше условиям. Пусть {\cal A}=\Bbb{R}^n, {\rm T}={\rm R}_+. Рассмотрим систему обыкновенных дифференциальных уравнений n -го порядка, которая имеет единственное глобальное решение для всех y^0\in\Bbb{R}^n. Тогда решение этой системы задает отображение

y=y(y^0,t):\Bbb{R}^n\times\Bbb{R}_+\to\Bbb{R}^n.
Легко видеть, что это отображение удовлетворяет всем условиям непрерывной динамической системы.

Дискретную динамическую систему можно построить следующим образом. Пусть у нас некоторое множество {\cal A} и задан оператор

T:{\cal A}\to{\cal A}.
Построим полугруппу отображений p(a,n) следующим образом
p(a,n)=T^na,\ n\in\Bbb{N},
где T^0 есть единичное отображение. Таким образом мы имеем дискретную динамическую систему. Содержательные примеры конечной дискретной динамической системы строятся на основании конечных автоматов.

Конечным автоматом называется набор {\Bbb M}=\{\Sigma,Q,q_0,\Phi\}, где \Sigma - конечное множество (входной/выходной алфавит), Q - конечное множество (внутренние состояния), q_0\in Q - начальное состояние, \Phi - функция переходов

\Phi:\Sigma\times Q\to\Sigma\times Q.
С помощью конечного автомата динамическая система строится следующим образом. Множество {\cal A}=\Sigma\times Q, {\rm T}=\Bbb{N}. Будем обозначать {\cal A}={\cal A}_\Sigma\times{\cal A}_Q. Отображение p задается по правилу:
p(\{\sigma_0,q_0\},0)=\{\sigma_0,q_0\},
p(\{\sigma_0,q_0\},1)=\{\sigma_1,q_1\},
p(\{\sigma_1,q_1\},2)=\{\sigma_2,q_2\}
и так далее. Важной характерной чертой конечного автомата является то, что задаваемая им динамическая система является периодической, то есть начиная с некоторого номера состояния будут повторятся.

Приступим к реализации класса на 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}
\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}
\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}
< Лекция 19 || Лекция 20: 1234 || Лекция 21 >
Олег Корсак
Олег Корсак
Латвия, Рига
Дмитрий Кифель
Дмитрий Кифель
Казахстан, Темиртау