Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Moy_kursach.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
175.4 Кб
Скачать

Выбор метода решения оптимизационной задачи

В данной работе будут применены следующие варианты решения оптимизационной задачи:

  1. Метод, основанный на теореме об N интервалах;

  2. Метод параметрической оптимизации линейного закона управления;

  3. Минимизация интегрального квадратичного функционала.

1) Метод, основанный на теореме об n интервалах

Метод, основанный на теореме об N интервалах, заключается в определении N-1 момента переключения знака управляющего воздействия и момента выключения управления, таких, которые обеспечивают перевод судна из начального состояния , , в конечное состояние , , к моменту времени выключения управления, где N - порядок дифференциального уравнения (или системы уравнений), описывающего объект управления.

В рассматриваемом случае теорема об N интервалах применима, т.к. система уравнений, описывающих судно, имеет вещественные корни.

Задачу определения моментов переключения и момента выключения предлагается решать поисковым методом, используя функцию FMINSEARCH из пакета MATLAB или графическим методом с использованием построения фазовых траекторий в обратном времени.

При выполнении расчетов необходимо учесть, что поисковые методы не могут обеспечить точное решение за конечное количество шагов. В связи с этим целесообразно смягчить поставленную задачу, потребовав минимизировать отклонение состояния объекта от требуемого в момент выключения управления.

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

нет

да

Нахождение точек кривой обратного времени

Выбор времени переключения Т1

Нахождение времени переключения Т2

Нахождение переходного процесса при выбранных T1 и Т2

X3≈0?

Вывод графиков

Конец

Расчет осуществляется при помощи трех программ: основной, myfun1 и myfun2. В функции myfun1 производится расчёт фазовой траектории возвращения в 0 в обратном времени, которая затем при помощи программы myfun2 аппроксимируется полиномом 9-го порядка (для того, чтобы иметь значение фазовой траектроии в любой момент времени). Так же обеспечиваются переключения в моменты времени Т1, Т2, Т3. Т1 задаётся при вызове программы, Т2 определяется пересечением фазовой траектории и желаемой траектории, Т3 – при приближении всех переменных состояния к 0. В основной программе при помощи функции fminsearch подбирается оптимальное значение момента переключения Т1, обеспечивающее минимальное время переходного процесса.

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

Текст основной программы:

global Tg; % время переключений (для минимизации времени переходного процесса требуется два переключения) global Tr; % массив обратного времени

global Yr; % массив координат

% дано:

V0=5.65; % скорость хода судна

L=51; % длина по ватерлинии

% коэффициенты математической модели судна

r21=-0.59;

r31=5.32;

q21=0.94;

q31=-2.41;

s21=-0.29;

s31=-3.4;

fi=V0/L; % нормирующая частота

a11=-r31*fi;

a12=-q31*fi^2;

a21=-r21;

a22=-q21*fi;

b11=-s31*fi^2;

b21=-s21*fi;

dt=0.005; %шаг для метода Эйлера

y1i=0;

y2i=0; %данные для метода Эйлера

Tr=0;

Yr=[0,0];

ur=-35*3.14/180; %управление для обратного времени (перевод градусов в радианы)

for t=dt:dt:5

y1j=y1i+dt*(-(a11*y1i+a12*y2i+b11*ur));

y2j=y2i+dt*(-(a21*y1i+a22*y2i+b21*ur));

Tr=[Tr;t]; % массив обратного времени

Yr=[Yr;y1j y2j]; % массив координат в обратном времени

y1i=y1j;

y2i=y2j;

end

t10=6; % начальная точка для функции fminsearch

T1p=fminsearch('myfun',t10); % находим время первого и второго переключения и записываем в массив Time_Switch [Tp1 Tp2]

dt=0.005; % шаг для метода Эйлера

y1i=0;

y2i=0;

y3i=10*3.14/180;

T2=0;

Y2=[y1i,y2i,y3i];

ug=[-35*3.14/180];

Toff=0;

for t=dt:dt:20

if(t<=Tg(1))

u3=-35*3.14/180;

elseif(t<=abs(Tg(2)))

u3=35*3.14/180;

else

u3=-35*3.14/180;

end

if(t>abs(Tg(2)) && y1j<0.000001)

u3=0;

if(Toff==0)

Toff=t; % считываем только первое значение после перехода переменного состояния в ноль

end

end % отключаем управление после устранения начального значения угла рыскания

y1j=y1i+dt*(a11*y1i+a12*y2i+b11*u3);

y2j=y2i+dt*(a21*y1i+a22*y2i+b21*u3);

y3j=y3i+dt*(y1i);

T2=[T2;t];

