Математические и программные модели движения кораблей

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Оглавление

  • Цель работы и исходные данные
  • 1. Математическая модель движения кораблей
  • 2. Программная модель движения кораблей в среде Matlab
  • 3. Графический интерфейс программы (GUI)
  • 4. Результаты исследования программной модели

Выводы

Цель работы и исходные данные

Цель курсовой работы: разработка математической модели движения кораблей, написание программной модели и исследование с ее помощью динамических свойств моделируемых объектов на ПК.

Исходные данные

Основные ТТД надводных кораблей

Исходные данные и ограничения, наложенные на систему, представлены в таблице 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 м/с

1 л.с. = 735.5 Вт; 1 Вт = 1 Нм/с

Ограничения разрабатываемой модели:

1. Предполагается, что корабль движется на постоянном курсе.

2. Не учитывается волнение моря, гидродинамические особенности корпуса, переменное воздействие ветра и т. п.

1. Математическая модель движения кораблей

Математическая модель движения надводного водоизмещающего корабля:

где xi+1 — значение координаты на следующем шаге; xi — значение координаты на текущем шаге; Дxi — приращение координаты на прошлом шаге; Pi — относительное значение силы тяги в процентах от максимальной; Fmax — максимальное значение силы тяги; Дt — шаг приращения времени; A — коэффициент пропорциональности; Дxi+1 — приращение координаты на текущем шаге; V2max — максимальное значение скорости корабля.

Математическая модель движения надводного корабля «Красный Кавказ»

1. Шаг приращения времени (принимается) Дt = 1 с.

2. Относительное (в процентах от максимальной) допустимое изменение силы тяги за время Дt = 1 с:

Fmax = Nmax / Vmax=(55 000*735. 5)/(29*0. 51)=2 735 100 H

ДFmax =0. 1Fmax (т.к. корабль имеет водоизмещение более 10 000т)

ДPi Дt (ДFmax/Fmax) 100 50%.

3. Коэффициент пропорциональности силы сопротивления движению:

=12 504

4. Координата пройденного расстояния:

xi+1 = xi + (xi-xi-1) + (Pi 27 351 0012/100 — 12504(xi — xi-1) xi — xi-1) /9 030 000.

5. Величина текущей скорости:

Vi+1 =--Дxi+1 / Дt = (xi+1 -xi) / 1

Математическая модель движения катера «Тритон»

1. Шаг приращения времени (принимается) Дt = 1 с.

2. Относительное (в процентах от максимальной) допустимое изменение силы тяги за время Дt = 1 с:

Fmax = Nmax / Vmax=(150*735. 5)/(29*0. 51)=7459 Н

ДFmax =0,2Fmax (т.к. корабль имеет водоизмещение менее 10 000т)

ДPi Дt (ДFmax/Fmax) 100 10%.

3. Коэффициент пропорциональности силы сопротивления движению:

=34. 1

4. Координата пройденного расстояния:

xi+1 = xi + (xi-xi-1)+(Pi 74 591/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 — максимальное значение скорости корабля при режиме глиссирования и движения на крыльях.

Математическая модель движения корабля на подводных крыльях

1. Шаг приращения времени (принимается) Дt = 0. 2с.

2. Относительное (в процентах от максимальной) допустимое изменение силы тяги за время Дt = 0. 2с:

Fmax = Nmax / Vmax=(150*735,5)/(32*0,51)=18 027 H

ДFmax =0,2Fmax (т.к. корабль имеет водоизмещение менее 10 000т)

ДPi Дt (ДFmax/Fmax)100 4%.

3. Коэффициент пропорциональности силы сопротивления движению:

-при V< Vк:

-при VVк:.

4. Координата пройденного расстояния:

При V< Vк:

xi+1 = xi + (xi — xi-1) + (Pi18 027 — 410(xi — xi-1) xi — xi-1) /9400.

При VVк:

xi+1 = xi + (xi — xi-1) + (Pi18 027 — 68(xi — xi-1) xi — xi-1) /9400.

5. Величина текущей скорости:

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

gui_Singleton = 1;

gui_State = struct ('gui_Name', mfilename, …

'gui_Singleton', gui_Singleton, …

'gui_OpeningFcn', @Kurs_gui_OpeningFcn, …

'gui_OutputFcn', @Kurs_gui_OutputFcn, …

'gui_LayoutFcn', [], …

'gui_Callback', []);

if nargin & isstr (varargin{1})

gui_State. gui_Callback = str2func (varargin{1});

end

if nargout

[varargout{1: nargout}] = gui_mainfcn (gui_State, varargin{: });

else

gui_mainfcn (gui_State, varargin{: });

end

% End initialization code — DO NOT EDIT

% --- Executes just before Kurs_gui is made visible.

function 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

handles. output = hObject;

% Update handles structure

guidata (hObject, handles);

% UIWAIT makes Kurs_gui wait for user response (see UIRESUME)

% uiwait (handles. figure1);

set (handles. W,'String', 0);

set (handles. N,'String', 0);

set (handles. V1,'String', 0);

set (handles. V1max,'String', 0);

set (handles. V2max,'String', 0);

% --- Outputs from this function are returned to the command line.

function 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

varargout{1} = handles. output;

% --- Executes on button press in ship1.

function 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)

