Контрольная / 11 вариант
.docxЗадание: Определить оптимальное управление, переводящее объект, описанный матрицами состояния А и управления В, из состояния x1(0), x2(0) в состояние x1(tк), x2(tк) за заданное время tк таким образом, чтобы достигался минимум функционала J.
Решение. Требуется объект, описываемый уравнениями
перевести из состояния x1(0) = x2(0) = 0 в состояние x1(10) = 1, x2(10) = 0 та-
ким образом, чтобы обеспечить минимум потребления энергии:
Запишем гамильтониан:
.
Необходимыми условиями экстремума будут:
Получаем систему дифференциальных уравнений:
Система однородна и может быть представлена в матричном виде:
,
где , а матрица A в данном случае имеет вид:
Структура решения системы зависит от вида собственных чисел матрицы А. Определим их с помощью следующего кода Matlab:
A=[0 1 0 0;-1 -6 0 -0.5;0 0 0 1;0 -2 -1 6];
L=eig(A)
L =
-5.9137
5.9137
-0.1691
0.1691
Решение будем искать в виде:
(1)
где λj(j=1…4) – собственные числа матрицы A;
–собственные векторы, соответствующие
числам λj;
– постоянные, определяемые через дополнительные условия.
Определим собственные векторы матрицы A с помощью следующего вызова функции eig:
[V,D]=eig(A);V
V =
-0.1645 -0.0069 0.9728 -0.0408
0.9728 -0.0408 -0.1645 -0.0069
-0.0272 0.1666 0.1610 0.9852
0.1610 0.9852 -0.0272 0.1666
Матрица V состоит из столбцов, каждый из которых собственный вектор, определенный для соответствующего собственного числа. Для нахождения постоянных С1…C4 воспользуемся граничными условиями:
x1(0) = x2(0) = 0,
x1(10) = 1, x2(10) = 0.
Из первых двух уравнений (1) получаем:
или в матричной форме:
, (2)
где ,
– вектор, подлежащий определению.
Сформируем матрицы M и N и решим уравнение (2) в Matlab:
M=[V(1:2,:);V(1:2,:)*diag(exp(10*L))];
N=[0;0;1;0];
C=M\N
C =
-0.0706
0.0000
-0.2147
-4.8391
Перепишем систему (1) следующим образом:
,
где
Матрицу С определим с помощью кода
C_=V*diag(C)
C_ =
0.0116 -0.0000 -0.2089 0.1973
-0.0687 -0.0000 0.0353 0.0334
0.0019 0.0000 -0.0346 -4.7673
-0.0114 0.0000 0.0058 -0.8062
Решение системы уравнений представим в виде:
Управление:
Значение функционала определим численным интегрированием с помощью следующего кода Matlab:
t=0:.01:10;
x2=-0.0687*exp(-5.9137*t)+ 0.0353*exp(-0.1691*t)+0.0334*exp(0.1691*t);
u=0.0057*exp(-5.9137*t)- 0.0029*exp(-0.1691*t)+0.4031*exp(0.1691*t);
J=trapz(t,u.*u+x2.*x2)
J = 12.5512
Графики полученных оптимальных траекторий и оптимального управления приведены на рисунке: