Цель лекции: Показать эффективность объктно-ориентированного подхода для моделирования динамических систем. Создать классы на языке 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}$$, $${\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.$$
С помощью конечного автомата
Приступим к реализации класса на C# для описания абстрактной
Мы ввели фиктивный класс $$TT$$ смысл, которого только в том, чтобы быть родителем для классов $$TR$$ и $$TN$$ - соответственно для непрерывной и дискретной динамических систем. Мы также сразу создали два наследника класса $$TDS$$ для различного типа динамических систем.
В качестве первого примера
Запустим наш класс для расчета первых $$10^3$$ точек, и на рисунке 19.1 приведем фазовый портрет.
(рис 19.1) Множество Хенона$$\begin{verbatim}
THenon Henon = new THenon(1.4, 0.3);
StreamWriter F = File.CreateText("henon.txt");
while (Henon.Get_n() <= 10000)
{
Console.WriteLine("{0}\t{1}", Henon.Get_x1(), Henon.Get_x2());
F.WriteLine("{0}\t{1}", Henon.Get_x1(), Henon.Get_x2());
Henon.Next();
}
F.Close();
\end{verbatim}$$
В качестве примера непрерывной
Реализуем соответствующий класс на C#.
$$\begin{verbatim} class TPole : TRDS { TPoleRK RK; double h; public TPole(double a, double b, double h) : base(new double[2]) { this.h = h; RK = new TPoleRK(a, b); Set_x1(10.0); Set_x2(10.0); RK.SetInit(0, new double[] { Get_x1(), Get_x2() }); } \end{verbatim}$$ $$\begin{verbatim} public void Set_x1(double x1) { ((double[])A)[0] = x1; } public void Set_x2(double x2) { ((double[])A)[1] = x2; } public double Get_x1() { return ((double[])A)[0]; } public double Get_x2() { return ((double[])A)[1]; } public override void Next() { RK.NextStep(h); Inc(h); Set_x1(RK.Y[0]); Set_x2(RK.Y[1]); } } \end{verbatim}$$ $$\begin{verbatim} class TPoleRK : TRungeKutta { double a, b; public TPoleRK(double a, double b) : base(2) { this.a = a; this.b = b; } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = a * (1 - b * Y[0] * Y[0]) * Y[1] - Y[0]; } } \end{verbatim}$$Теперь проведем вычислительный эксперимент.
$$\begin{verbatim} TPole Pole = new TPole(1, 0.05, 0.01); StreamWriter F = File.CreateText("pole.txt"); while (Pole.Get_t() <= 100) { Console.WriteLine("{0}\t{1}\t{2}", Pole.Get_t(), Pole.Get_x1(), Pole.Get_x2()); F.WriteLine("{0}\t{1}\t{2}", Pole.Get_t(), Pole.Get_x1(), Pole.Get_x2()); Pole.Next(); } F.Close(); \end{verbatim}$$В результате мы получим фазовый портрет, который представлен на
рисунке 19.2. Мы видим, что наша
(рис 19.2) Ключевые термины
Абстрактно заданная динамическая система - динамическая
система на множестве, заданная с помощью
Конечный автомат -
Динамическая система -
Фазовые координаты - элементы фазового пространства, характеризующие состояние системы.
Краткие итоги: Дано общее определение
Провести вычислительные эксперименты с управляемыми динамическими системами, заданными дифференциальными уравнениями.
Рассмотрим динамическую систему, заданную дифференциальным
уравнением$$y''(t)+\sin(y(t))=u(t).$$
Мы будем управлять решениями этого уравнения с помощью правой
части - функции $$u(t)$$. Мы будем рассматривать эту задачу с
нулевыми начальными условиями. При этом решение $$y(t)=0$$
удовлетворяет
Сначала посмотрим на решение этого уравнения, когда управление $$u(t)$$ является постоянным и имеет вид$$u(t)=1,\quad t\in[0,10].$$ Для проведения вычислительных опытом мы будем использовать следующий класс.
$$\begin{verbatim} class TTest1RK : TRungeKutta { public TTest1RK() : base(2) { } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = -Math.Sin(Y[0]) + 1; } } \end{verbatim}$$Работать с этим классом мы будем следующим образом.
$$\begin{verbatim} double h = 0.01; double[] Y0 = { 0, 1.0 }; TTest1RK Test1RK = new TTest1RK(); Test1RK.SetInit(0, Y0); StreamWriter F = File.CreateText("test1.txt"); double t, Euler, RK, Sin; while (Test1RK.GetCurrent() < (10 + h / 2.0)) { t = Test1RK.GetCurrent(); RK = Test1RK.Y[0]; F.WriteLine("{0}\t{1}", t, RK); Test1RK.NextStep(h); } F.Close(); \end{verbatim}$$Мы видим, что в данном случае решение монотонно и довольно быстро возрастает с ростом времени.
Теперь в качестве управления возьмем функцию$$u(t)=\sin 5t.$$ Мы видим, что в этом случае решение также совершает колебания, похожие на гармонические колебания.
Теперь в качестве уравнения мы возьмем уравнение описывающее осцилятор Ван-дер-Поля$$y''(t)-a(1-by^2(t))y'(t)+y(t)=u(t).$$ Приведем класс, с помощью которого будем моделировать эту динамическую систему.
$$\begin{verbatim} class TTestPoleRK : TRungeKutta { double a, b; public TTestPoleRK(double a, double b) : base(2) { this.a = a; this.b = b; } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = a * (1 - b * Y[0] * Y[0]) * Y[1] - Y[0] + 0.01; } } \end{verbatim}$$Использование в качестве управления постоянной дает нам решение, которое совершает колебания со все увеличивающейся амплитудой.
Теперь в качестве управляющей функции мы возьмем кратковременно действующий импульс$$u(t)=\left\{% \begin{array}{ll} 100, t\le10; \\ 0, t>10. \\ \end{array}% \right.$$ Мы видим, что во время действия нашего управления - траектория резко отклоняется, однако после отключения управления при "t>10" траектория возвращается к своему предельному циклу, который мы наблюдали в лекции, посвященной осциллятору Ван-дер-Поля.
Провести вычислительные эксперименты с управляемыми динамическими системами, заданными дифференциальными уравнениями.
Модель "хищник-жертва" имеет следующее описание. Рассматривается два вида животных, где первое животное является хищником относительно второго животного, являющегося жертвой. Функция $$x(t)$$ описывает количество хищников, а функция $$y(t)$$ описывает количество жертв.
Эта система имеет равновесное состояние, когда число хищников и жертв. Отклонение от этого состояния приводит к периодическим колебаниям. Однако эта система может демонстрировать весьма сложное поведение.
Цель лекции: Показать эффективность объктно-ориентированного подхода для моделирования динамических систем. Создать классы на языке 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}$$, $${\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.$$
С помощью конечного автомата
Приступим к реализации класса на C# для описания абстрактной
Мы ввели фиктивный класс $$TT$$ смысл, которого только в том, чтобы быть родителем для классов $$TR$$ и $$TN$$ - соответственно для непрерывной и дискретной динамических систем. Мы также сразу создали два наследника класса $$TDS$$ для различного типа динамических систем.
В качестве первого примера
Запустим наш класс для расчета первых $$10^3$$ точек, и на рисунке 19.1 приведем фазовый портрет.
(рис 19.1) Множество Хенона$$\begin{verbatim}
THenon Henon = new THenon(1.4, 0.3);
StreamWriter F = File.CreateText("henon.txt");
while (Henon.Get_n() <= 10000)
{
Console.WriteLine("{0}\t{1}", Henon.Get_x1(), Henon.Get_x2());
F.WriteLine("{0}\t{1}", Henon.Get_x1(), Henon.Get_x2());
Henon.Next();
}
F.Close();
\end{verbatim}$$
В качестве примера непрерывной
Реализуем соответствующий класс на C#.
$$\begin{verbatim} class TPole : TRDS { TPoleRK RK; double h; public TPole(double a, double b, double h) : base(new double[2]) { this.h = h; RK = new TPoleRK(a, b); Set_x1(10.0); Set_x2(10.0); RK.SetInit(0, new double[] { Get_x1(), Get_x2() }); } \end{verbatim}$$ $$\begin{verbatim} public void Set_x1(double x1) { ((double[])A)[0] = x1; } public void Set_x2(double x2) { ((double[])A)[1] = x2; } public double Get_x1() { return ((double[])A)[0]; } public double Get_x2() { return ((double[])A)[1]; } public override void Next() { RK.NextStep(h); Inc(h); Set_x1(RK.Y[0]); Set_x2(RK.Y[1]); } } \end{verbatim}$$ $$\begin{verbatim} class TPoleRK : TRungeKutta { double a, b; public TPoleRK(double a, double b) : base(2) { this.a = a; this.b = b; } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = a * (1 - b * Y[0] * Y[0]) * Y[1] - Y[0]; } } \end{verbatim}$$Теперь проведем вычислительный эксперимент.
$$\begin{verbatim} TPole Pole = new TPole(1, 0.05, 0.01); StreamWriter F = File.CreateText("pole.txt"); while (Pole.Get_t() <= 100) { Console.WriteLine("{0}\t{1}\t{2}", Pole.Get_t(), Pole.Get_x1(), Pole.Get_x2()); F.WriteLine("{0}\t{1}\t{2}", Pole.Get_t(), Pole.Get_x1(), Pole.Get_x2()); Pole.Next(); } F.Close(); \end{verbatim}$$В результате мы получим фазовый портрет, который представлен на
рисунке 19.2. Мы видим, что наша
(рис 19.2) Ключевые термины
Абстрактно заданная динамическая система - динамическая
система на множестве, заданная с помощью
Конечный автомат -
Динамическая система -
Фазовые координаты - элементы фазового пространства, характеризующие состояние системы.
Краткие итоги: Дано общее определение
Провести вычислительные эксперименты с управляемыми динамическими системами, заданными дифференциальными уравнениями.
Рассмотрим динамическую систему, заданную дифференциальным
уравнением$$y''(t)+\sin(y(t))=u(t).$$
Мы будем управлять решениями этого уравнения с помощью правой
части - функции $$u(t)$$. Мы будем рассматривать эту задачу с
нулевыми начальными условиями. При этом решение $$y(t)=0$$
удовлетворяет
Сначала посмотрим на решение этого уравнения, когда управление $$u(t)$$ является постоянным и имеет вид$$u(t)=1,\quad t\in[0,10].$$ Для проведения вычислительных опытом мы будем использовать следующий класс.
$$\begin{verbatim} class TTest1RK : TRungeKutta { public TTest1RK() : base(2) { } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = -Math.Sin(Y[0]) + 1; } } \end{verbatim}$$Работать с этим классом мы будем следующим образом.
$$\begin{verbatim} double h = 0.01; double[] Y0 = { 0, 1.0 }; TTest1RK Test1RK = new TTest1RK(); Test1RK.SetInit(0, Y0); StreamWriter F = File.CreateText("test1.txt"); double t, Euler, RK, Sin; while (Test1RK.GetCurrent() < (10 + h / 2.0)) { t = Test1RK.GetCurrent(); RK = Test1RK.Y[0]; F.WriteLine("{0}\t{1}", t, RK); Test1RK.NextStep(h); } F.Close(); \end{verbatim}$$Мы видим, что в данном случае решение монотонно и довольно быстро возрастает с ростом времени.
Теперь в качестве управления возьмем функцию$$u(t)=\sin 5t.$$ Мы видим, что в этом случае решение также совершает колебания, похожие на гармонические колебания.
Теперь в качестве уравнения мы возьмем уравнение описывающее осцилятор Ван-дер-Поля$$y''(t)-a(1-by^2(t))y'(t)+y(t)=u(t).$$ Приведем класс, с помощью которого будем моделировать эту динамическую систему.
$$\begin{verbatim} class TTestPoleRK : TRungeKutta { double a, b; public TTestPoleRK(double a, double b) : base(2) { this.a = a; this.b = b; } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = a * (1 - b * Y[0] * Y[0]) * Y[1] - Y[0] + 0.01; } } \end{verbatim}$$Использование в качестве управления постоянной дает нам решение, которое совершает колебания со все увеличивающейся амплитудой.
Теперь в качестве управляющей функции мы возьмем кратковременно действующий импульс$$u(t)=\left\{% \begin{array}{ll} 100, t\le10; \\ 0, t>10. \\ \end{array}% \right.$$ Мы видим, что во время действия нашего управления - траектория резко отклоняется, однако после отключения управления при "t>10" траектория возвращается к своему предельному циклу, который мы наблюдали в лекции, посвященной осциллятору Ван-дер-Поля.
Провести вычислительные эксперименты с управляемыми динамическими системами, заданными дифференциальными уравнениями.
Модель "хищник-жертва" имеет следующее описание. Рассматривается два вида животных, где первое животное является хищником относительно второго животного, являющегося жертвой. Функция $$x(t)$$ описывает количество хищников, а функция $$y(t)$$ описывает количество жертв.
Эта система имеет равновесное состояние, когда число хищников и жертв. Отклонение от этого состояния приводит к периодическим колебаниям. Однако эта система может демонстрировать весьма сложное поведение.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.