Реферат: Математическая модель в пространстве состояний линейного стационарного объекта управления

СОДЕРЖАНИЕ

1. Анализ объекта управления

1.1 Анализ линейного стационарного объекта управления, заданногопередаточной функцией

1.2 Получение математической модели в пространстве состоянийлинейного стационарного объекта управления, заданного передаточной функцией

1.2.1 Матрица Фробениуса

1.2.2 Метод параллельной декомпозиции

2. Решение задачи быстродействия симплекс-методом

3. Оптимальная l – проблема моментов

3.1 Оптимальная l – проблема моментов в пространстве«вход-выход»

3.2 Оптимальная l – проблема моментов в пространствесостояний

4. Нахождение оптимального управления с использованиемграмиана управляемости (критерий – минимизация энергии)

5. Аналитическое конструирование оптимальных регуляторов(акор)

5.1 Стабилизации объекта управления на полубесконечноминтервале времени

5.1.1 Решение алгебраического уравнения Риккати методомдиагонализации

5.1.2 Решение алгебраического уравнения Риккати интегрированиемв обратном времени до установившегося состояния

5.2 Стабилизации объекта управления на конечном интервалевремени

5.3 Задача акор – стабилизации для компенсации известноговозмущающего воздействия.

5.4 Задача акор для отслеживания известного задающеговоздействия. i подход

5.5 Задача акор для отслеживания известного задающеговоздействия. ii подход (линейный сервомеханизм)

5.6 Задача акор – слежения со скользящими интервалами.

6. Синтез наблюдателя полного порядка

Литература

Приложение

PlotTimeFrHaract.m

ProstranstvoSostoyanii.m

SimplexMetod2.m

Optimal_L_problem_moments.m

Gramian_Uprav.m       

AKOR_stabilizaciya_na_polybeskon_interval.m

AKOR_stabilizaciya_na_konech_interval.m

Sravnenie_stabilizacii.m

AKOR_stabilizaciya_pri_vozmusheniyah.m

AKOR_slegenie_na_konech_interval_I_podxod.m

AKOR_slegenie_na_konech_interval_II_podxod.m

AKOR_slegenie_so_skolz_intervalami_Modern.m

Sintez_nablyud_polnogo_poryadka.m

Solve_Riccati_Method_Diag.m

Solve_Riccati_Method_Revers_Integr.m

Vozmyshyayushee_Vozdeistvie_Discrete_Revers.m

Zadayushee_Vozdeistvie_Discrete_Revers_Modern.m


/>1. Анализобъекта управления

/>1.1 Анализ линейного стационарного объекта управления, заданного передаточнойфункцией

Передаточная функцияданного объекта имеет вид:

/>,

где:

/>, />;

/>, />,/>, />, />, />.

или

/>.

Нули передаточнойфункции:

/>

Полюса передаточнойфункции (полученные стандартными функциями среды Matlab 7.4):


/>

/>

Рис.1. График расположения нулей и полюсов передаточнойфункции объекта на комплексной плоскости.

Найдем временныехарактеристики объекта управления.

К временнымхарактеристикам относятся /> и/>.

/> – переходная характеристика;

/> – импульсная переходная функция;

Для нахождения /> и /> воспользуемся пакетом Matlab 7.4.

/>,

Аналитическое выражениедля />:

/>

В этом случае /> имеет вид

/>

Рис.2. График переходной характеристики />.

/>

Рис.3. График переходной характеристики /> на интервале /> (увеличенное).

/>,

Аналитическое выражениедля />:


/>.

В этом случае /> имеет вид

/>

Рис.4. График импульсной переходнойхарактеристики />.

/>

Рис.5. График импульсной переходнойхарактеристики />на интервале /> (увеличенное).


Найдем частотныехарактеристики объекта управления.

К частотнымхарактеристикам относятся:

амплитудно – частотная характеристика(АЧХ),

фазо – частотнаяхарактеристика (ФЧХ),

амплитудно – фазоваячастотная характеристика (АФЧХ),

Аналитическое выражениедля АЧХ:

/>.

В этом случае АЧХимеетвид

/>

Рис.6. График АЧХ

/>

Рис.7. График АЧХ на интервале /> (увеличенное). Аналитическоевыражение для ФЧХ:

/>

В этом случае ФЧХимеетвид

/>

Рис.8. График ФЧХ .

/>

Рис.9. График ФЧХ на интервале /> (увеличенное).


/>

Рис.10. График АФЧХ.

 

/>

Рис.11. График АФЧХ (увеличенное).

 

Аналитическое выражениедля ЛАЧХ:

 

/>.


В этом случае ЛАЧХ имеетвид

/>

Рис.12. График ЛАЧХ.

 

Аналитическое выражениедля ЛФЧХ:

 

/>

В этом случае ЛФЧХ имеетвид

/>

Рис.13. График ЛФЧХ.


/>1.2 Получение математическоймодели в пространстве состояний линейного стационарного объекта управления,заданного передаточной функцией

Передаточная функцияданного объекта имеет вид:

/>/>,

где:

/>, />;

/>, />,/>, />, />, />.

или

/>

Описание системы впространстве состояний имеет следующий вид:

/>

Переходя в областьизображений описание системы в пространстве состояний будет иметь следующийвид:

/>

/> 1.2.1Матрица Фробениуса

Получим выражения,которые определяют вектор состояний и выход заданного объекта в общем виде:

 

/>.

/>.

Тогда получим:

/> (1)

/> (2)

Числитель передаточнойфункции имеет вид: />.

Знаменатель передаточнойфункции:

/>.

Тогда согласно равенству(1) и (2) имеем

/>,

/>.


Перейдем из областиизображений в область оригиналов

/>,

/>

и затем перейдем кнормальной форме Коши

/>/>

/>.

Запишем матрицы состояний

/>, />, />

Численное значение матрицсостояний:

/>, />,

/>

 

/>1.2.2Метод параллельной декомпозиции

Запишем передаточнуюфункцию объекта в другом виде, а именно:

/>

или

/>.

Согласно формуле /> получим

/>


Рассмотрим каждое изслагаемых в отдельности согласно принципу параллельной декомпозиции.

a. />,

/>.

b. />,

/>.

c. />,

/>,

/>,

/>/>

/>/>

/>

d. />,

/>

Получим выход системы:

/>

/>

Запишем матрицы состояний

/>, />, />

Вычисление коэффициентовразложения дробной рациональной функции /> насумму элементарных дробей и проверка правильности получения матриц состояния сделанос помощью пакета Matlab 7.4 (скриптProstranstvoSostoyanii.m)

Получены следующиерезультаты: Матрица СЛАУ:

/>, />,

/>,

/>

Численное значение матрицсостояний:

/>, />,

/>.


/>2. Решение задачи быстродействиясимплекс-методом

 

Дана система:

/> (3)

1. Проверимуправляемость данной системы.

Запишем систему ДУ вматричном виде:

/>,

где />.

Данная система являетсястационарной, её порядок />,поэтому матрица управляемости имеет вид:

/>

Найдем матрицууправляемости:

/>


Ранг матрицыуправляемости равен порядку системы, следовательно, данная система являетсяуправляемой.

/> следовательно />.

Собственные числа матрицы/> найдем из уравнения/>:

/>

/>         />

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

2. Ссылаясь нарешение задачи быстродействия из ДЗ№2 по СУЛА «Решение задачи быстродействия»имеем:

Запишем зависимости />, />, полученные при решениисистем дифференциальных уравнений:

/>:

/>

/>:

/>

/>:

/>

/>:

/>

Перейдем к дискретноймодели заданной системы. Имеем

/> (4)

где /> шаг дискретизации исоответствующие матрицы

/> (5)

Пусть управлениеограничено интервальным ограничением

/>                 (6)

Тогда на /> шаге имеем

/>         (7)

Известны начальная иконечная точки

/>

где />– оптимальное число шагов взадаче быстродействия.

Решается задачабыстродействия

/>

 

а) Формирование задачибыстродействия как задачи линейного программирования

Конечная точка /> в дискретной моделипредставлена в виде

/>        (8)

Получаем /> – равенств

/>     (9)

Для приведенияограничений (9) к канонической форме сделаем необходимое преобразованиев правой и левой частях, чтобы правые части были неотрицательными (если праваячасть меньше нуля, то домножаем на (-1) левую и правую части). Отметимпроведенные измененияточкой в правом верхнем углу соответствующихвекторов

/>. (10)

Для того чтобы получитьнеобходимый допустимый базис для задачи линейного программирования, добавимформально остаточные искусственные переменные (/>).Таким образом, уравнения (10) представляются в виде

/>(11)

Так как текущееуправление /> – управление имеет любойзнак, /> то сделаем необходимуюзамену

/>

Тогда уравнения (11)примут вид

/>(12)

Введем остаточныепеременные в ограничения на управление

/>

/> /> (13)

При объединении выражений(12) и (13) получаем /> ограничений.

Начальный допустимыйбазис состоит из остаточных и остаточных искусственных переменных

/>

Формируем целевую функцию(по второму методу выбора начального допустимого базиса)

/> (14)

б) Решение задачибыстродействия

Предположим, что />, где />– оптимальное число шагов.Так как значение /> нам неизвестно(но /> известно точно), выбираемнекоторое начальное /> и решаем задачулинейного программирования (12)-(14).

При этом

Общее число столбцов всимплекс-таблице: /> 

Число базисных переменных:/>

Сформируем />строку. Имеем

/>

Выразим из уравнения (12)начальные базисные переменные />

/>

и подставим в целевуюфункцию. Получим /> – строку

 /> (15)

Решаем задачу (12) – (14)симплекс-методом.

В случае,

если />, /> – малое число />

иначе

1) если /> увеличить /> и целое, рвернуться к первомушагу формирования задачи линейного программирования;

2) если /> (не все управления будутравны предельным, могут быть, в том числе нулевые)), />, уменьшить />, вернуться к первому шагуформирования задачи линейного программирования.

Решения данной задачиполучено с помощью пакета Matlab7.4 (скрипт SimplexMetod2.m): />

/>

Рис. 14. График фазовой координаты />.

/>

Рис. 15. График фазовой координаты />.

/>

Рис. 16. График />.

/>

Рис. 17. График оптимального управления />.

Выводы:Сравнивая полученные результаты срезультатами полученными в ДЗ№2 по СУЛА, можно сделать вывод, что решениясовпадают, с точностью до />.


3. Оптимальная L– проблема моментов 3.1 Оптимальная L – проблема моментов впространстве «вход-выход»

Укороченная системаданного объекта имеет вид:

/>,

где:

/>;

/>;

/>;

/>;

/>;

/>.

Полюса укороченнойпередаточной функции:

/>;

/>;

/>;

/>;

/>.

Заданыначальные и конечные условия:

/>, />, />.

Дляопределения начальных и конечных условий для /> воспользуемсяследующей формулой:

/>,

Гдематрица /> имеет следующий вид

/>,

где />, />.

 

ИПФ укороченной системы:

/>

Составим фундаментальнуюсистему решений:

ФСР: />.

Составим матрицу />.

/>, где /> –матрица Вронского

/>

/>,

Тогда

/>.

Составим моментныеуравнения (связь между входом и выходом):

/>

Моментные функции определяютсяпо следующей формуле

/>

Составим моментныефункции:

/>

Найдем моменты последующей формуле:

/>.

/>

Числовое значениенайденных моментов:

/>

Составим функционалкачества, который имеет следующий вид:

/>

при условии, что :/>, т.е. />

Выразим из данногоусловия />, тогда получим следующееравенство:

/>.

Подставляя полученноеравенство в функционал и заменяя /> ихправыми частями получаем


/>

Найдем частные производные/> и приравняем их к нулю.Решая полученную систему уравнений, определяем оптимальные значениякоэффициентов />, а /> вычислим по формуле

/>.

Т.о. имеем:

/>

Минимальная энергия:

/>

Найдем управление последующей формуле:

/>

Тогда оптимальноеуправление


/>.

 

3.2 Оптимальная L – проблемамоментов в пространстве состояний

Система задана в виде:

/>

Решение ДУ имеет вид:

/>, при /> имеем:

/>.

Составим моментныеуравнения:

/>

/>

Подставляя необходимыеданные в выше приведенные формулы, получим следующие моменты и моментныефункции:

Числовое значениенайденных моментов:


/>

Моментные функции:

/>

Заметим, чтомоменты и моментные функции совпадают с моментами и моментными функциями,найденными в пункте (а).

Из этого следует,что функционал, значения />,управление и минимальная энергия будут иметь точно такие же числовые значения ианалитические выражения, как и в пункте (3.1).

 

Оптимальное управлениеимеет вид:

/>

Проверим правильностьполученного решения.

Эталонные значениякоординат в начальный и конечный момент времени:

/>, />

/>, />

Найденные значениякоординат в начальный и конечный момент времени:

/>, />

/>, />

Вычислим погрешностьполученных результатов:


/>, />

/>, />

Ниже представлены графикиполученного решения с помощью скрипта Optimal_L_problem_moments.m.

/>/>

/>/>

/>

Рис. 18. Графики фазовых координат системы при переходе из /> в />.

/> />

/> />

Рис. 19. Графики выходных координат системы при переходе из /> в />.

/>

Рис.20. График оптимального управления />.

 

Выводы: Задача перевода системы изначальной точки в конечную с помощью L-проблемы моментов в пространствесостояний и в пространстве вход-выход была решена с точностью до 12-го знакапосле запятой. Результаты, полученные при переводе системы из начальной точки вконечную, полностью совпадают.


4. Нахождениеоптимального управления с использованием грамиана управляемости (критерий –минимизация энергии)

Система имеет вид:

/>

с начальными условиями:

/>, />

/>.

Составим матрицууправляемости и проверим управляемость системы:

/>

/>

/>.

Составим грамиануправляемости для данной системы:

/>

Найдем грамиан поформуле:

/>

/>

Тогда управление имеетвид:

/>.

или

/>

Ниже представлен графикоптимального управления полученного с помощью скрипта Gramian_Uprav.m.:

/>

Рис.21. График оптимального управления />.