if get (hObject,'Value')==1

set (handles. text1,'Visible','On');

set (handles. text2,'Visible','On');

set (handles. text3,'Visible','On');

set (handles. ship2,'Value', 0);

set (handles. ship3,'Value', 0);

set (handles. W,'Visible','On');

set (handles. N,'Visible','On');

set (handles. V1,'Visible','On');

set (handles. text6,'Visible','Off');

set (handles. text7,'Visible','Off');

set (handles. V1max,'Visible','Off');

set (handles. V2max,'Visible','Off');

set (handles. W,'String', 9030);

set (handles. N,'String', 55 000);

set (handles. V1,'String', 29);

else

set (handles. text1,'Visible','Off');

set (handles. text2,'Visible','Off');

set (handles. text3,'Visible','Off');

set (handles. W,'Visible','Off');

set (handles. N,'Visible','Off');

set (handles. V1,'Visible','Off');

end

% Hint: get (hObject,'Value') returns toggle state of ship1

% --- Executes on button press in ship2.

function ship2_Callback (hObject, eventdata, handles)

% 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)

if get (hObject,'Value')==1

set (handles. text1,'Visible','On');

set (handles. text2,'Visible','On');

set (handles. text3,'Visible','On');

set (handles. ship1,'Value', 0);

set (handles. ship3,'Value', 0);

set (handles. W,'Visible','On');

set (handles. N,'Visible','On');

set (handles. V1,'Visible','On');

set (handles. text6,'Visible','Off');

set (handles. text7,'Visible','Off');

set (handles. V1max,'Visible','Off');

set (handles. V2max,'Visible','Off');

set (handles. W,'String', 2. 3);

set (handles. N,'String', 150);

set (handles. V1,'String', 29);

else

set (handles. text1,'Visible','Off');

set (handles. text2,'Visible','Off');

set (handles. text3,'Visible','Off');

set (handles. W,'Visible','Off');

set (handles. N,'Visible','Off');

set (handles. V1,'Visible','Off');

end

% Hint: get (hObject,'Value') returns toggle state of ship2

% --- Executes on button press in ship3.

function 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)

if get (hObject,'Value')==1

set (handles. text1,'Visible','On');

set (handles. text2,'Visible','On');

set (handles. text3,'Visible','On');

set (handles. text6,'Visible','On');

set (handles. text7,'Visible','On');

set (handles. ship1,'Value', 0);

set (handles. ship2,'Value', 0);

set (handles. W,'Visible','On');

set (handles. N,'Visible','On');

set (handles. V1,'Visible','On');

set (handles. V1max,'Visible','On');

set (handles. V2max,'Visible','On');

set (handles. W,'String', 9. 4);

set (handles. N,'String', 400);

set (handles. V1,'String', 11);

set (handles. V1max,'String', 13);

set (handles. V2max,'String', 32);

else

set (handles. text1,'Visible','Off');

set (handles. text2,'Visible','Off');

set (handles. text3,'Visible','Off');

set (handles. text6,'Visible','Off');

set (handles. text7,'Visible','Off');

set (handles. W,'Visible','Off');

set (handles. N,'Visible','Off');

set (handles. V1,'Visible','Off');

set (handles. V1max,'Visible','Off');

set (handles. V2max,'Visible','Off');

end

% Hint: get (hObject,'Value') returns toggle state of ship3

% --- Executes on button press in close.

function 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)

close

% --- Executes on button press in change.

function 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)

if get (hObject,'Value')==1

set (handles. W,'Style','edit');

set (handles. N,'Style','edit');

set (handles. V1,'Style','edit');

set (handles. V1max,'Style','edit');

set (handles. V2max,'Style','edit');

end

% --- Executes on button press in ok.

function 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)

if (get (handles. ship1,'Value')==1 || get (handles. ship2,'Value')==1)

KursoviK

elseif get (handles. ship3,'Value')==1

KursoviKPK

end

set (handles. text15,'Visible','On');

set (handles. text16,'Visible','On');

set (handles. text17,'Visible','On');

function 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)

if (get (handles. ship1,'Value')==1 || get (handles. ship2,'Value')==1)

KursoviK

elseif get (handles. ship3,'Value')==1

KursoviKPK

end

B=[]; j=1;

if get (handles. ship1,'Value')==1

for i=1: 5: length (tt),

B (j:)=[tt (i), XX (i), vv (i), pp (i)];

j=j+1;

end

end

i (get (handles. ship2,'Value')==1 || get (handles. ship3,'Value')==1)

for i=1: 1: length (tt),

B (j:)=[tt (i), XX (i), vv (i), pp (i)];

j=j+1;

end

endsprintf ('%s',' Время Путь Скорость Тяга')

disp (B)

Текст скрипта KursoviK. m

clc

W_h = handles. W; % выбор объекта а1 из родительского объекта

W = str2double (get (W_h,'String')); % извлечение численного значения из объекта а1

N_h = handles. N;

N = str2double (get (N_h,'String'));

V_h = handles. V1;

V = str2double (get (V_h,'String'));

% W=9030; N=55 000; V=29;

% 1 шаг приращения

dt=1;

% перевод в сист Си

W1=W*1000; N1=N*735. 5; V1=V*0. 51;

Fmax=N1/V1;

if get (handles. ship1,'Value')==1

dFmax=0. 1*Fmax;

end

if get (handles. ship2,'Value')==1

dFmax=0. 2*Fmax;

end

% 2

dP=dt*(dFmax/Fmax)*100;

% 3

A=Fmax/(V12);

% Пройденное расстояние

xi=0; x_pre=0; P=0; t=0;

global tt; global XX; global vv; global pp;

XX=[]; tt=[]; vv=[]; pp=[];

while P< 100% разгон + выход на макс значение силы тяги

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

pp=[pp, P];

x_pre=xi; xi=X;

P=P+dP;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

while v<0. 98*V1, % разгон на макс тяге до макс скорости

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

pp=[pp, P];

x_pre=xi; xi=X;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

while P> -100, % торможение, выход на обратную силу тяги

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

x_pre=xi; xi=X;

pp=[pp, P];

P=P-dP;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

while v>0. 02, % торможение, до нуля

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

pp=[pp, P];

x_pre=xi; xi=X;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

if get (handles. ok,'Value')==1

set (handles. XX_plot,'Visible','On');

axes (handles. XX_plot);

cla;

plot (tt, XX), grid;

set (handles. vv_plot,'Visible','On');

axes (handles. vv_plot);

cla;

plot (tt, vv), grid

set (handles. pp_plot,'Visible','On');

axes (handles. pp_plot);

cla;

plot (tt, pp), grid

end

Текст скрипта KursoviKPK. m

clc

% W=9. 4; N=400; V_k=11; V_1max=13; V_2max=32;

W_h = handles. W; % выбор объекта а1 из родительского объекта

W = str2double (get (W_h,'String')); % извлечение численного значения из объекта а1

N_h = handles. N;

N = str2double (get (N_h,'String'));

Vk_h = handles. V1;

V_k = str2double (get (Vk_h,'String'));

V1max_h = handles. V1max;

V_1max = str2double (get (V1max_h,'String'));

V2max_h = handles. V2max;

V_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;

Fmax=N1/V2max; dFmax=0. 2*Fmax;

% 2

dP=dt*(dFmax/Fmax)*100;

% 3

A1=Fmax/(V1max2); A2=Fmax/(V2max2);

% Пройденное расстояние

xi=0; x_pre=0; P=0; t=0; v=0;

global tt; global XX; global vv; global pp;

XX=[]; tt=[]; vv=[]; pp=[]; AA=[];

while P< 100% разгон + выход на макс значение силы тяги

if (v< Vk)

A=A1;

end

if (v> =V1max)

A=A2;

end

if (Vk< =v & v< V1max)

A=A1-(v-Vk)*(A1-A2)/(V1max-Vk);

end

AA=[AA, A];

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

pp=[pp, P];

x_pre=xi; xi=X;

P=P+dP;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

while v<0. 98*V2max, % разгон на макс тяге до макс скорости

if (v< Vk)

A=A1;

end

if (v> =V1max)

A=A2;

end

if (Vk< =v & v< V1max)

A=A1-(v-Vk)*(A1-A2)/(V1max-Vk);

end

AA=[AA, A];

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

pp=[pp, P];

x_pre=xi; xi=X;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

while P> -100,

if (v< Vk)

A=A1;

end

if (v> =V1max)

A=A2;

end

if (Vk< =v & v< V1max)

A=A1-(v-Vk)*(A1-A2)/(V1max-Vk);

end

AA=[AA, A];

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

x_pre=xi; xi=X;

pp=[pp, P];

P=P-dP;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

while v>0. 02,

if (v< Vk)

A=A1;

end

if (v> =V1max)

A=A2;

end

if (Vk< =v & v< V1max)

A=A1-(v-Vk)*(A1-A2)/(V1max-Vk);

end

X=xi+(xi-x_pre)+(P*Fmax*(dt2)/100-A*(xi-x_pre)*abs (xi-x_pre))/W1;

v=(X-xi)/dt;

vv=[vv, v];

pp=[pp, P];

x_pre=xi; xi=X;

tt=[tt, t];

XX=[XX, X];

t=t+dt;

end;

if get (handles. ok,'Value')==1

set (handles. XX_plot,'Visible','On');

axes (handles. XX_plot);

cla;

plot (tt, XX), grid;

set (handles. vv_plot,'Visible','On');

axes (handles. vv_plot);

cla;

plot (tt, vv), grid

set (handles. pp_plot,'Visible','On');

axes (handles. pp_plot);

cla;

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 были исследованы динамические свойства моделируемых кораблей и получены их динамические характеристики.

ПоказатьСвернуть
Заполнить форму текущей работой