ОТЧЕТ
по лабораторной работе №3
по дисциплине
«Основы теории оптимального управления»
Практическая часть
Проверим управляема ли система, для этого получим матрицы А и В:
𝑥̇ 1 = 𝑥3
𝑥̇ = 𝑥4
{ 2
𝑥̇ 3 = 𝑢1
𝑥̇ 4 = 𝑢2
𝑡 ∈ [0,3]
𝑥1 (𝑡𝑘 )2 + 𝑥2 (𝑡𝑘 )2 → 𝑚𝑖𝑛
|𝑢𝑗 | ≤ 𝑢𝑗𝑚𝑎𝑥
Получим уравнение Гамильтониана:
𝐻 = 𝑝1 𝑥3 + 𝑝2 𝑥4 + 𝑝3 𝑢1 + 𝑝4 𝑢2
Из
х̇ = Ах + В𝑢
0 0 1 0
0 0 0 1
𝐴=[ ]
0 0 0 0
0 0 0 0
0 0
0 0
𝐵=| |
1 0
0 1
Теперь через МатЛаб выполним проверку
unco получилось = 0, следовательно система управляема.
Найдем решения.
Минимизируем функционал:
𝐽 = 𝑥1 (𝑡𝑘 )2 + 𝑥2 (𝑡𝑘 )2 → 𝑚𝑖𝑛
При начальном приближении и начальных условиях решение будет
иметь вид:
𝑥1 = 0.5𝑡 2 + 0.5𝑡 − 3
𝑥2 = 0.25𝑡 2 − 0.5𝑡 + 3
𝑥3 = 𝑡 + 0.5
{ 𝑥4 = 0.5𝑡 − 0.5
Критерий качества J будет равен при 𝑡𝑘 =3:
𝐽 = (4.5 + 1.5 − 3)2 + (2.25 − 1.5 + 3)2 = 23.06
Максимизируем Гамильтониан.
Максимизация Гамильтониана основана на максимизации функции F:
𝐹 = 𝑝3 𝑢1 + 𝑝4 𝑢2
Тогда
𝜕𝐻
𝑝̇1 = − =0
𝜕𝑥1
𝜕𝐻
𝑝̇2 = − =0
𝜕𝑥2
𝜕𝐻
𝑝̇ 3 = − = −𝑝1
𝜕𝑥3
𝜕𝐻
𝑝̇4 = − = −𝑝2
{ 𝜕𝑥4
Отсюда
𝑝1 (𝑡𝑘 ) = 2𝑥1 (𝑡𝑘 )
𝑝2 (𝑡𝑘 ) = 2𝑥2 (𝑡𝑘 )
𝑝3 (𝑡𝑘 ) = 0
{ 𝑝4 (𝑡𝑘 ) = 0
𝑝1 = 6
𝑝2 = 7.5
{
𝑝3 = 18 − 6𝑡
𝑝4 = 22.5 − 7.5𝑡
clear all
close all
clc
% Начальные условия
global u; global p0; global c; global t_u; global h; global
p; global x;
x0 = [-3;3;0.5;-0.5];
t = 0:0.001:3;
u1 = 1;
u2 = 0.5;
u0 = [u1 u2];
%Первое решение
[t,X] = ode45(@(t,x) diff_sys(t,x,u0),t,x0);
plot(t,X(:,1),t,X(:,2))
grid on
grid minor
xlabel('Время,с')
ylabel('Решения')
title('Решения при u1 = 1 и u2 = 0.5')
tk = 3;
p1 = 6;
p2 = 7.5;
p3 = 18-6*tk;
p4 = 22.5-7.5*tk;
p = [p1, p2, p3, p4];
J = 23.06;
u1 = 1;
u2 = 0.5;
u = [u1 u2];
a = [1 0; -1 0; 0 1; 0 -1];
b = [1; 1; 1; 1];
% Модификация М4
J_pr = 0;
h = 1.5;
count = 0;
t0 = 0;
t_x = [t0 tk];
t_p = [tk t0];
e = 0.001;
J_pr = J;
c = u;
[t1,x] = ode45(@(t,x) diff_sys(t,x,u),t_x,x0);
p0 = [2*x(1);2*x(2);0;0];
[t,p] = ode45(@p_sys,t_p,p0);
[t_u,out] = fmincon(@func1,1,[],[],[],[],0,10);
[h,out] = fmincon(@func2,h,[],[],[],[],-1,1);
[u,out] = fmincon(@(u) H(x,u),u,[],[],[],[],[-1 -1],[1 1]);
J = x(1)*x(1)+x(2)*x(2);
count = count + 1;
tk = t(1)
end
figure
plot(t1,x(: ,1),t1,x(:,2));
grid on
grid minor
xlabel('Время,с')
ylabel('Решения')
title('Решения при u1 = -1 и u2 = -1')
legend('x1','x2')
function L = H(X,u)
global p
L = (-1)*(p(1)*X(end,3) + p(2)*X(end,4) + p(3)*u(1) +
p(4)*u(2));
end