Графики фазовыхкоординат аналогичны, как и в оптимальной L– проблеме моментов.

Сравним управление, полученноев начальной и конечной точках в пунктах 3 и 4 соответственно:

/> и />

 

Выводы: Как видно, значения граничныхуправлений совпадают. А это значит, что задача перевода объекта из начальногосостояния в конечное решена с высокой степенью точности и с минимальнойэнергией.

Графическое сравнениеоптимальных управлений из пунктов 3 и 4:

 

/>

Рис.21. Сравнение графиков оптимальногоуправления />.

 
5. Аналитическое конструированиеоптимальных регуляторов (АКОР)5.1 Стабилизации объектауправления на полубесконечном интервале времени

Рассмотрим линейныйобъект управления, описываемый системой дифференциальных уравнений в нормальнойформе

/>

Необходимо получить законуправления

/>

минимизирующий функционал вида

/>

Начальные условия для заданнойсистемы />

Моменты времени /> фиксированы. Матрицы /> — симметричные неотрицательноопределенные:

/>

матрица /> —положительно определенная:

/>

Матричноедифференциальное уравнение Риккати имеет вид:

/>

Если линейная стационарнаясистема является полностью управляемой и наблюдаемой, то решениеуравнения Риккати при /> стремится кустановившемуся решению /> независящему от /> и определяетсяследующим алгебраическим уравнением:

/>

В рассматриваемом случаевесовые матрицы /> и /> в функционале не зависятот времени.

Оптимальное значениефункционала равно

/>

и является квадратичной функцией отначальных значений отклонения вектора состояния.

Таким образом, получаем,что при /> оптимальное управлениеприобретает форму стационарной обратной связи по состоянию

/>

где /> —решение алгебраического матричного уравнения Риккати.


5.1.1.Решение алгебраического уравнения Риккати методом диагонализации

Для решения данной задачинайдем весовые матрицы /> и />:

Выберем произвольно />, тогда

/>

Взяв значения /> из решения задачи L – проблемы моментов получим:

/>

/>

Матрицы системы имеют вид:

/>/>, />.

Введем расширенный векторсостояния />.

Тогда матрица Zбудет иметь следующий вид: />,

или в численном виде

/>.

Собственные значения матрицы/>: />.

Зная собственные значенияи собственные вектора матрицы Z,построим матрицу />

/>

По определению всерешения должны быть устойчивы при любых начальных условиях />, т.е. при />. Чтобы не оперироватькомплексными числами, осуществим следующий переход. Пусть:

/>

Тогда матрица /> формируется следующимобразом:

/>.

Можно показать, чтоматрицу можно получить из прямой матрицы собственных векторов:

/>,

/>.

Установившееся решениеуравнения Риккати, полученное с помощью скрипта Solve_Riccati_Method_Diag.m. имеетвид:

/>

5.1.2 Решениеалгебраического уравнения Риккати интегрированием в обратном времени доустановившегося состояния

Весовые матрицы />и />такие же как и в пункте(5.1.1).

Матрицы /> тоже аналогичны.

Запишем уравнение Риккати

/>.

Зная, что />, решаем уравнение методомобратного интегрирования на достаточно большом интервале (примерно 10 с.),получим установившееся решение с помощью скрипта

Solve_Riccati_Method_Revers_Integr.m.:

/>

/>

Рис.22. Графики решения уравнения Риккати.


Найдем разницу междурешениями уравнения Риккати в пунктах 5.1.1 и 5.1.2:

/>

Выводы: сравнивая решения полученные впунктах 5.1.1 и 5.1.2 можно сказать, что решения уравнения Риккати первым ивторым методами совпадают с заданной точностью. Погрешность расхождения решенийневелика.

Используя скрипт AKOR_stabilizaciya_na_polybeskon_interval.m получим коэффициенты регулятора, фазовые координаты системыи управление.

/>

Рис.23. Графики коэффициентов регулятораобратной связи.


/> 

/>

/> />

/>

Рис.24. Графики фазовых координат.

/>

Рис.25. График управления.

Выводы: т.к. решения уравнения Риккатиметодом диагонализации и интегрирования в обратном времени дают практическиодинаковый результат, то можно считать, что задача АКОР – стабилизации наполубесконечном интервале решена с заданной точностью.

5.2 Стабилизации объектауправления на конечном интервале времени

Рассмотрим линейныйобъект управления, описываемый системой дифференциальных уравнений в нормальнойформе

/>

Начальные условия для заданнойсистемы />

Время стабилизации />.

Необходимо получить законуправления

/>

минимизирующий функционал вида

/>

Закон оптимальногоуправления в данной задаче имеет вид

/>

Матричное дифференциальное уравнениеРиккати будет иметь следующий вид:

/>

Еслиобозначить /> то можно записать

/>

Уравнение замкнутойскорректированной системы примет вид

/>


Матрицы />заданыв пункте 5.1.1.

Весовые матрицы />и />имеют следующий вид:

/>, />.

Используя скрипт AKOR_stabilizaciya_na_konech_interval.m получили следующие результаты:

/>

Рис.26. Графики решения уравнения Риккати.

/>

Рис.27. Графики коэффициентов регулятораобратной связи.


/>/>/>/>

/>

Рис.28. Графики фазовых координат.


/>

Рис.29. График управления.

Сравним, как стабилизируетсясистема управления с постоянными и переменными коэффициентами регулятораобратной связи на начальном этапе:

/>/>

/>/>

/>

Рис.30. Графики фазовых координат.

Выводы: из графиков видно, что система, укоторой коэффициенты регулятора меняются со временем, стабилизируется не хуже,чем, система, у которой коэффициенты регулятора не изменяются.

5.3 Задача АКОР – стабилизации длякомпенсации
известного возмущающего воздействия

Рассмотрим систему вида

/>,

где /> – возмущающеевоздействие.

Матрицы />заданы в пункте 5.1.1.

Весовые матрицы />и />имеют следующий вид:

/>, />.

Начальные условия для заданнойсистемы />.

Время стабилизации />.

Задаем возмущающеевоздействие только на первую координату, так как только она имеет значение

/> и />.

Решение задачистабилизации сводится к решению уравнения Риккати

/>

с начальными условиями: />

Введём вспомогательнуювектор-функцию />, ДУ которой имеетвид:

/>

с начальными условиями: />.

Управление определяетсяпо формуле:

/>.

Используя скрипт AKOR_stabilizaciya_pri_vozmusheniyah.m, получили следующие результаты:


/>

Рис.31. Графики решения уравнения Риккати.

/>/>

Рис.32. Графики коэффициентов регулятораобратной и прямой связи.


/>

Рис.33. График возмущающего воздействия.

/>

Рис.34. График вспомогательной вектор –функции.

/>

/>

/>

/>

/>

Рис.35. Графики фазовых координат.

/>

Рис.36. График управления.

/>

Рис.37. График возмущающего воздействия.

/>

Рис.38. График вспомогательной вектор –функции.

/>

/> 

/> />

/>

Рис.39. Графики фазовых координат.

/>

Рис.40. График управления.

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

 

5.4 Задача АКОР для отслеживанияизвестного задающего воздействия. I подход

Система задана в виде:

/>

Матрицы />заданы в пункте 5.1.1.

Весовые матрицы />и />имеют следующий вид:

/>, />.

Начальные условия для заданнойсистемы />.

Время слежения />.

Задающее воздействие ввиде системы ДУ

/>

Начальные условия длявоздействия:

/>.

Введем расширенный векторсостояния и расширенные матрицы />

/>,

/>,

/>.

Тогда новое описаниесистемы имеет вид:

/>

с начальными условиями: />.

Решением уравненияРиккати будет матрица:

/>

с н.у./>

Тогда оптимальноеуправление, находится по формуле:

/>

Используя скрипт AKOR_slegenie_na_konech_interval_I_podxod, получили следующие результаты:

/>

Рис.41. Графики решения уравнения Риккати.

/>/>

Рис.42. Графики коэффициентов регулятораобратной и прямой связи.

/>/>

/>/>

/>

Рис.43. Графики фазовых координат.

/>

Рис.44. График управления.

Выводы: На данном этапе была решеназадача АКОР-слежения. В качестве отслеживаемого воздействия была взята исходнаясистема, но с другими начальными условиями, поэтому графики фазовых координатотличаются от заданных, но только на начальном участке движения.

5.5 Задача АКОР для отслеживанияизвестного задающего воздействия. II подход (линейный сервомеханизм)

Система задана в виде:

/>

Матрицы />заданы в пункте 5.1.1.

Весовые матрицы />и />имеют следующий вид:

/>, />.

Начальные условия для заданнойсистемы />.

Задающее воздействиеимеет вид:

/>, />.

Время слежения />

Введём вспомогательнуювектор-функцию />, ДУ которойопределяется />

/>,

/>,

НУ определяются изсоотношения


/>

Зная закон изменения /> и />, можно определитьуправление:

/>.

Используя скрипт AKOR_slegenie_na_konech_interval_II_podxod, получили следующие результаты:

/>

Рис.45. Графики решения уравнения Риккати.

/>

Рис.46. График задающего воздействия.

/>/>

Рис.47. Графики коэффициентов регулятораобратной и прямой связи.

/>/>

/>/>

/>

Рис.48. Графики фазовых координат.

/>

Рис.49. График управления.


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

5.6 Задача АКОР – слежения соскользящими интервалами

Пусть интервал времени /> является объединениемнескольких отрезков. Известно некоторое задающее воздействие /> заданное аналитическимвыражением, причем информация о задающем сигнале на следующем отрезке временипоступает только в конце предыдущего. Таким образом, зная задающий сигналтолько на одном отрезке времени, мы будем синтезировать управление на этомотрезке.

Разобьем весь интервал на3 равных отрезка.

Данная задача похожа назадачу отслеживания известного задающего воздействия, заданного аналитическимвыражением, но с некоторыми изменениями:

1.      Поскольку в уравнение Риккатиотносительно матрицы /> входят толькопараметры системы и функционала качества, то решать его будем один раз напервом отрезке, так как на остальных отрезках решение будет иметь тот же вид, нобудет смещено по времени:

/>

/>

/>/>

2.      Начальными условиями длясистемы на каждом отрезке будет точка, в которую пришла система на предыдущемотрезке:

/>

/>

/>/>

3.      Вектор /> необходимо пересчитыватьна каждом отрезке.

4.      В остальном данная задачааналогична задаче построения линейного сервомеханизма (пункт 5.5).

Используя скрипт AKOR_slegenie_so_skolz_intervalami_Modern, получили следующие результаты:

/>

Рис.50. Графики решения уравнения Риккати.

/>/>

/>

/>

/>

Рис.51. Графики фазовых координат.

/>

Рис.52. График управления.

Выводы: при сравнении полученныхрезультатов, можно сказать, что различия в фазовых координатах при наличии трехучастков и при наличии одного участка несущественные. Если сравнивать скорость вычисленийи используемые ресурсы, то скорость увеличивается почти в 3 раза, а памятитребуется в 3 раза меньше для решения поставленной задачи. В точках соединенияучастков наблюдаются скачки, связанные с тем, что требуется значительныезатраты на управление, но для первой координаты этот скачок незначительный.


6. Синтез наблюдателяполного порядка

Наблюдателями называютсядинамические устройства, которые позволяют по известному входному и выходномусигналу системы управления получить оценку вектора состояния. Причем ошибкавосстановления />.

Система задана в виде:

/>

Начальные условия для заданнойсистемы />.

Матрицы />заданы в пункте 5.1.1.

Весовые матрицы />и />имеют следующий вид:

/>, />.

Построим наблюдательполного порядка и получим значения наблюдаемых координат /> таких, что: />

/>

В качестве начальныхусловий для наблюдателя выберем нулевые н.у.:

/>

Ранг матрицы наблюдаемости:

/> - матрица

наблюдаемости.

/>.

/>.

Т. е. система являетсянаблюдаемой.

Коэффициенты регулятора:

/>,

тогда

/>

Собственные значенияматрицы />:

/>

Коэффициенты наблюдателявыберем из условия того, чтобы наблюдатель был устойчивым, и ближайший к началукоординат корень матрицы /> лежалв 3 – 5 раз левее, чем наиболее быстрый корень матрицы />. Выберем корни матрицы

 />

Коэффициенты матрицынаблюдателя:

/>.

Используя скрипт Sintez_nablyud_polnogo_poryadka, получили следующие результаты:

/>

Рис.53. Графики решения уравнения Риккати.

/>/>

/>/>

/>

Рис.54. Графики фазовых координат.

/>

Рис.55. Графики управлений.

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


Литература

1. Методыклассической и современной теории автоматического управления: Учебник в 5 – ит. Т.4: Теория оптимизации систем автоматического управления / Под ред.Н.Д. Егупова. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2004. – 748 с.

2. КраснощёченкоВ.И.: Методическое пособие: «Методы теории оптимального управления».


Приложение.

 PlotTimeFrHaract.m

clc

clear all

close all

b1 = 9;

b0 = 5;

 

a4 = 0.1153;

a3 = 1.78;

a2 = 3.92;

a1 = 14.42;

a0 = 8.583;

 

% syms s w

% W_s_chislit = b1 * s + b0;

% W_s_znamen = s * (a4 * s^4 + a3 * s^3 + a2 * s^2 + a1 * s + a0);

%

% W_s_obj = W_s_chislit/W_s_znamen;

 

%A_w = collect(simplify(abs(subs(W_s_obj, s, i*w))))

 

%----------------------Построение АЧХ-------------------------------------%

figure('Name', '[0,10]');

w = 0: 0.01: 10;

A_w = sqrt((b0^2 +b1^2.*w.^2)./((-a1*w.^2+a3*w.^4).^2+(a0*w-a2*w.^3+a4*w.^5).^2));

plot(w,A_w,'k', 'LineWidth', 2);

grid on

xlabel('w')

ylabel('A(w)')

title('Function ACHX(w)')

%-------------------------------------------------------------------------%

 

r_ch = roots([b1 b0])

r_zn = roots([a4 a3 a2 a1 a0 0])

 

