Математические и программные модели движения кораблей
Оглавление
Цель работы и исходные данные
. Математическая модель движения кораблей
2. Программная модель движения кораблей в среде Matlab
. Графический интерфейс программы (GUI)
. Результаты исследования программной модели
Выводы
Цель
работы и исходные данные
Цель курсовой работы: разработка математической модели движения кораблей, написание
программной модели и исследование с ее помощью динамических свойств
моделируемых объектов на ПК.
Исходные данные
Основные ТТД надводных кораблей
Исходные данные и ограничения, наложенные на систему, представлены в
таблице 1.
движение корабль программный
Таблица 1
Основные ТТД надводного корабля
|
№ варианта
|
Тип корабля
|
W, т
|
N, л.с.
|
V, узлы/Vк,V1max,V2max, узлы
|
4
|
Легкий крейсер "Красный кавказ
|
9030
|
5500
|
29
|
Основные ТТД катера
|
4
|
Катер "Тритон"
|
2.3
|
150
|
29
|
Основные ТТД корабля на подводных крыльях
|
4
|
-КПК
|
9.4
|
400
|
11
|
13
|
32
|
Необходимо учесть:
1 узел = 1 миля/час = 1852 м / 3600 с = 0.51 м/с
л.с. = 735.5 Вт; 1 Вт = 1 Н×м/с
Ограничения разрабатываемой модели:
. Предполагается, что корабль движется на постоянном курсе.
. Не учитывается волнение моря, гидродинамические особенности корпуса,
переменное воздействие ветра и т.п.
1.
Математическая
модель движения кораблей
Математическая
модель движения надводного водоизмещающего корабля:
где xi+1 - значение координаты на следующем
шаге; xi - значение координаты на текущем
шаге; Δxi - приращение координаты на прошлом
шаге; Pi - относительное значение силы тяги в
процентах от максимальной; Fmax - максимальное значение силы тяги; Δt - шаг приращения времени; A - коэффициент пропорциональности; Δxi+1 - приращение координаты на текущем
шаге; V2max - максимальное значение скорости
корабля.
Математическая модель движения надводного корабля "Красный
Кавказ"
. Шаг приращения времени (принимается) Δt = 1 с.
. Относительное (в процентах от максимальной) допустимое изменение силы
тяги за время Δt = 1 с:
Fmax = Nmax / Vmax=(55000*735.5)/(29*0.51)=2735100 H
ΔFmax =0.1Fmax (т.к. корабль имеет водоизмещение
более 10000т)
ΔPi£
Δt×(ΔFmax/Fmax) ×100 £50%.
. Коэффициент пропорциональности силы сопротивления движению:
=12504
. Координата пройденного расстояния:
xi+1 = xi + (xi-xi-1) + (Pi× 2735100×12/100 - 12504×(xi - xi-1) × êxi - xi-1ê) /9030000.
. Величина текущей скорости:
Vi+1 =
Δxi+1 / Δt = (xi+1 -xi) / 1
Математическая модель движения катера "Тритон"
. Шаг приращения времени (принимается) Δt = 1 с.
. Относительное (в процентах от максимальной) допустимое изменение силы
тяги за время Δt = 1 с:
Fmax = Nmax / Vmax=(150*735.5)/(29*0.51)=7459 Н
ΔFmax =0,2Fmax (т.к. корабль имеет водоизмещение
менее 10000т)
ΔPi£ Δt×(ΔFmax/Fmax) ×100 £10%.
. Коэффициент пропорциональности силы сопротивления движению:
=34.1
. Координата пройденного расстояния:
xi+1 = xi + (xi-xi-1)+(Pi× 7459×1/100-34.1×(xi - xi-1) × êxi - xi-1ê) /2300.
5. Величина текущей скорости:
Vi+1 =
Δxi+1
/ Δt = (xi+1 -xi) / 1
где xi+1 - значение координаты на следующем
шаге; xi - значение координаты на текущем
шаге; Δxi - приращение координаты на прошлом
шаге; Pi - относительное значение силы тяги в
процентах от максимальной; Fmax - максимальное значение силы тяги; Δt - шаг приращения времени; A - коэффициент пропорциональности; Δxi+1 - приращение координаты на текущем
шаге; V21max - максимальное значение скорости
корабля при водоизмещающем режиме; V22max - максимальное значение скорости
корабля при режиме глиссирования и движения на крыльях.
Математическая модель движения корабля на подводных крыльях
. Шаг приращения времени (принимается) Δt = 0.2с.
. Относительное (в процентах от максимальной) допустимое изменение силы
тяги за время Δt = 0.2с:
Fmax = Nmax / Vmax=(150*735,5)/(32*0,51)=18027 H
ΔFmax =0,2Fmax (т.к. корабль имеет водоизмещение
менее 10000т)
ΔPi £ Δt×(ΔFmax/Fmax)×100 £4%.
. Коэффициент пропорциональности силы сопротивления движению:
при V<Vк:
при V³Vк:
.
. Координата пройденного расстояния:
При V<Vк:
xi+1 = xi + (xi - xi-1)
+ (Pi××18027 - 410×(xi - xi-1)× çxi - xi-1ç) /9400.
При V³Vк:
xi+1 = xi + (xi - xi-1) + (Pi××18027 - 68×(xi - xi-1)× çxi - xi-1ç) /9400.
. Величина текущей скорости:
Vi+1 = Δxi+1
/ Δ t = (xi+1 -xi) / 1.
2.
Программная модель движения кораблей в среде Matlab
function varargout = Kurs_gui(varargin)
% KURS_GUI M-file for Kurs_gui.fig
% KURS_GUI, by itself, creates a new KURS_GUI or raises the
existing
% singleton*.
%
% H = KURS_GUI returns the handle to a new KURS_GUI or the
handle to
% the existing singleton*.
%
% KURS_GUI('CALLBACK',hObject,eventData,handles,...) calls
the local
% function named CALLBACK in KURS_GUI.M with the given input
arguments.
%
% KURS_GUI('Property','Value',...) creates a new KURS_GUI or
raises the
% existing singleton*. Starting from the left, property value
pairs are
% applied to the GUI before Kurs_gui_OpeningFunction gets
called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to Kurs_gui_OpeningFcn via
varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI
allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Kurs_gui
% Last Modified by GUIDE v2.5 12-Dec-2011 16:21:28
% Begin initialization code - DO NOT EDIT_Singleton =
1;_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Kurs_gui_OpeningFcn, ...
'gui_OutputFcn', @Kurs_gui_OutputFcn, ...
'gui_LayoutFcn', [], ...
'gui_Callback', []);nargin &
isstr(varargin{1})_State.gui_Callback = str2func(varargin{1});nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});_mainfcn(gui_State, varargin{:});
% End initialization code - DO NOT EDIT
% --- Executes just before Kurs_gui is made
visible.Kurs_gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Kurs_gui (see VARARGIN)
% Choose default command line output for Kurs_gui.output =
hObject;
% Update handles structure(hObject, handles);
% UIWAIT makes Kurs_gui wait for user response (see UIRESUME)
%
uiwait(handles.figure1);(handles.W,'String',0);(handles.N,'String',0);(handles.V1,'String',0);(handles.V1max,'String',0);(handles.V2max,'String',0);
% --- Outputs from this function are returned to the command
line.varargout = Kurs_gui_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see
VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure{1} =
handles.output;
% --- Executes on button press in
ship1.ship1_Callback(hObject, eventdata, handles)
% hObject handle to ship1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see
GUIDATA)get(hObject,'Value')==1(handles.text1,'Visible','On');(handles.text2,'Visible','On');(handles.text3,'Visible','On');(handles.ship2,'Value',
0);(handles.ship3,'Value',
0);(handles.W,'Visible','On');(handles.N,'Visible','On');(handles.V1,'Visible','On');(handles.text6,'Visible','Off');(handles.text7,'Visible','Off');(handles.V1max,'Visible','Off');(handles.V2max,'Visible','Off');(handles.W,'String',9030);(handles.N,'String',55000);(handles.V1,'String',29);(handles.text1,'Visible','Off');(handles.text2,'Visible','Off');(handles.text3,'Visible','Off');(handles.W,'Visible','Off');(handles.N,'Visible','Off');(handles.V1,'Visible','Off');
% Hint: get(hObject,'Value') returns toggle state of ship1
% hObject handle to ship2 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see
GUIDATA)get(hObject,'Value')==1(handles.text1,'Visible','On');(handles.text2,'Visible','On');(handles.text3,'Visible','On');(handles.ship1,'Value',
0);(handles.ship3,'Value',
0);(handles.W,'Visible','On');(handles.N,'Visible','On');(handles.V1,'Visible','On');(handles.text6,'Visible','Off');(handles.text7,'Visible','Off');(handles.V1max,'Visible','Off');(handles.V2max,'Visible','Off');(handles.W,'String',2.3);(handles.N,'String',150);(handles.V1,'String',29);(handles.text1,'Visible','Off');(handles.text2,'Visible','Off');(handles.text3,'Visible','Off');(handles.W,'Visible','Off');(handles.N,'Visible','Off');(handles.V1,'Visible','Off');
% Hint: get(hObject,'Value') returns toggle state of ship2
% --- Executes on button press in
ship3.ship3_Callback(hObject, eventdata, handles)
% hObject handle to ship3 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see
GUIDATA)get(hObject,'Value')==1(handles.text1,'Visible','On');(handles.text2,'Visible','On');(handles.text3,'Visible','On');(handles.text6,'Visible','On');(handles.text7,'Visible','On');(handles.ship1,'Value',
0);(handles.ship2,'Value',
0);(handles.W,'Visible','On');(handles.N,'Visible','On');(handles.V1,'Visible','On');(handles.V1max,'Visible','On');(handles.V2max,'Visible','On');(handles.W,'String',9.4);(handles.N,'String',400);(handles.V1,'String',11);(handles.V1max,'String',13);(handles.V2max,'String',32);(handles.text1,'Visible','Off');(handles.text2,'Visible','Off');(handles.text3,'Visible','Off');(handles.text6,'Visible','Off');(handles.text7,'Visible','Off');(handles.W,'Visible','Off');(handles.N,'Visible','Off');(handles.V1,'Visible','Off');(handles.V1max,'Visible','Off');(handles.V2max,'Visible','Off');
% Hint: get(hObject,'Value') returns toggle state of ship3
% --- Executes on button press in
close.close_Callback(hObject, eventdata, handles)
% hObject handle to close (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in
change.change_Callback(hObject, eventdata, handles)
% hObject handle to change (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see
GUIDATA)get(hObject,'Value')==1(handles.W,'Style','edit');(handles.N,'Style','edit');(handles.V1,'Style','edit');(handles.V1max,'Style','edit');(handles.V2max,'Style','edit');
% --- Executes on button press in ok.ok_Callback(hObject,
eventdata, handles)
% hObject handle to ok (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see
GUIDATA)(get(handles.ship1,'Value')==1 ||
get(handles.ship2,'Value')==1)get(handles.ship3,'Value')==1(handles.text15,'Visible','On');(handles.text16,'Visible','On');(handles.text17,'Visible','On');tab_Callback(hObject,
eventdata, handles)
% hObject handle to tab (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see
GUIDATA)(get(handles.ship1,'Value')==1 || get(handles.ship2,'Value')==1)get(handles.ship3,'Value')==1=[];
j=1;get(handles.ship1,'Value')==1i=1:5:length(tt),(j,:)=[tt(i), XX(i), vv(i),
pp(i)];=j+1;(get(handles.ship2,'Value')==1 ||
get(handles.ship3,'Value')==1)i=1:1:length(tt),(j,:)=[tt(i), XX(i), vv(i), pp(i)];=j+1;('%s','
Время Путь Скорость Тяга')(B)
Текст скрипта KursoviK.m
W_h = handles.W; %
выбор объекта а1 из родительского объекта
W = str2double(get(W_h,'String')); %
извлечение численного значения из объекта а1
N_h = handles.N;= str2double(get(N_h,'String'));_h =
handles.V1;= str2double(get(V_h,'String'));
% W=9030; N=55000; V=29;
% 1 шаг приращения
dt=1;
% перевод в сист Си
W1=W*1000; N1=N*735.5; V1=V*0.51;
Fmax=N1/V1;get(handles.ship1,'Value')==1=0.1*Fmax;get(handles.ship2,'Value')==1=0.2*Fmax;
% 2=dt*(dFmax/Fmax)*100;
% 3
A=Fmax/(V1^2);
% Пройденное расстояние
xi=0; x_pre=0; P=0; t=0;
global tt; global XX; global vv; global pp;=[]; tt=[]; vv=[];
pp=[];
while P<100 % разгон
+ выход на макс значение силы тяги
X=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];=[pp,P];_pre=xi;
xi=X;=P+dP;=[tt,t];=[XX,X];=t+dt;
end;
while v<0.98*V1, % разгон на макс тяге до макс
скорости
X=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];=[pp,P];_pre=xi;
xi=X;=[tt,t];=[XX,X];=t+dt;
end;
while P>-100, %
торможение, выход на обратную силу тяги
X=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];_pre=xi;
xi=X;=[pp,P];=P-dP;=[tt,t];=[XX,X];=t+dt;
end;
while v>0.02, %
торможение, до нуля
X=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];=[pp,P];_pre=xi;
xi=X;=[tt,t];=[XX,X];=t+dt;;get(handles.ok,'Value')==1(handles.XX_plot,'Visible','On');(handles.XX_plot);;(tt,XX),
grid;(handles.vv_plot,'Visible','On');(handles.vv_plot);;(tt,vv),
grid(handles.pp_plot,'Visible','On');(handles.pp_plot);;(tt,pp), grid
Текст скрипта KursoviKPK.m
% W=9.4; N=400; V_k=11; V_1max=13; V_2max=32;_h = handles.W; % выбор объекта а1 из родительского
объекта
W = str2double(get(W_h,'String')); %
извлечение численного значения из объекта а1
N_h = handles.N;= str2double(get(N_h,'String'));_h =
handles.V1;_k = str2double(get(Vk_h,'String'));max_h = handles.V1max;_1max =
str2double(get(V1max_h,'String'));max_h = handles.V2max;_2max=
str2double(get(V2max_h,'String'));
% 1 шаг приращения
dt=1;
% перевод в сист Си
W1=W*1000; N1=N*735.5; Vk=V_k*0.51; V1max=V_1max*0.51;
V2max=V_2max*0.51;=N1/V2max; dFmax=0.2*Fmax;
% 2=dt*(dFmax/Fmax)*100;
% 3=Fmax/(V1max^2); A2=Fmax/(V2max^2);
% Пройденное расстояние
xi=0; x_pre=0; P=0; t=0; v=0;
global tt; global XX; global vv; global pp;=[]; tt=[]; vv=[];
pp=[]; AA=[];
P<100 % разгон + выход на макс
значение силы тяги
if(v<Vk)=A1;(v>=V1max)=A2;(Vk<=v & v<V1max)=A1-(v-Vk)*(A1-A2)/(V1max-Vk);=[AA,A];=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];=[pp,P];_pre=xi;
xi=X;=P+dP;=[tt,t];=[XX,X];=t+dt;
end;
while v<0.98*V2max, % разгон на макс тяге до макс скорости
if(v<Vk)=A1;(v>=V1max)=A2;(Vk<=v &
v<V1max)=A1-(v-Vk)*(A1-A2)/(V1max-Vk);=[AA,A];=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];=[pp,P];_pre=xi;
xi=X;=[tt,t];=[XX,X];=t+dt;;P>-100,(v<Vk)=A1;(v>=V1max)=A2;(Vk<=v &
v<V1max)=A1-(v-Vk)*(A1-A2)/(V1max-Vk);=[AA,A];=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];_pre=xi;
xi=X;=[pp,P];=P-dP;=[tt,t];=[XX,X];=t+dt;;v>0.02,(v<Vk)=A1;(v>=V1max)=A2;(Vk<=v
& v<V1max)=A1-(v-Vk)*(A1-A2)/(V1max-Vk);=xi+(xi-x_pre)+(P*Fmax*(dt^2)/100-A*(xi-x_pre)*abs(xi-x_pre))/W1;=(X-xi)/dt;=[vv,v];=[pp,P];_pre=xi;
xi=X;=[tt,t];=[XX,X];=t+dt;;get(handles.ok,'Value')==1(handles.XX_plot,'Visible','On');(handles.XX_plot);;(tt,XX),
grid;(handles.vv_plot,'Visible','On');(handles.vv_plot);;(tt,vv),
grid(handles.pp_plot,'Visible','On');(handles.pp_plot);;(tt,pp), grid
end
3.
Графический интерфейс программы (GUI)
Для удобного вывода рассчитанной информации в среде MATLAB был разработан графический
интерфейс, представленный на рис. 1.
Рис.1 Графический интерфейс программы
Для создания интерфейса были использованы следующие компоненты:
1. Radio Button -
переключатель кораблей.
2. Axes- поля для построения графиков пройденного пути, скорости и силы тяги.
3. Push Button - кнопки. Change parameters - возможность изменять значения
основных ТТД кораблей. ОК - кнопка, при нажатии на которую происходят основные
расчеты и вывод графиков. Close - кнопка закрытия окна.
4. Static Text - статический
текст. В данной работе была реализована возможность изменения видимости тех или
иных частей теста.
5. Edit Text -изменяемый
пользователем текст. Возможность редактирования текста появляется при нажатии
кнопки Change parameters.
6. Menu - меню, к котором была реализована возможность вывести в командное окно
таблицы с результатами работы программы.
4.
Результаты исследования программной модели
С помощью созданного интерфейса были получены динамические характеристики
трёх типов судов.
Рис.2 Результат работы программы, графики для легкого
крейсера "Красный Кавказ"
Таблица 2
Таблица значений основных показателей движения:
С помощью представленных результатов работы программы было определено:
время набора максимальной скорости 14,5м/с - 115 с; при этом корабль
проходит расстояние 1009,5 м;
время торможения - 50 с, на расстояние - 402 м;
общее время движения катера составило - 165 с;
общая пройденная кораблем дистанция - 1555.8 м.
Рис.3 Результат работы программы, графики для катера "Тритон"
Таблица 3
Таблица значений основных показателей движения:
С помощью представленных результатов работы программы было определено:
время набора максимальной скорости 14,6м/с - 12 с; при этом корабль
проходит расстояние 115.7 м;
время торможения - 9 с, на расстояние - 72.8 м;
общее время движения катера составило - 21 с;
общая пройденная кораблем дистанция - 118.48 м.
Рис.4 Результат работы программы, графики для корабля на подводных
крыльях
Таблица 4
Таблица значений основных показателей движения:
С помощью представленных результатов работы программы было определено:
время набора максимальной скорости 16.09м/с - 23 с; при этом корабль
проходит расстояние 243.5 м;
время торможения - 12 с, на расстояние - 102.8 м;
общее время движения катера составило - 35 с;
общая пройденная кораблем дистанция - 346 м.
Выводы
При выполнении данной курсовой работы были разработаны математические и
программные модели описания движения трёх видов судов. В соответствии с
исходными данными при помощи разработанного программного интерфейса в MATLAB были исследованы динамические
свойства моделируемых кораблей и получены их динамические характеристики.