Y2=[Y2;y1j y2j y3j];

ug=[ug;u3];

y1i=y1j;

y2i=y2j;

y3i=y3j;

end

[Tg Toff]

figure(1)

plot(T2,Y2(:,1),T2,Y2(:,2),T2,Y2(:,3),T2,ug,'m')

legend('x1','x2','x3','u');

xlabel('t,c');

grid on;

figure(2)

plot(Y2(:,1),Y2(:,2),'r',Yr(:,1),Yr(:,2),'b')

xlabel('x1');

ylabel('x2');

grid on;

Текст функции myfun1:

function n=myfun(Tp1) %подбирает время первого переключения

t20=12; % начальная точка для нахождения второго времени переключения

Tp2=fminsearch(@fun2,t20,[],Tp1); %время второго переключения (исходя из расстояния e, найденного в fun2)

V0=5.65; % скорость хода судна

L=51; % длина по ватерлинии

% коэффициенты математической модели судна

r21=-0.59;

r31=5.32;

q21=0.94*1.3;

q31=-2.41;

s21=-0.29;

s31=-3.4;

fi=V0/L; % нормирующая частота

% вычисления элементов матрицы управления и матрицы входов

a11=-r31*fi;

a12=-q31*fi^2;

a21=-r21;

a22=-q21*fi;

b11=-s31*fi^2;

b21=-s21*fi;

dt=0.005;

% начальные переменные состояния

y1i=0;

y2i=0;

y3i=10*3.14/180;

T=0;

Y=[0,0,0];

for t=dt:dt:20 % используем метод Эйлера для расчета нашей системы (сошлись переменные состояния к нулю или нет)

% при времени переключения Tp1 и подобранном относительно него Tp2

if(t<=Tp1)

u2=-35*3.14/180;

elseif(t<=abs(Tp2))

u2=35*3.14/180;

else

u2=-35*3.14/180;

end

if(t>abs(Tp2) && y1j<0.000001)

u2=0;

end

y1j=y1i+dt*(a11*y1i+a12*y2i+b11*u2);

y2j=y2i+dt*(a21*y1i+a22*y2i+b21*u2);

y3j=y3i+dt*(y1i);

T=[T;t];

Y=[Y;y1j y2j y3j];

y1i=y1j;

y2i=y2j;

y3i=y3j;

end

global Tg;

Tg=[Tp1 Tp2]; %записываем полученные значения времен переключения

n=Y(length(T),3)^2; %минимизация третьей переменной изменением Tp1 и зависящего от него Tp2

Текст функции myfun2:

function e=myfun2(Tp2,Tp1) % подбирает время второго переключения в зависимости от первого

% подбираем Tp2 в зависимости от Tp1, взятого из функции myfun1

global Tr;

global Yr;

V0=5.65; % скорость хода судна

L=51; % длина по ватерлинии

% коэффициенты математической модели судна

r21=-0.59;

r31=5.32;

q21=0.94;

q31=-2.41;

s21=-0.29;

s31=-3.4;

fi=V0/L; % нормирующая частота

a11=-r31*fi;

a12=-q31*fi^2;

a21=-r21;

a22=-q21*fi;

b11=-s31*fi^2;

b21=-s21*fi;

dt=0.005;

y1i=0;

y2i=0;

T1=0;

Y1=[0,0];

for t=dt:dt:abs(Tp2) % рассматриваем массив до времени второго переключения (начальное значение Tp2=t20 в fminsearch)

if(t<=Tp1)

u1=-35*3.14/180;

else

u1=35*3.14/180;

end

y1j=y1i+dt*(a11*y1i+a12*y2i+b11*u1);

y2j=y2i+dt*(a21*y1i+a22*y2i+b21*u1);

T1=[T1;t];

Y1=[Y1;y1j y2j];

y1i=y1j;

y2i=y2j;

end

e=1000; % начальное приближение

for j=1:length(Tr)

if(e>((Y1(length(T1),1)-Yr(j,1))^2+(Y1(length(T1),2)-Yr(j,2))^2))

e=(Y1(length(T1),1)-Yr(j,1))^2+(Y1(length(T1),2)-Yr(j,2))^2;

end

end

Результаты работы программы:

Время первого переключения составило 7,22 с;

время второго переключения составило 13,147 с;

время выключения управления -14,225 с;

время переходного процесса при данных параметрах объекта составило

13,86 с.

Графики переходных процессов:

Рис. 1. Переходные процессы в системе.

x1 – (угловая скорость рыскания);

x2 – (угол дрейфа);

x3 – φ (угол рыскания);

u – (угол перекладки руля).

Рис. 2. Фазовые траектории.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]