%----------------------Построение ФЧХ-------------------------------------%

figure('Name', '[0,100]');

w = 0: 0.01: 100;

fi_w =(atan(w/0.5556)-atan(w/0)-atan(w/13.5832)-atan((w-2.7677)/0.5850)...

-atan((w+2.7677)/0.5850) — atan(w/(0.6848)))*180/pi;

plot(w,fi_w, 'k', 'LineWidth', 2);

grid on

xlabel('w')

ylabel('fi(w)')

title('Function FCHX(w)')

%-------------------------------------------------------------------------%

 

%----------------------Построение АФЧХ------------------------------------%

figure('Name', '[0,100]');

w = 0: 0.01: 100;

A_w = sqrt((b0^2 +b1^2.*w.^2)./((-a1*w.^2+a3*w.^4).^2+(a0*w-a2*w.^3+a4*w.^5).^2));

fi_w =(atan(w/0.5556)-atan(w/0)-atan(w/13.5832)-atan((w-2.7677)/0.5850)...

-atan((w+2.7677)/0.5850) — atan(w/(0.6848)));

polar(fi_w,A_w, 'k');

grid on

xlabel('Re(W(jw))')

ylabel('Im(W(jw))')

title('Function AFCHX(fi_w,A_w)')

%-------------------------------------------------------------------------%

 

%----------------------Построение ЛАЧХ------------------------------------%

figure('Name', '[0,100]');

w = -100: 0.01: 100;

LA_w = 20*log(sqrt((b0^2 +b1^2.*w.^2)./((-a1*w.^2+a3*w.^4).^2+(a0*w-a2*w.^3+a4*w.^5).^2)));

plot(w,LA_w,'k', 'LineWidth', 2);

grid on

xlabel('w')

ylabel('L(w)')

title('Function L(w)')

%-------------------------------------------------------------------------%

 

%----------------------ПостроениеФАЧХ------------------------------------%

%-------------------------------------------------------------------------%

 

%----------------------Построениеh(t)------------------------------------%

figure('Name', '[0,50]');

t = 0: 0.01: 50;

h_t = 0.0024 * exp(-13.5832.*t) — 0.2175 * exp(-0.6848.*t)...

+ 0.1452 * exp(-0.5850.*t).* cos(2.7677.*t)...

— 0.2217 * exp(-0.5850.*t).* sin(2.7677.*t)...

+ 0.5825 .* t + 0.0699;

plot(t,h_t, 'k', 'LineWidth', 2);

grid on

xlabel('t')

ylabel('h(t)')

title('Function h(t)')

%-------------------------------------------------------------------------%

 

%----------------------Построение k(t)------------------------------------%

figure('Name', '[0,50]');

t = 0: 0.01: 50;

k_t = — 0.0329 * exp(-13.5832.*t) + 0.1489 * exp(-0.6848.*t)...

— 0.6986 * exp(-0.5850.*t).* cos(2.7677.*t)...

— 0.2721 * exp(-0.5850.*t).* sin(2.7677.*t)...

+ 0.5826;

plot(t,k_t, 'k', 'LineWidth', 2);

grid on

xlabel('t')

ylabel('k(t)')

title('Function k(t)')

%-------------------------------------------------------------------------%

 

x1=tf([b1 b0],[a4 a3 a2 a1 a0 0]);

ltiview(x1)

ProstranstvoSostoyanii.m

clc

clear all

 

%format rational

 

b1 = 9;

b0 = 5;

 

a5 = 0.1153;

a4 = 1.78;

a3 = 3.92;

a2 = 14.42;

a1 = 8.583;

a0 = 0;

 

%1. Матрица Фробениуса

<p/>

A=[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0;

0 0 0 0 1;

0 -a1/a5 -a2/a5 -a3/a5 -a4/a5]

 

B=[0; 0; 0; 0; 1/a5]

 

C=[b0b1 0 0 0]

%Проверка

syms s

W_s = collect(simplify(C*(s.*eye(5)-A)^(-1)*B),s)

pretty(W_s)

 

%2.Параллельная декомпозиция

<p/>

b1 = b1/a5;

b0 = b0/a5;

 

 

s1 = 0;

s2 = -6615/487;

s3 = -1022/1747 + 4016/1451*i;

s4 = -1022/1747 — 4016/1451*i;

s5 = -415/606;

 

alfa = real(s3);

beta = imag(s3);

 

syms s A B C D E

 

W_s_etal =collect(((b1*s+b0)/((s-s1)*(s-s2)*((s+alfa)^2+beta^2)*(s-s5))),s)

%pretty(W_s_etal)

 

Slag_1 = simplify(collect(A*(s-s2)*((s+alfa)^2+beta^2)*(s-s5),s));

Slag_2 = simplify(collect(B*(s-s1)*((s+alfa)^2+beta^2)*(s-s5),s));

Slag_3 = simplify(collect(C*(s-s1)*((s+alfa)^2+beta^2)*(s-s2),s));

Slag_4 = simplify(collect((D*s+E)*(s-s1)*(s-s2)*(s-s5),s));

 

Chislit_W_s =collect(Slag_1 + Slag_2 + Slag_3 + Slag_4,s);

 

%Решениесистемы линейных уравнений

 

MS=double( [1 1 1 1 0;

6753029497/515578134 -513659/1058682 10560977/850789 4210795/295122 1;

77456808434995506239663107/1267643668377615333788221441874500571398143988939141/260296441145300889894912-3300780600401725219142291/418364246989311991349248 915075/983744210795/295122;

26189071674868424275768861465/2535287336755230667576442882853037197681682345182805/52059288229060177978982445476725452203201718998205/418364246989311991349248 0 915075/98374;

6290947020888109571128085025/84509577891841022252548096 0 0 0 0])

 

PCH = [0; 0; 0; b1; b0];

 

Koeff = MS^(-1)*PCH

 

%Проверка

MS*[Koeff(1);Koeff(2);Koeff(3);Koeff(4);Koeff(5)];

 

Slag_1 = simplify(collect(Koeff(1)*(s-s2)*((s+alfa)^2+beta^2)*(s-s5),s));

Slag_2 = simplify(collect(Koeff(2)*(s-s1)*((s+alfa)^2+beta^2)*(s-s5),s));

Slag_3 = simplify(collect(Koeff(3)*(s-s1)*((s+alfa)^2+beta^2)*(s-s2),s));

Slag_4 = simplify(collect((Koeff(4)*s+Koeff(5))*(s-s1)*(s-s2)*(s-s5),s));

 

Chislit_W_s =collect((Slag_1 + Slag_2 + Slag_3 + Slag_4),s);

Znamena_W_s = collect((s-s1)*(s-s2)*((s+alfa)^2+beta^2)*(s-s5),s);

 

W_s =collect(simplify(Koeff(1)/(s-s1)+Koeff(2)/(s-s2)+(Koeff(4)*s+Koeff(5))/((s+alfa)^2+beta^2)+Koeff(3)/(s-s5)),s)

pretty(W_s)

%Расчетматриц состояния

A = [s1 0 0 0 0;

0 s2 0 0 0 ;

0 0 0 1 0;

0 0 -(alfa^2+beta^2) -2*alfa 0;

0 0 0 0 s5]

 

B = [Koeff(1); Koeff(2); 0; 1; Koeff(3)]

 

C = [1 1 Koeff(5) Koeff(4) 1]

 

%Проверка

W_s = collect(simplify(C*(s.*eye(5)-A)^(-1)*B),s)

pretty(W_s)

 

%ВСЕПОДСЧИТАНО ВЕРНО!!!

SimplexMetod2.m

function SimplexMetod2

clc

clear all

close all

format short

 

<p/>

%Матрицы системы

A =[0 2;

-30];

 

B =[0; 2];

 

%Координаты начальной и конечной точки

X_0 =[14; 0];

X_N =[0; 0];

 

%Ограничение на управление

u_m =-3;

u_p =5;

 

eps =1e-10;% погрешность сравнения с нулем

<p/>

N =195;% число шагов

%h =t1/N;% шаг дискретизации

h =0.0162;

alfa= 1;

a =0;

b =0;

 

%t1 =796/245;% время перехода в конечное состояние

n =size(A);

n =n(1);% порядок системы

 

%Нахождение матричного экспоненциала

symss t

MatrEx = ilaplace((s*eye(n)-A)^(-1));

MatrEx_B= MatrEx*B;

 

%Вычисление матриц F и G

F = subs(MatrEx, t, h);

G = double(int(MatrEx_B, t, 0, h));

 

ФОРМИРОВАНИЕЗАДАЧИ БЫСТРОДЕЙСТВИЯ КАК ЗАДАЧИ

ЛИНЕЙНОГОПРОГРАММИРОВАНИЯ

<p/>

 

forindex = 1: 1e+10

 

% Вычислениеправой части

PravChast= X_N — F^N * X_0;

 

%Вычисление произведения F на G

FG =zeros(n, N);% формирование матрицы для хранения данных

for j = 1: n

for i = 0: N — 1

fg = F^(N-i-1) * G;

if PravChast(j) < 0

fg = -fg;

end

FG(j, i+1) = fg(j);

end

end

 

%Построение z-строки

z_stroka= zeros(1, 4*N+n+2);% формирование матрицы для хранения данных

%Первый элемент z-строки

z_stroka(1)= 1;

%Суммирование правых частей

for j= 1: n

z_stroka(4*N+n+2) = z_stroka(4*N+n+2) + abs(PravChast(j));

end

% Формированиеэлементов z-строки между 1-м и последним элементами

%при2N небазисных переменных, т.е. при управлениях

for i = 2: 2: 2 * N

for j = 1: n

z_stroka(i) = z_stroka(i) + FG(j, i/2);

end

for j = 1: n

z_stroka(i+1) = z_stroka(i+1) — FG(j, i/2);

end

end

 

%Формирование симплекс-таблицы

CT =zeros(n+2*N+1, 4*N+n+2);

%Построение симплекс-таблицы начиная с z-строки

CT(1,:)= z_stroka(1,:);

 

%Формирование R-строк в симплекс-таблице

for j= 2: n + 1

%Формирование правой части в R-строках

CT(j, 4*N+n+2) = abs(PravChast(j-1));

%Формирование элементов R-строк между 1-м и последним элементами

%при2N небазисных переменных, т.е. при управлениях

for i = 2: 2: 2 * N

CT(j, i) = FG(j-1, i/2);

CT(j, i+1) = -FG(j-1, i/2);

end

end

 

%Формирование S-строк в симплекс-таблице

l =2;

for j= n + 2: 2: n + 2 * N + 1

%Формирование правой части в S-строках

CT(j, 4*N+n+2) = u_p;

CT(j+1, 4*N+n+2) = abs(u_m);

%Формирование элементов S-строк между 1-м и последним элементами

%при2N небазисных переменных, т.е. при управлениях

CT(j, l: l+1) = [1 -1];

CT(j+1, l: l+1) = [-1 1];

l = l+ 2;

end

 

%Формирование базиса в симплекс-таблице, т.е коэффициентов, стоящих при

%базисныхпеременных от 2N небазисных переменных до правой части (до 4*N+n+1)

CT(2: n+2*N+1, 2*N+2: 4*N+n+1) = eye(n+2*N, n+2*N);

<p/><p/>

РЕШЕНИЕЗАДАЧИ БЫСТРОДЕЙСТВИЯ

<p/><p/>

 

%Цикл смены базисных переменных

nn =size(find(CT(1,2:2*N+1) >= eps));

while nn > 0

[znach, N_stolb] = max(CT(1, 2: 2*N+1));

N_stolb= N_stolb + 1; % т.к. при небазисн. перемен.

PravChast = CT(:, 4*N+n+2);

for j = 2: n + 2 * N + 1

 if CT(j, N_stolb) > 0

 PravChast(j) = PravChast(j) / CT(j, N_stolb);

 else

 PravChast(j) = inf;

 end

end

[znach, N_str] = min(PravChast(2: n+2*N+1));

N_str= N_str + 1;

%Формирование матрицы перехода B

B = eye(n+2*N+1, n+2*N+1);

B(:, N_str) = CT(:, N_stolb);

%Обращение матрицы B

RE =B(N_str, N_str);

for j = 1: n + 2 * N + 1

if j == N_str

B(j, N_str) = 1 / RE;

else

B(j, N_str) = -B(j, N_str) / RE;

end

end

%B = inv(B);

%Получение новой симплекс таблицы

CT =B * CT;

nn = size(find(CT(1,2:2*N+1) >= eps));

end

 

u =zeros(1,N);

%Формирование управления

for j = 2: n + 2 * N + 1

for i = 2: 2 * N + 1

if CT(j, i) >= eps

if mod(i, 2) < eps

u(i/2) = CT(j, 4*N+n+2);

else

u((i-1)/2) = -CT(j, 4*N+n+2);

end

end

end

end

 

%Формирование x1 и x2

X = zeros(n, N);

X(:, 1) = F * X_0 + G * u(1);

for i = 2: N

X(:, i) = F * X(:, i-1) + G * u(i);

end

 

%Объединение с начальными условиями

X1 =[X_0(1) X(1, :)];

X2 =[X_0(2) X(2, :)];

<p/>

 

%проверка на окончание выбора количества шагов

XX =[X_0 X];

 

%Вычисление нормы вектора состояния

normaXX= norm(XX(:,N))

 

% Вычислениезначения переменной R

R = abs(X_N — F^N * X_0) — FG * u';

R =R';

z =sum(R);

 

%Погрешность приближения к точному решению

pogresh = 0.3;

 

if (normaXX < pogresh)

N_opt = N;

break;

else

if (z > h)

if a == 1

alfa = ceil(alfa/2);

end

N = N + alfa;

a = 0;

b = 1;

else

if b == 1

alfa = ceil(alfa/2);

end

N = N — alfa;

a = 1;

b = 0;

end

end

t_perevoda = N * h;

end

N_opt

h

t_perevoda

ОФОРМЛЕНИЕПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ

ВГРАФИЧЕСКОМ ВИДЕ

<p/>

 

