Вы находитесь на странице: 1из 11

Московский государственный технический университет

Факультет ИУ «Информатика и системы управления»


Кафедра ИУ-1 «Системы автоматического управления»

ОТЧЕТ
по лабораторной работе № 2

«ПРЯМЫЕ МЕТОДЫ ОПТИМИЗАЦИИ И РЕШЕНИЕ КРАЕВЫХ ЗАДАЧ »

по дисциплине
«Оптимальное управление детерминированными процессами »

Выполнили: Фам Куок Фонг

Группа: ИУ1-72

Проверил: Деменков Н. П.

Работа выполнена: 22/11/2021


Отчет сдан: 22/11/2021
Оценка:
Цель работы: овладеть навыками и умением по построению оптимальных
систем на основе прямых методов оптимизации и решению краевых задач при
синтезе оптимальных систем на основе классического вариационного
исчисления и принципа максимума Л.С. Понтрягина.

Практическая работа
Задача 1. Для заданного объекта управления (взять из табл.1) решить
задачу оптимизации, используя любую из стандартных процедур оптимизации
из Optimization Toolbox (fgoalattain, fminimax, fmincon, fminsearch и др см.
Приложения 1 и 2).
k = 45; ζ = 0.1; T = 0.4.

Уравнение движения объекта: 𝑇 𝑥̈ + 2ζ𝑇𝑥̇ + 𝑥 = 𝑘𝑢


Представим систему в пространстве состояний:
clc;

k = 45;
T = 0.4;
eps = 0.1;
num = k;
den = [T^2 2*T*eps 1];
W = tf(num,den);
SYS = ss(W);
[A,B,C,D] = ssdata(SYS)

Получим:
A=
[-0.5000, -3.1250;
2.0000, 0]
B=
[16;
0]
C = [0, 8.7891]
D=0
Вычисляем матирицу К:
K0=[-1,-1]; % Задание начальных условий
goal=[-5, -4]; % Задание вектора целей
weight = abs(goal); % Задание вектора весовых коэффициентов
lb = -5*ones(size(K0)); % Нижние границы элементов матрицы К
ub = 5*ones(size(K0)); % Верхние границы элементов матрицы К
% Установка опции вывода информации
options = optimset('Display', 'iter','GoalsExactAchieve',2);
fun = @(K) sort(eig(A-B*K));
[K,fval] = fgoalattain(fun,K0,goal,weight,[ ],[ ],[ ],[ ],lb,ub,[
],options)

Результаты вычислений:
2
K =
0.5313 0.4297

fval =
-5.0000
-4.0000

Построим переходные процессы переменных состояний:

x0=[10,10];
[t, xvals] = ode45(@(t,x)(A-B*K)*x,[0,5],x0);
u = K(1)*xvals(:,1) + K(2)*xvals(:,2);
figure(1)
plot(t,xvals)
legend('x_1(t)','x_2(t)','Location','best')
xlabel('t');
ylabel('x(t)');
grid on;
figure(2)
plot(t,u)
legend('u(t)','Location','best')
xlabel('t');
ylabel('u(t)');
grid on;

3
Рис.1. Переходные процессы переменных 𝑥 (𝑡) и 𝑥 (𝑡)

Рис.2. Переходной процесс управления u(t)

Сравнивая с результатами, полученными при использовании метода


Эллерта при решении задачи АКОР в ЛР №1, функция fgoalattain тоже
позволяет решить задачу АКОР с большой скоростью вычисления.

4
Задача 2. Используя стандартные процедуры интегрирования
дифференциальных уравнений (ode113, ode45 и др. см. Приложение 3), решить
задачу выведения космического аппарата (КА) на круговую орбиту, если
уравнения движения КА в плоскости выведения OXстYст.
𝑑𝑉
⎧ = 𝑎𝑐𝑜𝑠 𝑣
⎪ 𝑑𝑡
⎪𝑑𝑉
⎪ = 𝑎𝑠𝑖𝑛 𝑣 − 𝑔
𝑑𝑡
⎨ 𝑑𝑋
=𝑉
⎪ 𝑑𝑡
⎪ 𝑑𝑌

=𝑉
⎩ 𝑑𝑡
где Vx и Vy – горизонтальная и вертикальная составляющие скорости V, a=P/m –
ускорение за счет силы тяги, 𝑚 = 𝑚 − 𝑚̇𝑡 – масса КА, v – угол между вектором
горизонтальной скорости и направлением ускорения a, 𝑚̇ – секундный расход
топлива, g=9,81 м/с2 – ускорение свободного падения, μ=3,98602*1014 м3/с2 –
гравитационная постоянная Земли.
Управление меняется по закону: 𝑡𝑔 𝜗 = 𝑡𝑔 𝜗 ∙ 𝐶𝑡, где C определяется из
краевых условий, а область допустимых управлений задана условием: sin 𝑣 +
cos 𝑣 = 1.

Исходные данные согласно варианту 13:


m0 , т mкон , т 𝑚̇, кг/с P, кН
500 50 200 9

Условием окончания процесса интегрирования является выполнение


краевых условий:
𝛷 = 𝑉 (𝑡 ) = 0

𝜇 𝜇
𝛷 = 𝑉 (𝑡 ) − = 𝑉 (𝑡 ) − =0
𝑟(𝑡 )
𝑅зем + (𝑥 ) + (𝑦 )

Время полета:
𝑚 −𝑚
𝑡 =
𝑚̇
5
C и 𝜗 определяются из краевых условий. Аналитическое решение систему
уравнений движения КА громоздкое, поэтому будем найти C и 𝜗 приближенно
с помощью функции:
param0 = [pi/6,0];
param = fminsearch(@func,param0)
func(param)

function f = func(param)
v0 = param(1);
C = param(2);
P = 9000000;
m0 = 500000;
mk = 50000;
dmdt = 200;
g = 9.81;
mu = 3.98602e+14;
R = 6356863;
tk = (m0 - mk)/dmdt;
dxdt = @(t,X) [P / (m0 - dmdt*t) * cos(atan(tan(v0) - C*t));P / (m0 - dmdt*t) *
sin(atan(tan(v0) - C*t)) - g;X(1);X(2)];
X0 = zeros(4,1);
[~,X] = ode45(dxdt, [0 tk], X0);
f1 = X(end,2);
f2 = X(end,1) - sqrt(mu / (R + sqrt(X(end,3)^2 + X(end,4)^2)));
f = f1^2 + f2^2;
end
Если краевая задача имеет решение, то данная функция, минимизируя
значение функции f, дает решение. В результате получим:

param = 0.9277 0.0028

f = 1.5796e-06

Решаем задачу Коши с помощью ode45:

clc
clear all
%Начальные условия
m0 = 500000;
mk = 50000;
m_dot = 50; %секундный расход топлива
P = 9000000;
g = 9.81;
tk = (m0-mk)/m_dot; %время интегрирования
tspan = 0:0.1:tk; % интервал интегрирования
x0 = [0;0;0;0]; % начальные условия
v0 = 0.9277;
C = 0.0028;
% система д.у. уравнений движения КА
dxdt = @(t,x)[P/(m0-m_dot*t)*cos(atan(tan(v0)-C*t));P/(m0
m_dot*t)*sin(atan(tan(v0)-C*t))-g;x(1);x(2)];

6
options=odeset('Events',@events); % условия окончания процесса
интегрирования
[t,x]=ode45(dxdt,tspan,x0,options);% интегрирование

figure(1);
plot(t,x(:,1),'m',t,x(:,2),'g');
xlabel('t, c');
ylabel('V, м/с');
legend('Vx','Vy')
title('Скорость КА')
grid on;
figure(2);
plot(t,x(:,3),'m',t,x(:,4),'b');
xlabel('t, с');
ylabel('Координата, м');
legend('X','Y')
title('Координаты КА')
grid on;
figure(3)
plot(x(:,3),x(:,4))
grid on
title('Траектория КА')
function [value,isterminal,direction]=events(t,x)
myu=3.98602*10^(14); %гравитационная постоянная Земли
Radius=6356863; %радиус Земли
value(1)=x(2); %условия окончания интегрирования
value(2)=x(1)-sqrt(myu/(Radius+sqrt((x(3))^2+(x(4))^2)));
isterminal=1;
direction=-1;
end

Рис. 4. Скорость полета космического аппарата.

7
Рис. 5. Координаты полета космического аппарата.

Рис. 6. Траектория космического аппарата.


Задача 3. Решить, используя метод стрельбы и функцию MATLAB bvp4c или
bvp5c

13) y” + (x-1) y’ + 3.125y = 4x ; y(0) = 1, y(1) = 1.368, на отрезке [0, 1] .

Представим данную задачу в виде системы уравнений первого порядка:

𝑥̇ = 𝑥
𝑥̇ = 4x − (x − 1)𝑥 + 3.125𝑥

где 𝑥 (0) = 1; 𝑥 (1) = 1.368

Решаем краевую задачу через процедуру bvp4c:

8
clc
tinit=linspace(0,1,5);% начальныe значений координаты x (5 точек)
xinit=[1 1];% начальные приближения вектора решений в этих точках
solinit=bvpinit(tinit,xinit);% формирование структуры
dxdt = @(t,x) [x(2); 4*t - (t-1)*x(2) - 3.125*x(1)];
%вычисление правых частей системы д.у.
border = @(xa,xb) [xa(1)-1, xb(1)-1.368]; %граничные условия
sol=bvp4c(dxdt,border,solinit);% решение задачи
tt=linspace(0,1);
xx=deval(sol,tt);% для гладкости полученного решения
plot(tt,xx(1,:));
hold on;
plot(tt,xx(2,:),'m');
grid on
legend('x(t)',"x'(t)")
title('Решение краевой задачи через функцию bvp4c')
xlim([0,1];

Рис. 7. Решение задачи через bv4c.

Метод стрельбы:
Выбираем значения alpha_old и alpha так, чтобы значения x1 - x1(0) имеют
разные знаки:
clc
clear all
x = zeros(2,1);
k = 0;
ips = 10^(-8);
alpha_old = -3;
x0 = [1 alpha_old];
t0 = 0;
tk = 1;
[t,x] = ode45(@uslovie,[t0 tk],x0);
x1_old = x(length(x),1) - 1.368
alpha = 3;
x0 = [1 alpha];
[t,x] = ode45(@uslovie,[t0 tk],x0);

9
x1 = x(length(x),1) - 1.368

Получим:
x1_old =

-3.5622
x1 =
1.2599

Интегрируем задачу Кошу, значения alpha выбираем методом деления пополам:

% Условие окончания процесса интегрирования


while abs(alpha - alpha_old)>ips && k<100
alpha_cen = (alpha + alpha_old)/2;
x0 = [1 alpha_cen];
[t,x] = ode45(@uslovie,[t0 tk],x0);

x1_cen = x(length(x),1)-1.368;
if x1_cen*x1_old < 0
alpha = alpha_cen;
else
alpha_old = alpha_cen;
end
k = k+1;
end

Результаты вычисления:

x2(0) =

1.4323

k = 30.000

Нашли начальное условие x2(0) = 1.4323 после 30 итераций. Построим


графики:

plot(t,x(:,1),'g-',t,x(:,2));
grid on;
title('Решение краевой задачи методом стрельбы')
legend({'x(t)','x*(t)'},'TextColor','blue')
xlim([0,1])

function dx=uslovie(t,x)
dx= [x(2); 4*t - (t-1)*x(2) - 3.125*x(1)];
end

10
Рис. 8. Решение методом стрельбы.

Сравнив рис. 6 и рис. 7 убедимся, что решение краевой задачи методом


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

11

Вам также может понравиться