
- •Задание на курсовую работу
- •Аннотация
- •Введение
- •1. Общие сведения
- •2. Поиск параметров кусочно-постоянной функции времени
- •Определение параметров методом Эйлера
- •Определение параметров с использованием функции ode45
- •Определение параметров с использованием функции ode23
- •3. Поиск параметров полиномиальной функции времени
- •Определение параметров методом Эйлера
- •Определение параметров с использованием функции ode45
- •Определение параметров с использованием функции ode23
- •4. Поиск параметров экспоненциальной функции времени
- •Определение параметров методом Эйлера
- •Определение параметров с использованием функции ode45
- •Определение параметров с использованием функции ode23
- •Заключение
- •Список используемых источников
Определение параметров с использованием функции ode45
Файл main1.m
clear all
clc
P0=[1 1 1 1 1];
OPTIONS = optimset('MaxIter',100000);
[P,F] = fminsearch('fmsfun1',P0,OPTIONS);
Файл fmsfun1.m
function J=fmsfun1(Q)
global P;
P = Q;
OPTIONS = odeset('RelTol', 1e-6);
[t,x] = ode45('odefun1',[0 4],[1 0 0], OPTIONS);
n=length(t);
for k = 1:n
if t(k)<0.8
u(k)=P(1);
elseif t(k)<1.6
u(k)=P(2);
elseif t(k)<2.4
u(k)=P(3);
elseif t(k)<3.2
u(k)=P(4);
else
u(k)=P(5);
end
end
J=x(n,3)+20*(x(n,1)^2);
figure(5)
plot(t,x(:,1),'--black',t,u,'black')
legend('x(t)','u(t)')
grid on;
end
Файл odefun1.m
function F=odefun1(t0,x)
global P;
if t0<0.8
u=P(1);
elseif t0<1.6
u=P(2);
elseif t0<2.4
u=P(3);
elseif t0<3.2
u=P(4);
else
u=P(5);
end
F = [x(2); x(1)-2*x(2)+u; 2*x(1)^2+u^2];
end
Графики переходных процессов, соответствующие рассматриваемой функции времени, показаны на рис. 4.
Рис.
4
В результате поиска были определены следующие значения управляющего воздействия, соответствующие заданным моментам времени:
u(0) = -2.1487
-1.2086
-0.6743
-0.3787
-0.1579
Значение критерия качества J=7.5131
Определение параметров с использованием функции ode23
Файл main1.m
clear all
clc
P0=[1 1 1 1 1];
OPTIONS = optimset('MaxIter',100000);
[P,F] = fminsearch('fmsfun1',P0,OPTIONS);
Файл fmsfun1.m
function J=fmsfun1(Q)
global P;
P = Q;
OPTIONS = odeset('RelTol', 1e-6);
[t,x] = ode23s('odefun1',[0 4],[1 0 0], OPTIONS);
n=length(t);
for k = 1:n
if t(k)<0.8
u(k)=P(1);
elseif t(k)<1.6
u(k)=P(2);
elseif t(k)<2.4
u(k)=P(3);
elseif t(k)<3.2
u(k)=P(4);
else
u(k)=P(5);
end
end
J=x(n,3)+20*(x(n,1)^2);
figure(5)
plot(t,x(:,1),'--black',t,u,'black')
legend('x(t)','u(t)')
grid on;
end
Файл odefun1.m
function F=odefun1(t0,x)
global P;
if t0<0.8
u=P(1);
elseif t0<1.6
u=P(2);
elseif t0<2.4
u=P(3);
elseif t0<3.2
u=P(4);
else
u=P(5);
end
F = [x(2); x(1)-2*x(2)+u; 2*x(1)^2+u^2];
end
Графики переходных процессов, соответствующие рассматриваемой функции времени, показаны на рис. 5.
Рис.
5
В результате поиска были определены следующие значения управляющего воздействия, соответствующие заданным моментам времени:
u(0) = -2.1476
-1.2071
-0.6767
-0.3805
-0.1574
Значение критерия качества J=7.5131
3. Поиск параметров полиномиальной функции времени
Определение параметров методом Эйлера
Файл Eiler2.m
clear all
clc
P0=[1 1 1 1 1];
OPTIONS = optimset('MaxIter',100000);
[P,F]=fminsearch('Eiler_fun2',P0)
Файл Eiler_fun2.m
function j=Eiler_fun2(P)
t0=0;
t_max=4;
t1=0.8;
t2=1.6;
t3=2.4;
t4=3.2;
dt=0.01;
x1=1;
x2=0;
j=0;
x1_res=[];
u_res=[];
t_res=[];
while t0<t_max
u=polyval([P(1) P(2) P(3) P(4) P(5)],t0);
u_res=[u_res u];
dx1=x2*dt;
dx2=x1*dt-2*x2*dt+u*dt;
dj=(2*x1^2+u^2)*dt;
x1=x1+dx1;
x1_res=[x1_res x1];
x2=x2+dx2;
j=j+dj;
t0=t0+dt;
t_res=[t_res t0];
end
j=j+20*x1^2;
figure(1)
plot(t_res,x1_res,'--black',t_res,u_res,'black')
legend('x(t)','u(t)')
grid on
Графики переходных процессов, соответствующие рассматриваемой функции времени, показаны на рис. 6.
Рис. 6
В результате было определено управляющее воздействие как следующая полиномиальная функция времени:
Значение критерия качества J=7.4262.
Оценим влияние шага интегрирования:
dt = 0.1:
Достигнуто значение критерия качества 7.8554
Рис. 7 Управление как кусочно-постоянная функция времени (c шагом 0.1)
dt = 0.5:
Достигнуто значение критерия качества 8.9486
Рис. 8 Управление как кусочно-постоянная функция времени (c шагом 0.5)