%Построение графика x1(t);

figure(1)

t = (0: 1: length(X1)-1) * h;

plot(t, X1, 'b', 'LineWidth', 2);

hl=legend('x_1(t)');

set(hl, 'FontName', 'Courier');

xlabel('t, cek'); ylabel('x_1(t)');

gridon

 

%Построение графика x2(t);

figure(2)

t = (0: 1: length(X2)-1) * h;

plot(t, X2, 'b', 'LineWidth', 2);

hl=legend('x_2(t)');

set(hl, 'FontName', 'Courier');

xlabel('t, cek'); ylabel('x_2(t)');

gridon

 

%Построение графика x2 = x2(x1);

figure(3)

plot(X1, X2, 'm', 'LineWidth', 2);

hl=legend('x_2 = x_2(x_1)');

set(hl, 'FontName', 'Courier');

xlabel('x_1(t)'); ylabel('x_2(x_1(t))');

gridon

 

%Построение графика u(t)

figure(4)

t = (0: 1: length(u)-1) * h;

plot(t, u, 'r', 'LineWidth', 2);

hl=legend('u(t)');

set(hl, 'FontName', 'Courier');

xlabel('t, cek'); ylabel('u(t)');

grid on

<p/>Optimal_L_problem_moments.m

clc

close all

clear all

format long

 

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

%------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%Порядок системы

poryadok= 5;

%Начальные и конечные условия относительно вектора Y

Y_0 =[3 2 1 5]';

Y_T =[0 -1 0 3]';

%Конечное время перехода

T =3;

%Матрица перехода от Н.У. Y к Н.У. X

B_ =[b0 b1 0 0 0;

 0 b0b1 0 0;

 0 0 b0b1 0;

 0 0 0b0 b1];

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Начальные условия для упорядоченной системы

X_0 = B_' * inv(B_ * B_') * Y_0

X_T = B_' * inv(B_ * B_') * Y_T

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 10 0;

0 0 01 0

0 0 00 1;

-a0-a1 -a2 -a3 -a4]

B =[0; 0; 0; 0; 1]

C =[b0 b1 0 0 0]

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Вычисление матричной экспоненты

syms s t

MatrEx = simplify (vpa(ilaplace(inv(s*eye(5) — A)), 50))

%------------------------------------------------------------------------%

 

RETURN= 1;

 

whileRETURN == 1

disp('L- проблема моментов в пространстве вход-выход: 1')

disp('L- проблема моментов в пространстве состояний: 2')

reply= input('Выберете метод решения [1 или 2]: ', 's');

 

switchreply

 case'1'

 disp('L- проблема моментов в пространстве вход-выход')

%------------------------L — проблема моментов---------------------------%

%----------------------в пространстве вход-выход-------------------------%

%------------------------------------------------------------------------%

% Передаточная функция

W_obj_s = 1/(a5*s^5 + a4*s^4 + a3*s^3 + a2*s^2 + a1*s + a0);

% Полюса передаточной функции

polyusa_TF = roots([a5 a4 a3 a2 a1 a0]);

% ИПФ

K_t = simplify (vpa (ilaplace(1 / (a5*s^5 + a4*s^4 + a3*s^3 + ...

 a2*s^2 + a1*s + a0)),50))

% K_t = vpa(K_t,6)

%------------------------------------------------------------------------%

%Составление матрицы Вронского

for i= 1: poryadok

Matrix_Vron (i, 1) = diff (exp (polyusa_TF(1) *t), t, i — 1);

Matrix_Vron (i, 2) = diff (exp (polyusa_TF(2) *t), t, i — 1);

Matrix_Vron (i, 3) = diff (exp (real(polyusa_TF(3))*t) * ...

cos(imag(polyusa_TF(3))*t), t, i — 1);

Matrix_Vron (i, 4) = diff (exp (real(polyusa_TF(4))*t) * ...

sin(imag(polyusa_TF(4))*t), t, i — 1);

Matrix_Vron (i, 5) = diff (exp (polyusa_TF(5) *t), t, i — 1);

end

%Матрица Вронского при t = 0;

Matrix_Vron_t_0 = double(subs(Matrix_Vron,t,0));

%Матрица Вронского при t = T;

T = 3;

Matrix_Vron_t_T = double(subs(Matrix_Vron,t,T));

%vpa(Matrix_Vron_t_0,6)

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Определение неизвестных коэффициентов C

C_ = inv(Matrix_Vron_t_0) * X_0;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение моментных функций

K_Tt_1= subs (K_t,t, T — t);

 

K_Tt = diff (K_t);

K_Tt_2 = subs (K_Tt, t, T — t);

 

K_Ttt = diff (K_Tt);

K_Tt_3 = subs (K_Ttt, t, T — t);

 

K_Tttt = diff (K_Ttt);

K_Tt_4 = subs (K_Tttt, t, T — t);

 

K_Ttttt = diff (K_Tttt);

K_Tt_5 = subs (K_Ttttt, t, T — t);

 

h1_Tt = K_Tt_1

h2_Tt = K_Tt_2

h3_Tt = K_Tt_3

h4_Tt = K_Tt_4

h5_Tt= K_Tt_5

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение моментов

for i = 1: poryadok

Matrix_a(i) = X_T(i) — C_' * Matrix_Vron_t_T(i,:)';

end

Matrix_a = Matrix_a'

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

RETURN= 2;

 case'2'

 disp('L- проблема моментов в пространстве состояний')

%------------------------L — проблема моментов---------------------------%

%----------------------в пространстве состояний--------------------------%

% ------------------------------------------------------------------------%

Matr_Ex_T = subs(MatrEx, t, T);

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

% Нахождение моментов

for i = 1: poryadok

Matrix_a(i) = X_T(i) — Matr_Ex_T(i,:) * X_0;

end

Matrix_a = Matrix_a'

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

% Нахождение моментных функций

Matr_Ex_Tt = subs(MatrEx, t, T — t);

 

h_Tt = vpa(expand(simplify(Matr_Ex_Tt * B)),50);

h1_Tt = h_Tt(1)

h2_Tt = h_Tt(2)

h3_Tt = h_Tt(3)

h4_Tt = h_Tt(4)

h5_Tt = h_Tt(5)

%------------------------------------------------------------------------%

% ------------------------------------------------------------------------%

%------------------------------------------------------------------------%

RETURN = 2;

otherwise

 disp('Неизвестныйметод.')

 RETURN = 1;

end

end

 

% h1_Tt = vpa(h1_Tt,6)

% h2_Tt = vpa(h2_Tt,6)

% h3_Tt = vpa(h3_Tt,6)

% h4_Tt = vpa(h4_Tt,6)

% h5_Tt = vpa(h5_Tt,6)

%------------------------------------------------------------------------%

%--------Нахождение управления и вычисление минимальной энергии----------%

% ------------------------------------------------------------------------%

 

syms ks1 ks2 ks3 ks4 ks5

%------------------------------------------------------------------------%

% Формирование функционала

d_v_2 = vpa (simplify (int ((ks1*h1_Tt + ks2*h2_Tt + ks3*h3_Tt + ...

 ks4*h4_Tt + ks5*h5_Tt)^2, t, 0, T)), 50);

% Выражаем ks1 через остальные

ks1 = vpa ((1 — ks2*Matrix_a(2) — ks3*Matrix_a(3) — ...

 ks4*Matrix_a(4) — ks5*Matrix_a(5))/Matrix_a(1), 50);

%Подставляем в функционал ks1

d_v_2= vpa (expand (subs (d_v_2, ks1)), 50);

%Находим частные производные по ksi

eq_1= diff(d_v_2, ks2);

eq_2= diff(d_v_2, ks3);

eq_3= diff(d_v_2, ks4);

eq_4= diff(d_v_2, ks5);

%Решаем СЛАУ относительно ksi

ksi=solve(eq_1, eq_2, eq_3, eq_4);

%Полученные значения ksi

ks2=double(ksi.ks2)

ks3= double(ksi.ks3)

ks4= double(ksi.ks4)

ks5= double(ksi.ks5)

ks1 = double(vpa ((1 -ks2*Matrix_a(2) -ks3*Matrix_a(3) -ks4*Matrix_a(4) — ...

ks5*Matrix_a(5))/Matrix_a(1), 50))

%------------------------------------------------------------------------%

% ------------------------------------------------------------------------%

%Проверка условия полученного результата

 ks1*Matrix_a(1) +ks2*Matrix_a(2) +ks3*Matrix_a(3) +...

 ks4*Matrix_a(4) +ks5*Matrix_a(5)

% ------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Вычисление управления и минимальной энергии

d_v_2= vpa (simplify (int ((ks1*h1_Tt + ks2*h2_Tt + ks3*h3_Tt + ...

 ks4*h4_Tt + ks5*h5_Tt)^2,t, 0, T)), 50)

% d_v_2 = double(d_v_2)

gamma_v_2 = 1/d_v_2

% gamma_v_2 = double(gamma_v_2)

u = vpa (expand(simplify(gamma_v_2 * (ks1*h1_Tt + ks2*h2_Tt + ks3*h3_Tt +...

 ks4*h4_Tt + ks5*h5_Tt))), 50)

% u = vpa(u,6)

u_0 = subs(u,t,0)

u_T = subs(u,t,T)

ezplot(u, [0 T], 1)

hl=legend('u(t)');

set(hl, 'FontName', 'Courier');

title ('u(t)');

xlabel('t')

grid on

%------------------------------------------------------------------------%

% ------------------------------------------------------------------------%

% Нахождения X

% Вычисление матричной экспоненты

MatrEx = simplify (vpa(ilaplace(inv(s*eye(5) — A)), 50));

 

syms t tay

X_svob = MatrEx * X_0;

X_vinyg = int ((subs(MatrEx, t, t — tay))*B*(subs (u, t, tay)), tay,0,t);

X_real = X_svob + X_vinyg;

 

save Sostoyaniya X_real u

 

X_real = vpa (expand (simplify(X_real)), 50)

X_real_0 = double(subs (X_real, t, 0))

X_real_T = double(subs (X_real, t, T))

% Погрешность X

delta_X_T = double(vpa(X_T — X_real_T, 50))

delta_X_0 = double(vpa(X_0 — X_real_0, 50))

 

% Нахождение Y

for i = 1: poryadok — 1

Y_real(i) = B_(i,:) * X_real;

end

Y_real = vpa (expand(simplify(Y_real')), 50)

Y_real_0 = double(subs (Y_real, t, 0))

Y_real_T = double(subs (Y_real, t, T))

% Погрешность Y

delta_Y_T = double(vpa(Y_T — Y_real_T, 50))

delta_Y_0 = double(vpa(Y_0 — Y_real_0, 50))

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Вычисление max значений для задачи АКОР

h = 0.01;

tic

tt = 0: h: T;

for i = 1: poryadok

X_max(i) = max(abs(subs(X_real(i),t,tt)));

end

U_max = max(abs(subs(u,t,tt)));

toc

save Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

% ------------------------------------------------------------------------%

%Построение результатов X(t)

ezplot(X_real(1), [0 T],2)

title ('x_1(t)');

grid on

 

ezplot (X_real(2), [0 T],3)

title ('x_2(t)');

grid on

 

ezplot (X_real(3), [0 T],4)

title ('x_3(t)');

grid on

 

ezplot (X_real(4), [0 T],5)

title ('x_4(t)');

grid on

 

ezplot (X_real(5), [0 T],6)

title ('x_5(t)');

grid on

 

%Построение результатов Y(t)

ezplot (Y_real(1), [0 T],7)

title ('y_1(t)');

grid on

 

ezplot (Y_real(2), [0 T],8)

title ('y_2(t)');

grid on

 

ezplot (Y_real(3), [0 T],9)

title ('y_3(t)');

grid on

 

ezplot (Y_real(4), [0 T],10)

title ('y_4(t)');

grid on

%------------------------------------------------------------------------%

 

Gramian_Uprav.m

clc

close all

clear all

format long

 

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

% ------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%Порядок системы

poryadok= 5;

%Начальные и конечные условия относительно вектора Y

Y_0 =[3 2 1 5]';

Y_T =[0 -1 0 3]';

%Конечное время перехода

T =3;

%Матрица перехода от Н.У. Y к Н.У. X

B_ =[b0 b1 0 0 0;

 0 b0b1 0 0;

 0 0 b0b1 0;

 0 0 0b0 b1];

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Начальные условия для упорядоченной системы

X_0 = B_' * inv(B_ * B_') * Y_0

X_T = B_' * inv(B_ * B_') * Y_T

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 10 0;

0 0 01 0

0 0 00 1;

-a0-a1 -a2 -a3 -a4];

B =[0; 0; 0; 0; 1];

C =[b0 b1 0 0 0];

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Вычисление матричной экспоненты

syms s t

MatrEx = simplify (vpa(ilaplace(inv(s*eye(5) — A)), 50));

MatrEx_T = vpa(subs(MatrEx, t, T),50);

MatrEx_Tt = vpa(subs(MatrEx, t, T-t),50);

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Вычисление матрицы управляемости

M_c =[B A*B A^2*B A^3*B A^4*B]

rank_M_c= rank(M_c); %ранк = 5 — система управляема

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Вычисление грамиана управляемости

W_Tt= double(vpa(simplify(int(MatrEx_Tt*B*B'*MatrEx_Tt',t,0,T)),50))

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Формирование управления

u =vpa(expand(simplify(B'*MatrEx_Tt'*inv(W_Tt)*(X_T-MatrEx_T*X_0))),50)

u_0 = subs(u,t,0)

u_T = subs(u,t,T)

u = vpa(u,6)

%------------------------------------------------------------------------%

ezplot(u, [0 T], 1)

title ('u(t)');

xlabel('t')

grid on

 

tt = 0: 0.01: T;

