Академический Документы
Профессиональный Документы
Культура Документы
ОТЧЕТ
по лабораторной работе № 2
по дисциплине
«Оптимальное управление детерминированными процессами »
Группа: ИУ1-72
Проверил: Деменков Н. П.
Практическая работа
Задача 1. Для заданного объекта управления (взять из табл.1) решить
задачу оптимизации, используя любую из стандартных процедур оптимизации
из Optimization Toolbox (fgoalattain, fminimax, fmincon, fminsearch и др см.
Приложения 1 и 2).
k = 45; ζ = 0.1; T = 0.4.
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. Переходные процессы переменных 𝑥 (𝑡) и 𝑥 (𝑡)
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.
𝜇 𝜇
𝛷 = 𝑉 (𝑡 ) − = 𝑉 (𝑡 ) − =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, дает решение. В результате получим:
f = 1.5796e-06
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
7
Рис. 5. Координаты полета космического аппарата.
𝑥̇ = 𝑥
𝑥̇ = 4x − (x − 1)𝑥 + 3.125𝑥
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];
Метод стрельбы:
Выбираем значения 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
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
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. Решение методом стрельбы.
11