Современные численные методы в объектно-ориентированном изложении на C#

Oбъектно-opиентированное управление решениями дифференциальных уравнений

Разбить на страницы
Показывать лекцию целиком

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

Многие процессы, описываемые дифференциальными уравнениями, являются управляемыми системами. Дадим формальное описание управляемой системы.

Пусть $$D$$, $$D_\Bbb{T}$$ имеют тот же смысл, что и в прошлой лекции. Пусть теперь еще выделено семейство множеств $$U(x,t)\subset\Bbb{R}^m$$, где $$x\in\Bbb{R}^n$$ и $$t\in[0,\Bbb{T}]$$ являются параметрами. Множество $$U(x,t)$$ называется множеством допустимых управлений.

Пусть теперь задана функция $$f(x,u,t)$$, которая определена при $$x\in\overline{D}$$, $$u\in\bigcup\limits_{x\in\overline{D},t\in[0,\Bbb{T}]}U(x,t)$$, $$t\in[0,\Bbb{T}]$$. Будем рассматривать обыкновенное дифференциальное уравнение с управлением$$\begin{array}{c} y'(t)=f(y(t),u(t),t), \\ \\ u(t)\in U(y(t),t)\ t\in[0,\Bbb{T}].\\ \end{array}$$ и начальным условием$$y(0)=y^0,\ y_0\in D.$$ Решением задачи 18.1-18.2 на $$[0,T]$$ является измеримая функция $$u(t)\in U(y(t),t)$$ и абсолютно непрерывная функция $$y(t)\in \overline{D}$$, $$t\in[0,T]$$, и эти функции удовлетворяют 18.1-18.2.

Мы сформулировали задачу на управления решениями дифференциальных уравнений в довольно общем виде. Однако, как правило, управление осуществляется с некоторой целью. Для этого вводится так называемый целевой функционал. Целевым функционалом называется любая числовая функция определенная на решении задачи 18.1-18.2. Обозначим этот функционал следующим образом$$I=I(y,u)\in\Bbb{R}.$$ При наличии целевого функционала мы приходим к задаче оптимального управления, то есть задаче о нахождении такого решения, которое доставляет максимум (или минимум) целевому функционалу. На практике, однако, часто применяется понятие решение задачи управления, удовлетворительное с точки зрения целевого функционала. Мы будем говорить, что решение задачи управления --- пара функций $$y$$ и $$u$$ является удовлетворительным с точки зрения целевого функционала, если$$I(y,u)\in G,$$ где $$G\subset\Bbb{R}$$ называется удовлетворительной областью значения целевого функционала. Заметим, что $$G$$ может быть произвольным непустым множеством.