u2 = -20.605579750692850622177761310569*exp(-40.749492463732569440253455897187+13.583164154577523146751151965729*t)+19.011167813350479567880663060491*exp(-2.0544534472800777280645828326668+.68481781576002590935486094422228*t)+1.3356706538317879679656856470126*exp(-1.7550088311372150108106250409710+.58500294371240500360354168032368*t)*cos(-8.3032397968812277095785721047505+2.7677465989604092365261907015835*t)+7.2830359327562658520685140088852*exp(-1.7550088311372150108106250409710+.58500294371240500360354168032368*t)*sin(-8.3032397968812277095785721047505+2.7677465989604092365261907015835*t)-8.6096491449877801097840179781687;

u1 = subs(u2, t, tt);

u2 = subs(u, t, tt);

 

figure(2)

plot(tt,u1,'r',tt,u2,'b','LineWidth',2)

hl=legend('u(t)при решении оптимальной L-проблемы моментов','u(t) с использованием грамианауправляемости');

set(hl, 'FontName', 'Courier');

xlabel('t, cek'); ylabel('u(t)');

title('u(t)')

grid on

AKOR_stabilizaciya_na_polybeskon_interval.m

clc

clear all

close all

 

poryadok = 5;

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

% ------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0;

0 0 0 0 1;

-a0 -a1 -a2 -a3 -a4]

B = [0; 0; 0; 0; 1]

C = [b0 b1 0 0 0]

% Начальные условия

X_0 =[10; 0; 6; 4; 8]

%T =1;

 

Time= 1;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Получение max значений из файла

load Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

%Нахождение элементов матриц Q и R

r(1) = 0.1;

q(1) = 1/poryadok * r(1) * (U_max)^2 / (X_max(1))^2;

 

for i = 2: poryadok

q(i) = q(1) * (X_max(1))^2 / (X_max(i))^2;

end

Q = diag(q)

R = diag(r)

 

% Дляизменения коэффициентов

%Q(1,1) = Q(1,1);

%Q(2,2) = Q(2,2);

%Q(3,3) = Q(3,3);

%Q(4,4) = Q(4,4);

%Q(5,5) = Q(5,5);

 

Q(1,1)= Q(1,1)*1e+12;

Q(2,2)= Q(2,2)*1e+8;

Q(3,3)= Q(3,3)*1e+7;

Q(4,4)= Q(4,4)*1e+0;

Q(5,5)= Q(5,5)*1e+2;

 

R(1,1)= R(1,1);

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом диагонализации

P1 = Solve_Riccati_Method_Diag(A,B,Q,R)

%------------------------------------------------------------------------%

P_nach = zeros(poryadok, poryadok);%+ones(poryadok, poryadok);

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом обратного интегрирования

P2 = Solve_Riccati_Method_Revers_Integr(A,B,Q,R,Time,poryadok, P_nach)

%------------------------------------------------------------------------%

%Сравнение расхождения методов

Delta_P= abs(P1-P2)

%Построение графика коэффициентов регулятора

loadSolve_Riccati_Method_Revers_Integr Time_R P N_str

PP = P;

for i = 1: N_str

P = reshape(PP(i, :), poryadok, poryadok);

K(i, :) = -inv(R)*B'*P;

end

figure(2)

plot(Time_R,K(:,1),'-',Time_R,K(:,2),'-',Time_R,K(:,3),'-',Time_R,K(:,4),'-',Time_R,K(:,5),'-','LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты обратной связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_о_с','k_2_о_с','k_3_о_с','k_4_о_с','k_5_о_с',0);

set(hl,'FontName','Courier');

grid on;

 

%------------------------------------------------------------------------%

%Решение уравнения Риккати с помощью встроенной функции

% P = vpa(care(A,B,Q,R), 10)

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение коэффициентов регулятора

disp('Коэффициентырегулятора:')

K1 = -inv(R) * B' * P1

K2 = -inv(R) * B' * P2

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

A1_ =A + B * K1;

A2_ =A + B * K2;

%Вычисление матричной экспоненты

syms s t

MatrEx1 = simplify (vpa(ilaplace(inv(s*eye(5) — A1_)), 50));

MatrEx2 = simplify (vpa(ilaplace(inv(s*eye(5) — A2_)), 50));

%Нахождение координат состояния

X1 =vpa(simplify(MatrEx1 * X_0), 50);

X2 = vpa(simplify(MatrEx2 * X_0), 50);

%Нахождение управления

u1 =vpa(simplify(K1 * X1),50)

u2 = vpa(simplify(K2 * X2),50)

%------------------------------------------------------------------------%

%Построение u(t) и X(t)

T_sravneniya = 0.2;

figure(3);

tt = 0: 0.01: T_sravneniya;

uu1 = subs(u1,t,tt);

uu2 = subs(u2,t,tt);

 

plot(tt, uu1, tt, uu2, 'LineWidth', 2)

title ('u(t)');

xlabel('t')

hl=legend('u(t) — управление',0);

set(hl,'FontName','Courier');

grid on

 

ezplot(X1(1), [0 Time], 4)

hold on

title ('x_1(t)');

xlabel('t')

grid on

 

ezplot(X1(2), [0 Time], 5)

title ('x_2(t)');

xlabel('t')

grid on

 

ezplot(X1(3), [0 Time], 6)

title ('x_3(t)');

xlabel('t')

grid on

 

ezplot(X1(4), [0 Time], 7)

title ('x_4(t)');

xlabel('t')

grid on

 

ezplot(X1(5), [0 Time], 8)

title ('x_5(t)');

xlabel('t')

grid on

 

tt = 0: 0.01: T_sravneniya;

X21 = subs(X1(1), t, tt);

X22= subs(X1(2), t, tt);

X23= subs(X1(3), t, tt);

X24= subs(X1(4), t, tt);

X25= subs(X1(5), t, tt);

 

save Sravnenie_stabilizacii_1 X21 X22 X23 X24 X25 uu1

AKOR_stabilizaciya_na_konech_interval.m

clc

clear all

close all

 

poryadok = 5;

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

%------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0

0 0 0 0 1;

-a0 -a1 -a2 -a3 -a4];

B = [0; 0; 0; 0; 1];

C = [b0 b1 0 0 0];

% Начальные условия

X_0 =[10; 0; 6; 4; 8];

Time= 0.2;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Получение max значений из файла

load Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

%Нахождение элементов матриц Q и R

% r(1) = 100;

r(1) = 0.1;

q(1) = 1/poryadok * r(1) * (U_max)^2 / (X_max(1))^2;

 

for i = 2: poryadok

q(i) = q(1) * (X_max(1))^2 / (X_max(i))^2;

end

Q = diag(q);

R = diag(r);

 

% Дляизменения коэффициентов

Q(1,1)= Q(1,1)*1e+12;

Q(2,2)= Q(2,2)*1e+8;

Q(3,3)= Q(3,3)*1e+7;

Q(4,4)= Q(4,4)*1e+0;

Q(5,5)= Q(5,5)*1e+2;

 

R(1,1) = R(1,1);

% P_prib = eye(poryadok, poryadok);

% P_prib(1,1) = 100;

% P_prib(2,2) = 10;

% % P_prib(3,3) = 1000;

% % P_prib(4,4) = 10;

% % P_prib(5,5) = 1;

% ------------------------------------------------------------------------%

P_nach = zeros(poryadok, poryadok);% + P_prib;

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом обратного интегрирования

P = Solve_Riccati_Method_Revers_Integr(A,B,Q,R,Time,poryadok, P_nach)

%------------------------------------------------------------------------%

% Нахождение переменных коэффициентов регулятора

load Solve_Riccati_Method_Revers_Integr Time_R P N_str

PP = P;

for i = 1: N_str

P = reshape(PP(i, :), poryadok, poryadok);

K(i, :) = -inv(R)*B'*P;

end

%------------------------------------------------------------------------%

%Формирование вектора коэффициентов регулятора

% ирешения уравнения Риккати в прямом порядке

load Solve_Riccati_Method_Revers_Integr P

size(K)

i = 1;

len_K = length(K(:,1))

for j = len_K: -1: 1

K_pr(i,:) = K(j,:);

i = i+ 1;

end

%------------------------------------------------------------------------%

%Построение графика переменных коэффициентов регулятора в прямом времени

figure(2)

plot(Time_R,K(:,1),'-',Time_R,K(:,2),'-',Time_R,K(:,3),'-',...

Time_R,K(:,4),'-',Time_R,K(:,5),'-', 'LineWidth', 2);

grid on;

title('K(t)')

xlabel('t')

legend('k_1','k_2','k_3','k_4','k_5');

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

for k = 1: len_K

A_(:,:,k) = A + B * K(k,:);

end

size(A_);

%------------------------------------------------------------------------%

%Нахождение фазовых координат

X(:,1) = X_0;

h = 0.01;

time_X(1) = 0;

for k = 1: len_K

X(:, k+1) = X(:, k) + h * A_(:,:,k) * X(:, k);

time_X(k+1) = time_X(k) + h;

end

X(:, k+1) = [];

time_X(k+1) = [];

%------------------------------------------------------------------------%

%Нахождение управления

for k= 1: len_K

u(k) = K_pr(k,:) * X(:,k);

end

%------------------------------------------------------------------------%

%Построение u(t) и X(t)

figure(3);

plot(time_X, u, 'r-', 'LineWidth', 2)

title ('u(t)');

xlabel('t')

grid on

 

figure(4);

plot(time_X, X(1,:), 'LineWidth', 2)

hold on

title ('x_1(t)');

xlabel('t')

grid on

 

figure(5);

plot(time_X, X(2,:), 'LineWidth', 2)

title ('x_2(t)');

xlabel('t')

grid on

 

figure(6);

plot(time_X, X(3,:), 'LineWidth', 2)

title ('x_3(t)');

xlabel('t')

grid on

 

figure(7);

plot(time_X, X(4,:), 'LineWidth', 2)

title ('x_4(t)');

xlabel('t')

grid on

 

figure(8);

plot(time_X, X(5,:), 'LineWidth', 2)

title ('x_5(t)');

xlabel('t')

grid on

 

save Sravnenie_stabilizacii_2 time_X X u

Sravnenie_stabilizacii.m

close all

 

load Sravnenie_stabilizacii_1 X21 X22 X23 X24 X25 uu1

load Sravnenie_stabilizacii_2 time_X X u

 

figure(31);

plot(time_X, u, time_X, uu1, 'LineWidth', 2)

title ('u(t)');

xlabel('t')

hl=legend('u(t)- управление с перемен. коеф.','u(t) — управление с пост. коеф.');

set(hl,'FontName','Courier');

grid on

 

figure(41);

plot(time_X, X(1,:), time_X, X21, 'LineWidth', 2)

hold on

title ('x_1(t)');

xlabel('t')

hl=legend('x_1(t)- с перемен. коеф.','x_1(t) — с пост. коеф.');

set(hl,'FontName','Courier');

grid on

 

 

figure(51);

plot(time_X, X(2,:), time_X, X22,'LineWidth', 2)

title ('x_2(t)');

xlabel('t')

hl=legend('x_2(t)- с перемен. коеф.','x_2(t) — с пост. коеф.');

set(hl,'FontName','Courier');

grid on

 

figure(61);

plot(time_X, X(3,:), time_X, X23,'LineWidth', 2)

title ('x_3(t)');

xlabel('t')

hl=legend('x_3(t)- с перемен. коеф.','x_3(t) — с пост. коеф.');

set(hl,'FontName','Courier');

grid on

 

figure(71);

plot(time_X, X(4,:), time_X, X24,'LineWidth', 2)

title ('x_4(t)');

xlabel('t')

hl=legend('x_4(t)- с перемен. коеф.','x_4(t) — с пост. коеф.');

set(hl,'FontName','Courier');

grid on

 

figure(81);

plot(time_X, X(5,:), time_X, X25,'LineWidth', 2)

title ('x_5(t)');

xlabel('t')

hl=legend('x_5(t)- с перемен. коеф.','x_5(t) — с пост. коеф.');

set(hl,'FontName','Courier');

grid on

AKOR_stabilizaciya_pri_vozmusheniyah.m

clc

clear all

close all

warning off

poryadok= 5;

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

%------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0

0 0 0 0 1;

-a0 -a1 -a2 -a3 -a4];

B = [0; 0; 0; 0; 1];

C = [b0 b1 0 0 0];

% Начальные условия

X_0 =[10; 0; 6; 4; 8];

Time= 1;

h =0.01;

%------------------------------------------------------------------------%

tic

%------------------------------------------------------------------------%

%Получение max значений из файла

load Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

%Нахождение элементов матриц Q и R

r(1) = 100;

q(1) = 1/poryadok * r(1) * (U_max)^2 / (X_max(1))^2;

 

for i = 2: poryadok

q(i) = q(1) * (X_max(1))^2 / (X_max(i))^2;

end

Q = diag(q);

R = diag(r);

 

% Дляизменения коэффициентов

Q(1,1)= Q(1,1)*1e+12;

Q(2,2)= Q(2,2)*1e+8;

Q(3,3)= Q(3,3)*1e+7;

Q(4,4)= Q(4,4)*1e+0;

Q(5,5)= Q(5,5)*1e+2;

 

R(1,1) = R(1,1);

% P_0 = ones(poryadok, poryadok);

% P_0(1,1) = P_0(1,1)*1e12;

% P_0(2,2) = P_0(2,2)*1e8;

% P_0(3,3) = P_0(3,3)*1e7;

% P_0(4,4) = P_0(4,4)*1e0;

% P_0(5,5) = P_0(5,5)*1e2;

%------------------------------------------------------------------------%

P_nach = zeros(poryadok, poryadok);%+P_0;

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом обратного интегрирования

P = Solve_Riccati_Method_Revers_Integr(A,B,Q,R,Time,poryadok, P_nach);

load Solve_Riccati_Method_Revers_Integr_for_slegenie Time_R P N_str

PP = P;

for k = 1: N_str

P1 = reshape(PP(k, :), poryadok, poryadok);

for i = 1: poryadok

for j = 1: poryadok

P2(i,j,k) = P1(i,j);

end

end

end

size_P = size(P2);

%------------------------------------------------------------------------%

tic

%------------------------------------------------------------------------%

%Получение дискретных значений задающего воздействия в обратном времени

% длянахождения вспомогательной функции q(t)

Vozmyshyayushee_Vozdeistvie_Discrete_Revers(h, 0, Time);

%------------------------------------------------------------------------%

load Vozmyshyayushee_Vozdeistvie_Discrete_Revers w_discrete_rev

% ------------------------------------------------------------------------%

size(w_discrete_rev);

% Начальное значение q(t)

q = zeros(poryadok,1);

%Интегрирование q(t) в обратном времени

for k = 1: N_str

q(:, k+1) = q(:, k) — h * ((P2(:,:,k)*B*inv(R)*B'-A') * q(:, k) — P2(:,:,k)*w_discrete_rev(:,k));

end

q(:, k+1) = [];

size_q = size(q);

%------------------------------------------------------------------------%

%Нахождение переменных коэффициентов регулятора

for k= 1: N_str

K_o(k, :) = -inv(R) * B' * P2(:,:,k);

K_pr(k, :) = -inv(R) * B';

end

%Формирование вектора коэффициентов регулятора, значений задающего

%воздействия, значений вспомогательной функции в прямом порядке

size(K_o);

size(K_pr);

K_pr_p = K_pr;

i = 1;

len_K = length(K_o(:,1));

for j = len_K: -1: 1

K_o_p(i,:) = K_o(j,:);

w_discrete(:,i) = w_discrete_rev(:,j);

q_pr(:, i) = q(:, j);

i = i + 1;

end

%------------------------------------------------------------------------%

%Построение графика переменных коэффициентов регулятора обратной связи

% впрямом времени

toc

figure(3)

plot(Time_R,K_o(:,1),'-',Time_R,K_o(:,2),'-',Time_R,K_o(:,3),'-',...

Time_R,K_o(:,4),'-',Time_R,K_o(:,5),'-', 'LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты обратной связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_о_с','k_2_о_с','k_3_о_с','k_4_о_с','k_5_о_с',0);

set(hl,'FontName','Courier');

grid on;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Построение графика переменных коэффициентов регулятора прямой связи

% в прямомвремени

figure(4)

plot(Time_R,K_pr(:,1),'-',Time_R,K_pr(:,2),'-',Time_R,K_pr(:,3),'-',...

Time_R,K_pr(:,4),'-',Time_R,K_pr(:,5),'-', 'LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты прямой связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_п_с','k_2_п_с','k_3_п_с','k_4_п_с','k_5_п_с',0);

set(hl,'FontName','Courier');

grid on;

%------------------------------------------------------------------------%

tic

% ------------------------------------------------------------------------%

for k = 1: len_K

A_(:,:,k) = A + B * K_o_p(k,:);

end

size_A_ = size(A_);

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение фазовых координат

X(:,1)= X_0;

time_X(1) = 0;

for k = 1: len_K

X(:, k+1) = X(:, k) + h * (A_(:,:,k) * X(:, k) + B * K_pr_p(k,:) *q_pr(:,k) + w_discrete(:,k));

time_X(k+1) = time_X(k) + h;

end

X(:, k+1) = [];

time_X(k+1) = [];

size_X= size(X);

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение управления

for k = 1: len_K

u(k) = K_o_p(k,:) * X(:,k) + K_pr_p(k,:) * q_pr(:,k);

end

size_u = size(u);

%------------------------------------------------------------------------%

toc

%Построение u(t) и X(t)

figure(5);

plot(time_X, u, 'r-', 'LineWidth', 2)

title ('u(t)');

xlabel('t')

hl=legend('u(t) — управление',0);

set(hl,'FontName','Courier');

grid on

 

figure(6);

plot(time_X, X(1,:),'r-', time_X, w_discrete(1,:), 'LineWidth', 2)

hold on

title ('x_1(t)');

xlabel('t');

hl=legend('X(t) — реальный сигнал','w(t) — возмущающее воздействие',0);

set(hl,'FontName','Courier');

grid on

 

figure(7);

plot(time_X, X(2,:),'r-', time_X, w_discrete(2,:), 'LineWidth', 2)

title ('x_2(t)');

xlabel('t');

hl=legend('X(t)- реальный сигнал','w(t) — возмущающее воздействие',0);

set(hl,'FontName','Courier');

grid on

 

figure(8);

plot(time_X, X(3,:),'r-', time_X, w_discrete(3,:), 'LineWidth', 2)

title ('x_3(t)');

xlabel('t');

hl=legend('X(t)- реальный сигнал','w(t) — возмущающее воздействие',0);

set(hl,'FontName','Courier');

grid on

 

figure(9);

plot(time_X, X(4,:),'r-', time_X, w_discrete(4,:), 'LineWidth', 2)

title ('x_4(t)');

xlabel('t');

hl=legend('X(t)- реальный сигнал','w(t) — возмущающее воздействие',0);

set(hl,'FontName','Courier');

grid on

 

figure(10);

plot(time_X, X(5,:),'r-', time_X, w_discrete(5,:), 'LineWidth', 2)

title ('x_5(t)');

xlabel('t');

hl=legend('X(t)- реальный сигнал','w(t) — возмущающее воздействие',0);

set(hl,'FontName','Courier');

grid on

 

figure(11);

plot(time_X, q(1,:), time_X, q(2,:), time_X, q(3,:), time_X, q(4,:),time_X, q(5,:), 'LineWidth', 2)

title ('q(t)- vector-function');

xlabel('t');

hl=legend('q_1(t)', 'q_2(t)', 'q_3(t)', 'q_4(t)', 'q_5(t)');

set(hl,'FontName','Courier');

grid on

AKOR_slegenie_na_konech_interval_I_podxod.m

clc

clear all

close all

 

poryadok = 5;

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

%------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

% ------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0

0 0 0 0 1;

-a0 -a1 -a2 -a3 -a4];

B = [0; 0; 0; 0; 1];

C = [b0 b1 0 0 0];

% Начальные условия

X_0 =[10; 0; 6; 4; 8;];

Time= 1;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Получение max значений из файла

load Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

%Нахождение элементов матриц Q и R

r(1) = 100;

q(1) = 1/poryadok * r(1) * (U_max)^2 / (X_max(1))^2;

 

for i = 2: poryadok

q(i) = q(1) * (X_max(1))^2 / (X_max(i))^2;

end

Q = diag(q);

R = diag(r);

 

% Дляизменения коэффициентов

%Q(1,1) = Q(1,1)*1e+10;

%Q(2,2) = Q(2,2)*1e+8;

%Q(3,3) = Q(3,3)*1e+6;

%Q(4,4) = Q(4,4)*1e+2;

%Q(5,5) = Q(5,5)*1e+2;

Q(1,1)= Q(1,1)*1e+12;

Q(2,2)= Q(2,2)*1e+8;

Q(3,3)= Q(3,3)*1e+7;

Q(4,4)= Q(4,4)*1e+0;

Q(5,5)= Q(5,5)*1e+2;

 

R(1,1)= R(1,1);

%------------------------------------------------------------------------%

%Задающее воздействие

A_o =[0 1 0 0 0;

0 0 10 0;

0 0 01 0

0 0 00 1;

-a0-a1 -a2 -a3 -a4];

X_o_0= [12; 10; 14; 8; 16];

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Расширенный вектор состояния и расширенные матрицы A,B,Q

%X_rassh = [X_0; X_o];

NULL_M1 = zeros(size(A));

A_rassh = [A NULL_M1;

NULL_M1 A_o];

 

NULL_M2 = zeros(length(A(:,1)), 1);

B_rassh = [B; NULL_M2];

 

Q_rassh = [Q -Q;

-Q Q];

X_rassh_0 = [X_0; X_o_0]

%------------------------------------------------------------------------%

P_nach = zeros(2*poryadok, 2*poryadok);%+ones(poryadok, poryadok);

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом обратного интегрирования

P =Solve_Riccati_Method_Revers_Integr(A_rassh,B_rassh,Q_rassh,R,Time,2*poryadok,P_nach)

%------------------------------------------------------------------------%

% Нахождение переменных коэффициентов регулятора

load Solve_Riccati_Method_Revers_Integr_for_slegenie Time_R P N_str

%------------------------------------------------------------------------%

% %Формирование матриц P11 и P12

PP =P;

for k = 1: N_str

P = reshape(PP(k, :), 2*poryadok, 2*poryadok);

for i = 1: poryadok

for j = 1: poryadok

P11(i,j,k) = P(i,j);

end

end

for i = 1: poryadok

for j = (poryadok+1): (2*poryadok)

P12(i,j-poryadok,k) = P(i,j);

end

end

end

P11(:,:,k)

P12(:,:,k)

%------------------------------------------------------------------------%

for k = 1: N_str

K_o(k, :) = -inv(R) * B' * P11(:,:,k);

K_pr(k, :) = -inv(R) * B' * P12(:,:,k);

end

 

%Формирование вектора коэффициентов регулятора

% впрямом порядке

 

size(K_o)

size(K_pr)

i = 1;

len_K = length(K_o(:,1))

for j = len_K: -1: 1

K_o_p(i,:) = K_o(j,:)

K_pr_p(i,:) = K_pr(j,:);

i = i + 1;

end

%------------------------------------------------------------------------%

%Построение графика переменных коэффициентов регулятора обратной связи

% в прямомвремени

figure(2)

plot(Time_R,K_o(:,1),'-',Time_R,K_o(:,2),'-',Time_R,K_o(:,3),'-',...

Time_R,K_o(:,4),'-',Time_R,K_o(:,5),'-', 'LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты обратной связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_о_с','k_2_о_с','k_3_о_с','k_4_о_с','k_5_о_с',0);

set(hl,'FontName','Courier');

grid on;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Построение графика переменных коэффициентов регулятора прямой связи

% в прямомвремени

figure(3)

plot(Time_R,K_pr(:,1),'-',Time_R,K_pr(:,2),'-',Time_R,K_pr(:,3),'-',...

Time_R,K_pr(:,4),'-',Time_R,K_pr(:,5),'-', 'LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты прямой связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_п_с','k_2_п_с','k_3_п_с','k_4_п_с','k_5_п_с',0);

set(hl,'FontName','Courier');

grid on;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение отслеживаемого сигнала

X_o(:,1)= X_o_0;

h = 0.01;

for k = 1: len_K

X_o(:, k+1) = X_o(:, k) + h * A_o * X_o(:, k);

end

X_o(:, k+1) = [];

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

for k = 1: len_K

A_(:,:,k) = A + B * K_o_p(k,:);

end

size(A_)

%------------------------------------------------------------------------%

%Нахождение фазовых координат

X(:,1)= X_0;

time_X(1) = 0;

for k = 1: len_K

X(:, k+1) = X(:, k) + h * (A_(:,:,k) * X(:, k) + B * K_pr_p(k,:) *X_o(:,k));

time_X(k+1) = time_X(k) + h;

end

X(:, k+1) = [];

time_X(k+1) = [];

%------------------------------------------------------------------------%

%Нахождение управления

for k= 1: len_K

u(k) = K_o_p(k,:) * X(:,k) + K_pr_p(k,:) * X_o(:,k);

end

%------------------------------------------------------------------------%

 

%Построение u(t) и X(t)

figure(4);

plot(time_X, u, 'r-', 'LineWidth', 2)

title ('u(t)');

xlabel('t')

hl=legend('u(t) — управление',0);

set(hl,'FontName','Courier');

grid on

 

figure(5);

plot(time_X, X(1,:),'r-', time_X, X_o(1,:), 'LineWidth', 2)

hold on