Обратимся к моделированию задач управления. Общая схема такова

  • Задаем начальное управление
  • Решаем систему дифференциальных уравнений с начальным управлением на одном шаге методом Рунге-Кутты
  • По полученному решению на очередном шаге меняем (в случае необходимости) управление
  • Повторяем шаги 2-3 до тех пор пока решение и управления не станут удовлетворительными с точки зрения целевого функционала
  • Следует отметить, что далеко не всегда удовлетворительное с точки зрения целевого функционала решение задачи управления является оптимальным решением. Более того, существует такие задачи управления решениями, для которых не существует оптимального решения.

    Реализуем эту схему в виде абстрактного класса, который мы создадим, как наследник класса $$TRungeKutta$$.

    $$\begin{verbatim} abstract class TControlSystem : TRungeKutta { public int M; public double[] U; public TControlSystem(int N, int M) : base(N) { this.M = M; U = new double[M]; } abstract public void SetU(); public override void NextStep(double dt) { SetU(); base.NextStep(dt); } } \end{verbatim}$$

    Рассмотрим модельную систему управления на основе уравнений, описывающих математический маятник. Будем рассматривать следующую управляемую систему дифференциальных уравнений.$$y''(t)+u(t)y'(t)+y(t)=0,$$ с начальными условиями$$y(0)=1,$$ $$y'(0)=0.$$ Здесь управление осуществляет изменением коэффициента затухания. Мы будем рассматривать множество допустимых управлений состоящее всего из двух точек:$$U=\{0,1\}\subset\Bbb{R}.$$ Нулевое значение управления соответствует отсутствию затухания в системе, а равное единице - наличию постоянного затухания. При отсутствии затухания наша система будет совершать гармонические колебания. Предположим, что наша цель состоит в том, чтобы поддерживать гармонические колебания с амплитудой 0.2. Мы будем использовать так называемое программное управление, т.е. будем выбирать наше управление зависящим от текущего положения системы. Будем использовать следующую формулу нашего управления:$$u(y,t)=\left\{% \begin{array}{ll} 0, |y|\le 0.2 \\ 1, |y|>0.2 \\ \end{array}% \right.$$ Таким образом, если положение осциллятора меньше заданного, то мы не используем затухания, а в случае, когда положение осциллятора больше заданного, мы используем затухание. Реализуем сказанное.

    $$\begin{verbatim} class TOscControl : TControlSystem { public TOscControl() : base(2, 1) { U[0] = 0; } public override void SetU() { if (Math.Abs(Y[0]) > 0.2) { U[0] = 1; } else { U[0] = 0; } } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = -Y[0] - U[0] * Y[1]; } } \end{verbatim}$$

    И проведем вычислительный эксперимент.

    $$\begin{verbatim} TOscControl Osc = new TOscControl(); Osc.SetInit(0, new double[2] { 1, 0 }); double h = 0.01; StreamWriter F = File.CreateText("control.txt"); while (Osc.GetCurrent() < 50.0 + h / 2.0) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", Osc.GetCurrent(), Osc.Y[0], Osc.Y[1], Osc.U[0]); F.WriteLine("{0}\t{1}\t{2}\t{3}", Osc.GetCurrent(), Osc.Y[0], Osc.Y[1], Osc.U[0]); Osc.NextStep(h); } F.Close(); \end{verbatim}$$

    На рисунке 18.1 мы приводим фазовый портрет нашей управляемой системы. Угловые точки на траектории отражают моменты переключения управления. Мы видим, что траектория быстро сходится к искомому предельному циклу. Предельным циклом называется периодическая (замкнутая) траектория в окрестности которой нет других периодических траекторий.

    (рис 18.1) Фазовый портрет управляемой системы

    Заметим, что хотя наше уравнение маятника является линейным относительно неизвестной функции $$y$$ и управление входит в это уравнение линейно, но зависимость решения от управления является уже нелинейной. Эта ситуация является общей для систем управления.

    Другой пример управляемой системы состоит в следующем. Будем рассматривать простейшую систему автопилота самолета. Мы будем управлять курсовым углом самолета. Пусть нам задан нулевой курс. В линейном приближении колебания этого курса описываются системой дифференциальных уравнений:$$y''(t)=-y'(t)+u(t)$$ пусть начальные условия таковы$$y(0)=1,$$ $$y'(0)=0.$$ Предположим, что наше управление может принимать только два значения:$$U=\{-1,1\}\subset\Bbb{R}.$$ Программное управление выберем следующим естественным образом$$u(x,t)=\left\{% \begin{array}{ll} 1, y<0 \\ -1, y>0 \\ \end{array}% \right.$$ Реализуем эту систему

    $$\begin{verbatim} class TPilotControl : TControlSystem { public TPilotControl() : base(2, 1) { U[0] = 1; } public override void SetU() { if (Y[0] < 0) { U[0] = 1; } else { U[0] = -1; } } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = -Y[1] + U[0]; } } \end{verbatim}$$

    И проведем вычислительный эксперимент с нашим управлением.

    $$\begin{verbatim} TPilotControl Pilot = new TPilotControl(); Pilot.SetInit(0, new double[2] { 1, 0 }); F = File.CreateText("pilot.txt"); while (Pilot.GetCurrent() < 50.0 + h / 2.0) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", Pilot.GetCurrent(), Pilot.Y[0], Pilot.Y[1], Pilot.U[0]); F.WriteLine("{0}\t{1}\t{2}\t{3}", Pilot.GetCurrent(), Pilot.Y[0], Pilot.Y[1], Pilot.U[0]); Pilot.NextStep(h); } F.Close(); \end{verbatim}$$

    В результате на рисунке 18.2 мы получим колебания нашего курса. Можно видеть, что довольно быстро амплитуда колебаний нашего курса становится малой, однако в нашей системе возникли характерные автоколебания. Автоколебаниями называются незатухающие периодические колебания. При этом частота этих колебаний определяется свойствами самой нелинейной системы, а не частотой внешнего воздействия. Предельный цикл является одним из примеров автоколебаний.

    (рис 18.2) Колебание курса автопилота

    Ключевые термины

    Множество допустимых управлений - множество, которому принадлежит управление.

    Управляемая система - система, описывающаяся дифференциальным и уравнениями, содержащие управление.

    Целевой функционал - функционал на решении, с помощью которого определяется оптимальное решение.

    Краткие итоги: Рассмотрены методы управления дифференциальными уравнениями с помощью выбора правых частей. Проведены вычислительные эксперименты, позволяющие дать качественную картину некоторых задач управления.

    Страницы:

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

    Многие процессы, описываемые дифференциальными уравнениями, являются управляемыми системами. Дадим формальное описание управляемой системы.

    Пусть $$D$$, $$D_\Bbb{T}$$ имеют тот же смысл, что и в прошлой лекции. Пусть теперь еще выделено семейство множеств $$U(x,t)\subset\Bbb{R}^m$$, где $$x\in\Bbb{R}^n$$ и $$t\in[0,\Bbb{T}]$$ являются параметрами. Множество $$U(x,t)$$ называется множеством допустимых управлений.

    Пусть теперь задана функция $$f(x,u,t)$$, которая определена при $$x\in\overline{D}$$, $$u\in\bigcup\limits_{x\in\overline{D},t\in[0,\Bbb{T}]}U(x,t)$$, $$t\in[0,\Bbb{T}]$$. Будем рассматривать обыкновенное дифференциальное уравнение с управлением$$\begin{array}{c} y'(t)=f(y(t),u(t),t), \\ \\ u(t)\in U(y(t),t)\ t\in[0,\Bbb{T}].\\ \end{array}$$ и начальным условием$$y(0)=y^0,\ y_0\in D.$$ Решением задачи 18.1-18.2 на $$[0,T]$$ является измеримая функция $$u(t)\in U(y(t),t)$$ и абсолютно непрерывная функция $$y(t)\in \overline{D}$$, $$t\in[0,T]$$, и эти функции удовлетворяют 18.1-18.2.

    Мы сформулировали задачу на управления решениями дифференциальных уравнений в довольно общем виде. Однако, как правило, управление осуществляется с некоторой целью. Для этого вводится так называемый целевой функционал. Целевым функционалом называется любая числовая функция определенная на решении задачи 18.1-18.2. Обозначим этот функционал следующим образом$$I=I(y,u)\in\Bbb{R}.$$ При наличии целевого функционала мы приходим к задаче оптимального управления, то есть задаче о нахождении такого решения, которое доставляет максимум (или минимум) целевому функционалу. На практике, однако, часто применяется понятие решение задачи управления, удовлетворительное с точки зрения целевого функционала. Мы будем говорить, что решение задачи управления --- пара функций $$y$$ и $$u$$ является удовлетворительным с точки зрения целевого функционала, если$$I(y,u)\in G,$$ где $$G\subset\Bbb{R}$$ называется удовлетворительной областью значения целевого функционала. Заметим, что $$G$$ может быть произвольным непустым множеством.

    Обратимся к моделированию задач управления. Общая схема такова

  • Задаем начальное управление
  • Решаем систему дифференциальных уравнений с начальным управлением на одном шаге методом Рунге-Кутты
  • По полученному решению на очередном шаге меняем (в случае необходимости) управление
  • Повторяем шаги 2-3 до тех пор пока решение и управления не станут удовлетворительными с точки зрения целевого функционала
  • Следует отметить, что далеко не всегда удовлетворительное с точки зрения целевого функционала решение задачи управления является оптимальным решением. Более того, существует такие задачи управления решениями, для которых не существует оптимального решения.

    Реализуем эту схему в виде абстрактного класса, который мы создадим, как наследник класса $$TRungeKutta$$.

    $$\begin{verbatim} abstract class TControlSystem : TRungeKutta { public int M; public double[] U; public TControlSystem(int N, int M) : base(N) { this.M = M; U = new double[M]; } abstract public void SetU(); public override void NextStep(double dt) { SetU(); base.NextStep(dt); } } \end{verbatim}$$

    Рассмотрим модельную систему управления на основе уравнений, описывающих математический маятник. Будем рассматривать следующую управляемую систему дифференциальных уравнений.$$y''(t)+u(t)y'(t)+y(t)=0,$$ с начальными условиями$$y(0)=1,$$ $$y'(0)=0.$$ Здесь управление осуществляет изменением коэффициента затухания. Мы будем рассматривать множество допустимых управлений состоящее всего из двух точек:$$U=\{0,1\}\subset\Bbb{R}.$$ Нулевое значение управления соответствует отсутствию затухания в системе, а равное единице - наличию постоянного затухания. При отсутствии затухания наша система будет совершать гармонические колебания. Предположим, что наша цель состоит в том, чтобы поддерживать гармонические колебания с амплитудой 0.2. Мы будем использовать так называемое программное управление, т.е. будем выбирать наше управление зависящим от текущего положения системы. Будем использовать следующую формулу нашего управления:$$u(y,t)=\left\{% \begin{array}{ll} 0, |y|\le 0.2 \\ 1, |y|>0.2 \\ \end{array}% \right.$$ Таким образом, если положение осциллятора меньше заданного, то мы не используем затухания, а в случае, когда положение осциллятора больше заданного, мы используем затухание. Реализуем сказанное.

    $$\begin{verbatim} class TOscControl : TControlSystem { public TOscControl() : base(2, 1) { U[0] = 0; } public override void SetU() { if (Math.Abs(Y[0]) > 0.2) { U[0] = 1; } else { U[0] = 0; } } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = -Y[0] - U[0] * Y[1]; } } \end{verbatim}$$

    И проведем вычислительный эксперимент.

    $$\begin{verbatim} TOscControl Osc = new TOscControl(); Osc.SetInit(0, new double[2] { 1, 0 }); double h = 0.01; StreamWriter F = File.CreateText("control.txt"); while (Osc.GetCurrent() < 50.0 + h / 2.0) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", Osc.GetCurrent(), Osc.Y[0], Osc.Y[1], Osc.U[0]); F.WriteLine("{0}\t{1}\t{2}\t{3}", Osc.GetCurrent(), Osc.Y[0], Osc.Y[1], Osc.U[0]); Osc.NextStep(h); } F.Close(); \end{verbatim}$$

    На рисунке 18.1 мы приводим фазовый портрет нашей управляемой системы. Угловые точки на траектории отражают моменты переключения управления. Мы видим, что траектория быстро сходится к искомому предельному циклу. Предельным циклом называется периодическая (замкнутая) траектория в окрестности которой нет других периодических траекторий.

    (рис 18.1) Фазовый портрет управляемой системы

    Заметим, что хотя наше уравнение маятника является линейным относительно неизвестной функции $$y$$ и управление входит в это уравнение линейно, но зависимость решения от управления является уже нелинейной. Эта ситуация является общей для систем управления.

    Другой пример управляемой системы состоит в следующем. Будем рассматривать простейшую систему автопилота самолета. Мы будем управлять курсовым углом самолета. Пусть нам задан нулевой курс. В линейном приближении колебания этого курса описываются системой дифференциальных уравнений:$$y''(t)=-y'(t)+u(t)$$ пусть начальные условия таковы$$y(0)=1,$$ $$y'(0)=0.$$ Предположим, что наше управление может принимать только два значения:$$U=\{-1,1\}\subset\Bbb{R}.$$ Программное управление выберем следующим естественным образом$$u(x,t)=\left\{% \begin{array}{ll} 1, y<0 \\ -1, y>0 \\ \end{array}% \right.$$ Реализуем эту систему

    $$\begin{verbatim} class TPilotControl : TControlSystem { public TPilotControl() : base(2, 1) { U[0] = 1; } public override void SetU() { if (Y[0] < 0) { U[0] = 1; } else { U[0] = -1; } } public override void F(double t, double[] Y, ref double[] FY) { FY[0] = Y[1]; FY[1] = -Y[1] + U[0]; } } \end{verbatim}$$

    И проведем вычислительный эксперимент с нашим управлением.

    $$\begin{verbatim} TPilotControl Pilot = new TPilotControl(); Pilot.SetInit(0, new double[2] { 1, 0 }); F = File.CreateText("pilot.txt"); while (Pilot.GetCurrent() < 50.0 + h / 2.0) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", Pilot.GetCurrent(), Pilot.Y[0], Pilot.Y[1], Pilot.U[0]); F.WriteLine("{0}\t{1}\t{2}\t{3}", Pilot.GetCurrent(), Pilot.Y[0], Pilot.Y[1], Pilot.U[0]); Pilot.NextStep(h); } F.Close(); \end{verbatim}$$

    В результате на рисунке 18.2 мы получим колебания нашего курса. Можно видеть, что довольно быстро амплитуда колебаний нашего курса становится малой, однако в нашей системе возникли характерные автоколебания. Автоколебаниями называются незатухающие периодические колебания. При этом частота этих колебаний определяется свойствами самой нелинейной системы, а не частотой внешнего воздействия. Предельный цикл является одним из примеров автоколебаний.

    (рис 18.2) Колебание курса автопилота

    Ключевые термины

    Множество допустимых управлений - множество, которому принадлежит управление.

    Управляемая система - система, описывающаяся дифференциальным и уравнениями, содержащие управление.

    Целевой функционал - функционал на решении, с помощью которого определяется оптимальное решение.

    Краткие итоги: Рассмотрены методы управления дифференциальными уравнениями с помощью выбора правых частей. Проведены вычислительные эксперименты, позволяющие дать качественную картину некоторых задач управления.

    Вернуться к учебному плану