title ('x_1(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(6);

plot(time_X, X(2,:),'r-', time_X, X_o(2,:), 'LineWidth', 2)

title ('x_2(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(7);

plot(time_X, X(3,:),'r-', time_X, X_o(3,:), 'LineWidth', 2)

title ('x_3(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(8);

plot(time_X, X(4,:),'r-', time_X, X_o(4,:), 'LineWidth', 2)

title ('x_4(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(9);

plot(time_X, X(5,:),'r-', time_X, X_o(5,:), 'LineWidth', 2)

title ('x_5(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

AKOR_slegenie_na_konech_interval_II_podxod.m

clc

clear all

close all

 

poryadok = 5;

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

% ------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0

0 0 0 0 1;

-a0 -a1 -a2 -a3 -a4];

B = [0; 0; 0; 0; 1];

C = [b0 b1 0 0 0];

% Начальные условия

X_0 = [10; 0; 6; 4; 8];

Time = 45;

h = 0.01;

H = 0.8;

%------------------------------------------------------------------------%

tic

%------------------------------------------------------------------------%

% Получение max значений из файла

load Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

%Нахождение элементов матриц Q и R

r(1) = 100;

q(1) = 1/poryadok * r(1) * (U_max)^2 / (X_max(1))^2;

 

for i = 2: poryadok

q(i) = q(1) * (X_max(1))^2 / (X_max(i))^2;

end

Q = diag(q);

R = diag(r);

 

% Дляизменения коэффициентов

%Q(1,1) = Q(1,1)*1e+12;

%Q(2,2) = Q(2,2)*1e+8;

%Q(3,3) = Q(3,3)*1e+7;

%Q(4,4) = Q(4,4)*1e+0;

%Q(5,5) = Q(5,5)*1e+2;

 

R(1,1) = R(1,1);

% ------------------------------------------------------------------------%

P_nach = zeros(poryadok, poryadok);%+ones(poryadok, poryadok);

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом обратного интегрирования

P = Solve_Riccati_Method_Revers_Integr(A,B,Q,R,Time,poryadok, P_nach);

load Solve_Riccati_Method_Revers_Integr_for_slegenie Time_R P N_str

PP = P;

for k = 1: N_str

P1 = reshape(PP(k, :), poryadok, poryadok);

for i = 1: poryadok

for j = 1: poryadok

P2(i,j,k) = P1(i,j);

end

end

end

size_P = size(P2)

%------------------------------------------------------------------------%

tic

%------------------------------------------------------------------------%

%Получение дискретных значений задающего воздействия в обратном времени

% длянахождения вспомогательной функции q(t)

Zadayushee_Vozdeistvie_Discrete_Revers_Modern(h, 0, Time);

%------------------------------------------------------------------------%

load Zadayushee_Vozdeistvie_Discrete_Revers X_o_discrete_rev

%------------------------------------------------------------------------%

size(X_o_discrete_rev);

% Нахождение q(t)

for i = 1: poryadok

qq = -P_nach(:,:,1) * X_o_discrete_rev(i,1);

q(i,1)= qq(i,1);

end

 

%Интегрирование q(t) в обратном времени

for k = 1: N_str

q(:, k+1) = q(:, k) — h * ((P2(:,:,k)*B*inv(R)*B'-A') * q(:, k) +Q*X_o_discrete_rev(:,k));

end

q(:, k+1) = [];

size_q = size(q)

%------------------------------------------------------------------------%

%Нахождение переменных коэффициентов регулятора

for k= 1: N_str

K_o(k, :) = -inv(R) * B' * P2(:,:,k);

K_pr(k, :) = -inv(R) * B';

end

%Формирование вектора коэффициентов регулятора, значений задающего

%воздействия, значений вспомогательной функции в прямом порядке

size(K_o);

size(K_pr);

K_pr_p = K_pr;

i = 1;

len_K = length(K_o(:,1));

for j = len_K: -1: 1

K_o_p(i,:) = K_o(j,:);

X_o_discrete(:,i) = X_o_discrete_rev(:,j);

q_pr(:, i) = q(:, j);

i = i + 1;

end

%------------------------------------------------------------------------%

%Построение графика переменных коэффициентов регулятора обратной связи

% впрямом времени

toc

figure(3)

plot(Time_R,K_o(:,1),'-',Time_R,K_o(:,2),'-',Time_R,K_o(:,3),'-',...

Time_R,K_o(:,4),'-',Time_R,K_o(:,5),'-', 'LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты обратной связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_о_с','k_2_о_с','k_3_о_с','k_4_о_с','k_5_о_с',0);

set(hl,'FontName','Courier');

grid on;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Построение графика переменных коэффициентов регулятора прямой связи

% в прямомвремени

figure(4)

plot(Time_R,K_pr(:,1),'-',Time_R,K_pr(:,2),'-',Time_R,K_pr(:,3),'-',...

Time_R,K_pr(:,4),'-',Time_R,K_pr(:,5),'-', 'LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты прямой связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_п_с','k_2_п_с','k_3_п_с','k_4_п_с','k_5_п_с',0);

set(hl,'FontName','Courier');

grid on;

%------------------------------------------------------------------------%

tic

%------------------------------------------------------------------------%

for k = 1: len_K

A_(:,:,k) = A + B * K_o_p(k,:);

end

size_A_ = size(A_)

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение фазовых координат

X(:,1)= X_0;

time_X(1) = 0;

for k = 1: len_K

X(:, k+1) = X(:, k) + h * (A_(:,:,k) * X(:, k) + B * K_pr_p(k,:) *q_pr(:,k));

time_X(k+1) = time_X(k) + h;

end

X(:, k+1) = [];

time_X(k+1) = [];

size_X= size(X)

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение управления

for k = 1: len_K

u(k) = K_o_p(k,:) * X(:,k) + K_pr_p(k,:) * q_pr(:,k);

end

size_u = size(u)

%------------------------------------------------------------------------%

toc

%Построение u(t) и X(t)

figure(5);

plot(time_X, u, 'r-', 'LineWidth', 2)

title ('u(t)');

xlabel('t')

hl=legend('u(t) — управление',0);

set(hl,'FontName','Courier');

grid on

 

figure(6);

plot(time_X, X(1,:),'r-', time_X, X_o_discrete(1,:), time_X,X_o_discrete(1,:)-0.8,'LineWidth', 2)

hold on

title ('x_1(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон', 'уровень',0);

set(hl,'FontName','Courier');

grid on

 

figure(7);

plot(time_X, X(2,:),'r-', time_X, X_o_discrete(2,:), 'LineWidth', 2)

title ('x_2(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(8);

plot(time_X, X(3,:),'r-', time_X, X_o_discrete(3,:), 'LineWidth', 2)

title ('x_3(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(9);

plot(time_X, X(4,:),'r-', time_X, X_o_discrete(4,:), 'LineWidth', 2)

title ('x_4(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(10);

plot(time_X, X(5,:),'r-', time_X, X_o_discrete(5,:), 'LineWidth', 2)

title ('x_5(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

AKOR_slegenie_so_skolz_intervalami_Modern.m

function AKOR_slegenie_so_skolz_intervalami_Modern

clc

clear all

close all

 

poryadok = 5;

%------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

%------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0

0 0 0 0 1;

-a0 -a1 -a2 -a3 -a4];

B = [0; 0; 0; 0; 1];

C = [b0 b1 0 0 0];

% Начальные условия

X_0 = [10; 0; 6; 4; 8];

Time = 45;

Kolvo_intervalov = 3;

h = 0.01;

H =0.8;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Получение max значений из файла

load Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

%Нахождение элементов матриц Q и R

r(1) = 100;

q(1) = 1/poryadok * r(1) * (U_max)^2 / (X_max(1))^2;

 

for i = 2: poryadok

q(i) = q(1) * (X_max(1))^2 / (X_max(i))^2;

end

Q = diag(q);

R = diag(r);

 

% Дляизменения коэффициентов

%Q(1,1) = Q(1,1)*1e+13;

%Q(2,2) = Q(2,2)*1e+10;

%Q(3,3) = Q(3,3)*1e+8;

%Q(4,4) = Q(4,4)*1e+5;

%Q(5,5) = Q(5,5)*1e+2;

 

R(1,1)= R(1,1);

%------------------------------------------------------------------------%

%------------------Скользящие интервалы----------------------------------%

shag= Time/Kolvo_intervalov;

Time1 = shag

Time2 = 2*shag

Time3 = Time

%------------------------------------------------------------------------%

P_nach = zeros(poryadok, poryadok);%+ones(poryadok, poryadok);

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом обратного интегрирования

P = Solve_Riccati_Method_Revers_Integr(A,B,Q,R,Time1,poryadok, P_nach);

load Solve_Riccati_Method_Revers_Integr_for_slegenie Time_R P N_str

PP = P;

for k = 1: N_str

P1 = reshape(PP(k, :), poryadok, poryadok);

for i = 1: poryadok

for j = 1: poryadok

P2(i,j,k) = P1(i,j);

end

end

end

size_P = size(P2)

%------------------------------------------------------------------------%

%Нахождение переменных коэффициентов регулятора

for k= 1: N_str

K_o(k, :) = -inv(R) * B' * P2(:,:,k);

K_pr(k, :) = -inv(R) * B';

end

%------------------------------------------------------------------------%

 

tic

% 1 интервал

<p/>

Solve_Interval(P_nach, N_str, h, P2, A,B,Q,R, 0, Time1, X_0, poryadok,K_o, K_pr);

load Solve_Interval time_X X u X_o_discrete

time_X1 = time_X;

X1 = X;

u1 = u;

X_o_discrete1 = X_o_discrete;

<p/>

% 2 интервал

<p/>

Solve_Interval(P_nach, N_str, h, P2, A,B,Q,R, Time1, Time2, X1(:,N_str),poryadok, K_o, K_pr);

load Solve_Interval time_X X u X_o_discrete

time_X2 = time_X;

X2 = X;

u2 = u;

X_o_discrete2 = X_o_discrete;

<p/>

% 3 интервал

<p/>

Solve_Interval(P_nach, N_str, h, P2, A,B,Q,R, Time2, Time3, X2(:,N_str),poryadok, K_o, K_pr);

load Solve_Interval time_X X u X_o_discrete

time_X3 = time_X;

X3 = X;

u3 = u;

X_o_discrete3 = X_o_discrete;

<p/>

toc

%------------------------------------------------------------------------%

% Объединение интервалов

time_X = [time_X1 time_X2 time_X3];

u = [u1 u2 u3];

X = [X1 X2 X3];

X_o_discrete = [X_o_discrete1 X_o_discrete2 X_o_discrete3];

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Построение u(t) и X(t)

figure(3);

plot(time_X, u, 'r-','LineWidth', 2);

title ('u(t)');

xlabel('t')

hl=legend('u(t) — управление',0);

set(hl,'FontName','Courier');

grid on

 

figure(4);

plot(time_X, X(1,:),'r-', time_X, X_o_discrete(1,:), time_X,X_o_discrete(1,:)-0.8,'LineWidth', 2)

hold on

title ('x_1(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон', 'уровень',0);

set(hl,'FontName','Courier');

grid on

 

figure(5);

plot(time_X, X(2,:),'r-', time_X, X_o_discrete(2,:), 'LineWidth', 2)

title ('x_2(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(6);

plot(time_X, X(3,:),'r-', time_X, X_o_discrete(3,:), 'LineWidth', 2)

title ('x_3(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(7);

plot(time_X, X(4,:),'r-', time_X, X_o_discrete(4,:), 'LineWidth', 2)

title ('x_4(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

figure(8);

plot(time_X, X(5,:),'r-', time_X, X_o_discrete(5,:), 'LineWidth', 2)

title ('x_5(t)');

xlabel('t');

hl=legend('X(t) — слежение','X_o(t) — эталон',0);

set(hl,'FontName','Courier');

grid on

 

function Solve_Interval(P_nach, N_str, h, P2, A,B,Q,R, T_nach, T_konech,X_0, poryadok, K_o, K_pr)

Zadayushee_Vozdeistvie_Discrete_Revers_Modern(h, T_nach, T_konech);

load Zadayushee_Vozdeistvie_Discrete_Revers X_o_discrete_rev

%------------------------------------------------------------------------%

% Нахождение q(t)

for i = 1: poryadok

qq = -P_nach(:,:,1) * X_o_discrete_rev(i,1);

q(i,1)= qq(i,1);

end

%Интегрирование q(t) в обратном времени

for k = 1: N_str

q(:, k+1) = q(:, k) — h * ((P2(:,:,k)*B*inv(R)*B'-A') * q(:, k) +Q*X_o_discrete_rev(:,k));

end

q(:, k+1) = [];

size_q = size(q)

%------------------------------------------------------------------------%

% Формированиевектора коэффициентов регулятора, значений задающего

%воздействия, значений вспомогательной функции в прямом порядке

K_pr_p = K_pr;

i = 1;

for j = N_str: -1: 1

K_o_p(i,:) = K_o(j,:);

X_o_discrete(:,i) = X_o_discrete_rev(:,j);

q_pr(:, i) = q(:, j);

i = i + 1;

end

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

for k = 1: N_str

A_(:,:,k) = A + B * K_o_p(k,:);

end

size_A_ = size(A_)

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение фазовых координат

X(:,1)= X_0;

time_X(1) = T_nach;

for k = 1: N_str

X(:, k+1) = X(:, k) + h * (A_(:,:,k) * X(:, k) + B * K_pr_p(k,:) *q_pr(:,k));

time_X(k+1) = time_X(k) + h;

end

X(:, k+1) = [];

time_X(k+1) = [];

size_X= size(X)

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение управления

for k = 1: N_str

u(k) = K_o_p(k,:) * X(:,k) + K_pr_p(k,:) * q_pr(:,k);

end

size_u = size(u)

save Solve_Interval time_X X u X_o_discrete

<p/><p/>Sintez_nablyud_polnogo_poryadka.m

clc

clear all

close all

 

poryadok = 5;

% ------------------------------------------------------------------------%

b_0 =5;

b_1 =9;

%Укороченная система данного объекта

a_5 = 0.1153;

a_4 = 1.78;

a_3 = 3.92;

a_2 = 14.42;

a_1 = 8.583;

a_0 = 0;

%------------------------------------------------------------------------%

% Приведение системы

b0 = b_0/a_5;

b1 = b_1/a_5;

 

a5 = a_5/a_5;

a4 = a_4/a_5;

a3 = a_3/a_5;

a2 = a_2/a_5;

a1 = a_1/a_5;

a0 = a_0/a_5;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Представление системы в пространстве состояний

A =[0 1 0 0 0;

0 0 1 0 0;

0 0 0 1 0;

0 0 0 0 1;

-a0 -a1 -a2 -a3 -a4]

B = [0; 0; 0; 0; 1]

C = [b0 b1 0 0 0]

% Начальные условия

X_0 =[10; 0; 6; 4; 8]

 

Time= 10;

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Получение max значений из файла

load Sostoyaniya X_max U_max

%------------------------------------------------------------------------%

%Нахождение элементов матриц Q и R

r(1) = 100;

q(1) = 1/poryadok * r(1) * (U_max)^2 / (X_max(1))^2;

 

for i = 2: poryadok

q(i) = q(1) * (X_max(1))^2 / (X_max(i))^2;

end

Q = diag(q)

R = diag(r)

 

% Дляизменения коэффициентов

Q(1,1)= Q(1,1);

Q(2,2)= Q(2,2);

Q(3,3)= Q(3,3);

Q(4,4)= Q(4,4);

Q(5,5)= Q(5,5);

 

%Q(1,1) = Q(1,1)*1e+12;

%Q(2,2) = Q(2,2)*1e+8;

%Q(3,3) = Q(3,3)*1e+7;

%Q(4,4) = Q(4,4)*1e+0;

%Q(5,5) = Q(5,5)*1e+2;

 

R(1,1) = R(1,1);

%------------------------------------------------------------------------%

P_nach = zeros(poryadok, poryadok);%+ones(poryadok, poryadok);

%------------------------------------------------------------------------%

%Решение уравнения Риккати методом обратного интегрирования

P1 = Solve_Riccati_Method_Revers_Integr(A,B,Q,R,Time,poryadok, P_nach)

%------------------------------------------------------------------------%

% Построение графикакоэффициентов регулятора

load Solve_Riccati_Method_Revers_Integr Time_R P N_str

PP = P;

for i = 1: N_str

P = reshape(PP(i, :), poryadok, poryadok);

K(i, :) = -inv(R)*B'*P;

end

figure(2)

plot(Time_R,K(:,1),'-',Time_R,K(:,2),'-',Time_R,K(:,3),'-',Time_R,K(:,4),'-',Time_R,K(:,5),'-','LineWidth', 2);

xlabel('t')

tit1= title('Коэффициенты обратной связи в прямом времени');

set(tit1,'FontName','Courier');

hl=legend('k_1_о_с','k_2_о_с','k_3_о_с','k_4_о_с','k_5_о_с',0);

set(hl,'FontName','Courier');

grid on;

%------------------------------------------------------------------------%

%Нахождение коэффициентов регулятора

disp('Коэффициентырегулятора:')

K = -inv(R) * B' * P1

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

A_ = A + B * K;

%------------------------------------------------------------------------%

%Нахождение фазовых координат

X(:,1)= X_0;

h = 0.01;

time_X(1) = 0;

for k = 1: N_str

X(:, k+1) = X(:, k) + h * A_ * X(:, k);

time_X(k+1) = time_X(k) + h;

end

X(:, k+1) = [];

time_X(k+1) = [];

%------------------------------------------------------------------------%

%Нахождение управления

for k= 1: N_str

u(k)= K * X(:,k);

end

%------------------------------------------------------------------------%

%Нахождение коэффициентов наблюдателя

M_n = [C' A'*C' (A^2)'*C' (A^3)'*C' (A^4)'*C']

rank_M_n = rank(M_n)

A_r =A_

disp('Спектрматрицы регулятора:')

spektr_A_r = eig(A_r)

koeff = 1;

min_lyamda_A_r = min(real(spektr_A_r))

% lyamda = min_lyamda_A_r * koeff;

lyamda= -5;

disp('Спектрматрицы наблюдателя эталонный:')

lyamda_A_n = [lyamda — koeff * 4; lyamda — koeff * 3; lyamda — koeff *2;...

lyamda — koeff; lyamda]'

 

syms k_n1 k_n2 k_n3 k_n4 k_n5 lyam

K_n = [k_n1; k_n2; k_n3; k_n4; k_n5];

 

Koeff_poly_n_etalon = poly(lyamda_A_n)

disp('Характеристическийполином наблюдателя эталонный:')

poly_n_etalon = poly2sym(Koeff_poly_n_etalon, lyam)

disp('Характеристическийполином наблюдателя реальный:')

poly_n_real = collect(expand(simplify(det(lyam*eye(poryadok) — (A — K_n*C)))),lyam)

raznost_poly = collect(poly_n_etalon-poly_n_real,lyam)

for i = 1: poryadok

Koeff_raznost_poly(i) = subs(diff(raznost_poly,poryadok-i,lyam)/factorial(poryadok-i),lyam,0);

end

Koeff_raznost_poly

[Kn1 Kn2 Kn3 Kn4 Kn5]= solve(Koeff_raznost_poly(5),Koeff_raznost_poly(4),...

Koeff_raznost_poly(3), Koeff_raznost_poly(2), Koeff_raznost_poly(1), ...

k_n1, k_n2, k_n3, k_n4, k_n5)

Kn = [Kn1; Kn2; Kn3; Kn4; Kn5];

Kn = vpa(Kn,50)

% Проверка

Proverka = solve(det(lyam*eye(poryadok)-(A-Kn*C)))

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение x и x_оценочного

X_ocen_0= [0 0 0 0 0]';

A_rash = [A B*K;

Kn*C A-Kn*C+B*K]

 

X_rash_0 = [X_0;X_ocen_0]

 

X_rash(:,1) = X_rash_0;

for k = 1: N_str

X_rash(:,k+1) = X_rash(:,k) + h * A_rash * X_rash(:,k);

end

X_rash(:,k+1)= [];

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Разделение x и x_оценочного

for i = 1: poryadok

X_n(i,:) = X_rash(i,:);

end

for i = poryadok + 1: 2*poryadok

X_n_ocen(i — poryadok,:) = X_rash(i,:);

end

%------------------------------------------------------------------------%

%------------------------------------------------------------------------%

%Нахождение управления

for i= 1: N_str

u_n(i) = K * X_n_ocen(:,i);

end

%Построение u(t) и X(t)

figure(3);

plot(time_X, u, 'r-', time_X, u_n, 'b-', 'LineWidth', 2)

title ('u(t)');

xlabel('t')

hl=legend('управлениебез наблюдателя','управление c наблюдателем');

set(hl,'FontName','Courier');

grid on

 

figure(4);

plot(time_X, X(1,:), time_X, X_n(1,:), time_X, X_n_ocen(1,:),'LineWidth',2)

hold on

title ('x_1(t)');

xlabel('t')

hl=legend('x_1(t)без наблюдателя','x_1(t) c наблюдателем', 'x_о_ц_е_н_1(t)');

set(hl,'FontName','Courier');

grid on

 

figure(5);

plot(time_X, X(2,:), time_X, X_n(2,:), time_X, X_n_ocen(2,:),'LineWidth',2)

title ('x_2(t)');

xlabel('t')

hl=legend('x_2(t)без наблюдателя','x_2(t) c наблюдателем', 'x_о_ц_е_н_2(t)');

set(hl,'FontName','Courier');

grid on

 

figure(6);

plot(time_X, X(3,:), time_X, X_n(3,:), time_X, X_n_ocen(3,:),'LineWidth',2)

title ('x_3(t)');

xlabel('t')

hl=legend('x_3(t)без наблюдателя','x_3(t) c наблюдателем', 'x_о_ц_е_н_3(t)');

set(hl,'FontName','Courier');

grid on

 

figure(7);

plot(time_X, X(4,:), time_X, X_n(4,:), time_X, X_n_ocen(4,:),'LineWidth',2)

title ('x_4(t)');

xlabel('t')

hl=legend('x_4(t)без наблюдателя','x_4(t) c наблюдателем', 'x_о_ц_е_н_4(t)');

set(hl,'FontName','Courier');

grid on

 

figure(8);

plot(time_X, X(5,:), time_X, X_n(5,:), time_X, X_n_ocen(5,:),'LineWidth',2)

title ('x_5(t)');

xlabel('t')

hl=legend('x_5(t)без наблюдателя','x_5(t) c наблюдателем', 'x_о_ц_е_н_5(t)');

set(hl,'FontName','Courier');

grid on

 

Solve_Riccati_Method_Diag.m

%------------------------------------------------------------------------%

<p/>

%Метод диагонализации для решения алгебраического уравнения Риккати

<p/>

function P = Solve_Riccati_Method_Diag(A,B,Q,R)

%Расширенная матрица системы

Z =[A B*inv(R)*B';

 Q -A']

%Нахождение собственных векторов и собственных чисел матрицы Z

[V,D]= eig(Z)

%------------------------------------------------------------------------%

%Построение матрицы S

%Индексы столбцов собственных значений Re(lyamda) > 0

Ind_Re_plus = find(sum(real(D)) > 0);

%Индексы столбцов собственных значений Re(lyamda) < 0

Ind_Re_minus = find(sum(real(D)) < 0);

%Формирование матрицы D в виде Re(lyamda) > 0 -> Re(lyamda) < 0

D1 = sum(D(:, Ind_Re_plus));

D2 = sum(D(:, Ind_Re_minus));

D =[D1 D2];

%Формирование матрицы S в виде Re(lyamda) > 0 -> Re(lyamda) < 0

S1 = V(:, Ind_Re_plus);

S2 = V(:, Ind_Re_minus);

S =[S1 S2];

%Поиск столбцов с комплексными корнями в матрице D

Ind_Complex_D = find(imag(D) ~= 0);

% Формирование конечной матрицы S

for i = 1: 2: length(Ind_Complex_D)

S (:, Ind_Complex_D(i) + 1) = imag(S(:, Ind_Complex_D(i)));

S (:, Ind_Complex_D(i)) = real(S(:, Ind_Complex_D(i)));

end

S = S

%------------------------------------------------------------------------%

poryadok = length(A(1,:));

S12 = S(1: poryadok, poryadok+1: 2*poryadok);

S22 = S(poryadok+1: 2*poryadok, poryadok+1: 2*poryadok);

%------------------------------------------------------------------------%

%Вычисление матрицы P

P =-S22 * inv(S12);

Solve_Riccati_Method_Revers_Integr.m

%------------------------------------------------------------------------%

<p/>

%Решение уравнения Риккати интегрированием в обратном времени

<p/>

function P = Solve_Riccati_Method_Revers_Integr(A,B,Q,R,Time,poryadok,P1)

save For_Riccati A B Q R poryadok

%Решение дифференциального уравнения Риккати

P1 =reshape(P1, poryadok^2, 1);

[Time_R, P] = ode45(@Riccati, [Time: -0.01: 0], P1);

[N_str, N_stolb] = size(P);

 

%Построение полученного решения

figure(1)

for i= 1: poryadok^2

plot(Time_R, P(:,i),'-')

hold on

end

% plot(Time_R,P(:,1),'-',Time_R,P(:,2),'-',Time_R,P(:,3),'-',Time_R,P(:,4),'-',Time_R,P(:,5),'-',Time_R,P(:,6),'-',...

%Time_R,P(:,7),'-',Time_R,P(:,8),'-',Time_R,P(:,9),'-',Time_R,P(:,10),'-',Time_R,P(:,11),'-',Time_R,P(:,12),'-',...

%Time_R,P(:,13),'-',Time_R,P(:,14),'-',Time_R,P(:,15),'-',Time_R,P(:,16),'-',Time_R,P(:,17),'-',Time_R,P(:,18),'-',...

%Time_R,P(:,19),'-',Time_R,P(:,20),'-',Time_R,P(:,21),'-',Time_R,P(:,22),'-',Time_R,P(:,23),'-',Time_R,P(:,24),'-',...

% Time_R,P(:,25),'-', 'lineWidth', 2);

grid on;

tit1 = title('Решения уравнения Риккати');

set(tit1,'FontName','Courier');

xlabel('t');

%legend('p_1','p_2','p_3','p_4','p_5','p_6','p_7','p_8','p_9','p_1_0','p_1_1','p_1_2','p_1_3','p_1_4','p_1_5','p_1_6',...

%'p_1_7','p_1_8','p_1_9','p_2_0','p_2_1','p_2_2','p_2_3','p_2_4','p_2_5');

save Solve_Riccati_Method_Revers_Integr Time_R P N_str

save Solve_Riccati_Method_Revers_Integr_for_slegenie Time_R P N_str

P = reshape(P(N_str,:), poryadok, poryadok);

 

 

function dP = Riccati(Time,P)

load For_Riccati A B Q R poryadok

P = reshape(P, poryadok, poryadok);

% Дифференциальное уравнение Риккати

dP = -P*A — A'*P + P*B*inv(R)*B'*P — Q;

dP = reshape(dP, poryadok^2, 1);

Vozmyshyayushee_Vozdeistvie_Discrete_Revers.m

%Получение дискретных значений возмущающего воздействия в обратном времени

% длянахождения вспомогательной функции q(t)

function Vozmyshyayushee_Vozdeistvie_Discrete_Revers(h, T_nach, T_konech)

%------------------------------------------------------------------------%

%Возмущающее воздействие

A =1;

w =4*pi;

 

k = 1;

 

RETURN = 1;

while RETURN == 1

disp('Возмущающее воздействие — const: 1')

disp('Возмущающеевоздействие — A*sin(w*t): 2')

reply= input('Выберете возмущающее воздействие [1 или 2]: ', 's');

 

switch reply

 case '1'

 disp('Возмущающее воздействие — const')

 for t = T_konech: -h: T_nach

w_discrete_rev(:, k) = [A + 0 * t; 0; 0; 0; 0];

k = k + 1;

 end

 RETURN = 2;

 case '2'

 disp('Возмущающеевоздействие — A*sin(w*t)')

 for t = T_konech: -h:T_nach

w_discrete_rev(:, k) = [A * sin(w * t); 0; 0; 0; 0];

k = k + 1;

 end

 RETURN = 2;

 otherwise

 disp('Неизвестное воздействие.')

 RETURN = 1;

end

end

figure(2)

t = T_konech: -h: T_nach;

plot(t, w_discrete_rev(1,:), 'r-', 'LineWidth', 2);

xlabel('t')

tit1= title('Возмущающее воздействие');

set(tit1,'FontName','Courier');

hl=legend('Возмущающее воздействие',0);

set(hl,'FontName','Courier');

grid on;

save Vozmyshyayushee_Vozdeistvie_Discrete_Revers w_discrete_rev

%------------------------------------------------------------------------%

Zadayushee_Vozdeistvie_Discrete_Revers_Modern.m

%Получение дискретных значений задающего воздействия в обратном времени

% длянахождения вспомогательной функции q(t)

function Zadayushee_Vozdeistvie_Discrete_Revers_Modern(h, T_nach,T_konech)

%------------------------------------------------------------------------%

%Задающее воздействие

alfa= 0.2;

beta= 10;

H =0.8;

k = 1;

for t = T_konech: -h: T_nach

 X_o_1 = 10*exp(-1/5*t)*t+4/5;

 X_o_2 = -2*exp(-1/5*t)*t+10*exp(-1/5*t);

 X_o_3 = 2/5*exp(-1/5*t)*t-4*exp(-1/5*t);

 X_o_4 = -2/25*exp(-1/5*t)*t+6/5*exp(-1/5*t);

 X_o_5 = 2/125*exp(-1/5*t)*t-8/25*exp(-1/5*t);

 X_o_discrete_rev(:, k) = [X_o_1; X_o_2; X_o_3; X_o_4; X_o_5];

 k = k + 1;

end

figure(2)

t = T_konech: -h: T_nach;

plot(t, X_o_discrete_rev(1,:), 'r-', t, X_o_discrete_rev(1,:)-H,'LineWidth', 2);

xlabel('t')

tit1= title('Задающее воздействие');

set(tit1,'FontName','Courier');

hl=legend('Отслеживаниезад. возд. на H ','Задающее воздействие',0);

set(hl,'FontName','Courier');

grid on;

save Zadayushee_Vozdeistvie_Discrete_Revers X_o_discrete_rev

%------------------------------------------------------------------------%

еще рефераты
Еще работы по экономико-математическому моделированию