✅作者简介:热爱数据处理、建模、算法设计的Matlab仿真开发者。
🍎更多Matlab代码及仿真咨询内容点击 🔗:Matlab科研工作室
🍊个人信条:格物致知。
🔥 内容介绍
在海洋工程领域,船舶的运动是一个非常重要的研究方向。在海洋中,船舶的运动受到各种因素的影响,如风浪、潮汐、海流等等。因此,为了更好地研究船舶的运动,我们需要建立一些数学模型来描述这些因素对船舶运动的影响。
其中,风浪流模型是一种常用的模型。该模型将海洋中的风浪和海流作为一个整体来考虑,可以更加准确地描述船舶在海洋中的运动。在风浪流模型下,船舶的运动可以分为六度自由度运动和三度自由度运动。其中,三度自由度运动是指船舶在横向、纵向和横摇方向上的运动。
在三度自由度运动中,横向运动是指船舶在水平方向上的运动,也称为“横荡”。当船舶受到侧向力时,会产生横向运动。纵向运动是指船舶在垂直方向上的运动,也称为“纵荡”。当船舶受到前后方向的力时,会产生纵向运动。横摇运动是指船舶在水平面内绕中心线旋转的运动。当船舶受到横向力矩时,会产生横摇运动。
在研究船舶的三度自由度运动时,我们需要考虑一些重要的因素,如船舶的结构特征、船舶的质量分布、风浪流的力学特性等等。通过建立数学模型,我们可以更加准确地描述船舶在海洋中的运动。
除了数学模型外,我们还可以通过实验来验证模型的准确性。在实验中,我们可以通过模拟海洋中的风浪流环境,对船舶的运动进行观测和记录。通过实验数据的分析,我们可以验证数学模型的准确性,并不断完善模型,使其更加符合实际情况。
总之,在海洋工程领域,船舶的运动是一个非常重要的研究方向。通过建立数学模型和实验验证,我们可以更加准确地描述船舶在海洋中的运动,为海洋工程的设计和建设提供更加可靠的数据和方法。
📣 部分代码
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% wind disturbance of the surface vessel 201 ZKW 2013.3.10 %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
function F_wind = F_feng1(windspeed, angle_w,eta)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 无因次风系数cx,cy,cn 的计算使用 Isherwood (1972)经验公式
% 输入量:
% gamma_r = 相对风角(风弦角) (rad)
% V_r = 相对风速 (m/s)<假设风速远大于船速,V_r即约为实际风速
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
L=185; % 船全长 (m)
B=39.2; % 船宽 (m)
A_L=320; % 水线以上船舶正投影面积 (m^2)
A_T=1480; % 水线以上船舶侧投影面积 (m^2)
A_SS=3129; % 上层部分的正投影面积 (m^2)
S=450; % 除吃水线和船桅、通气设备等细长体外的船模型的正投影周长 (m)
C=95; % 从船首到正投影面积的矩心的距离 (m)
M=1; % 正投影面内可见的船桅或中柱的不同组数;不包括紧贴船桥前部的中柱。
rho_a = 1.224; % 20摄氏度时的空气密度
%%%%%将风向绝对角转换为风向相对角%%%%%
if (angle_w>=pi)
angle_w = 2*pi-angle_w;
else
angle_w = -angle_w;
end
%%%%%算上艏向偏差%%%%%
angle_w= angle_w/pi*180 + eta(3);
%%%%%保证相对风向角的范围%%%%%
if (angle_w>=180)
angle_w = angle_w-360;
elseif (angle_w<=-180)
angle_w = angle_w+360;
end
if(angle_w<0)
gamma=angle_w+180;
else
gamma=angle_w;
end
V_r = windspeed;
%%%%%CX_data = [gamma_r A0 A1 A2 A3 A4 A5 A6 ]%%%%%
CX_data= [...
0 2.152 -5.00 0.243 -0.164 0 0 0
10 1.714 -3.33 0.145 -0.121 0 0 0
20 1.818 -3.97 0.211 -0.143 0 0 0.033
30 1.965 -4.81 0.243 -0.154 0 0 0.041
40 2.333 -5.99 0.247 -0.190 0 0 0.042
50 1.726 -6.54 0.189 -0.173 0.348 0 0.048
60 0.913 -4.68 0 -0.104 0.482 0 0.052
70 0.457 -2.88 0 -0.068 0.346 0 0.043
80 0.341 -0.91 0 -0.031 0 0 0.032
90 0.355 0 0 0 -0.247 0 0.018
100 0.601 0 0 0 -0.372 0 -0.020
110 0.651 1.29 0 0 -0.582 0 -0.031
120 0.564 2.54 0 0 -0.748 0 -0.024
130 -0.142 3.58 0 0.047 -0.700 0 -0.028
140 -0.677 3.64 0 0.069 -0.529 0 -0.032
150 -0.723 3.14 0 0.064 -0.475 0 -0.032
160 -2.148 2.56 0 0.081 0 1.27 -0.027
170 -2.707 3.97 -0.175 0.126 0 1.81 0
180 -2.529 3.76 -0.174 0.128 0 1.55 0 ];
%%%%%CY_data = [gamma_r B0 B1 B2 B3 B4 B5 B6]%%%%%
CY_data = [...
0 0 0 0 0 0 0 0
10 0.096 0.22 0 0 0 0 0
20 0.176 0.71 0 0 0 0 0
30 0.225 1.38 0 0.023 0 -0.29 0
40 0.329 1.82 0 0.043 0 -0.59 0
50 1.164 1.26 0.121 0 -0.242 -0.95 0
60 1.163 0.96 0.101 0 -0.177 -0.88 0
70 0.916 0.53 0.069 0 0 -0.65 0
80 0.844 0.55 0.082 0 0 -0.54 0
90 0.889 0 0.138 0 0 -0.66 0
100 0.799 0 0.155 0 0 -0.55 0
110 0.797 0 0.151 0 0 -0.55 0
120 0.996 0 0.184 0 -0.212 -0.66 0.34
130 1.014 0 0.191 0 -0.280 -0.69 0.44
140 0.784 0 0.166 0 -0.209 -0.53 0.38
150 0.536 0 0.176 -0.029 -0.163 0 0.27
160 0.251 0 0.106 -0.022 0 0 0
170 0.125 0 0.046 -0.012 0 0 0
180 0 0 0 0 0 0 0 ];
%%%%%CN_data = [gamma_r C0 C1 C2 C3 C4 C5]%%%%%
CN_data = [...
0 0 0 0 0 0 0
10 0.0596 0.061 0 0 0 -0.074
20 0.1106 0.204 0 0 0 -0.170
30 0.2258 0.245 0 0 0 -0.380
40 0.2017 0.457 0 0.0067 0 -0.472
50 0.1759 0.573 0 0.0118 0 -0.523
60 0.1925 0.480 0 0.0115 0 -0.546
70 0.2133 0.315 0 0.0081 0 -0.526
80 0.1827 0.254 0 0.0053 0 -0.443
90 0.2627 0 0 0 0 -0.508
100 0.2102 0 -0.0195 0 0.0335 -0.492
110 0.1567 0 -0.0258 0 0.0497 -0.457
120 0.0801 0 -0.0311 0 0.0740 -0.396
130 -0.0189 0 -0.0488 0.0101 0.1128 -0.420
140 0.0256 0 -0.0422 0.0100 0.0889 -0.463
150 0.0552 0 -0.0381 0.0109 0.0689 -0.476
160 0.0881 0 -0.0306 0.0091 0.0366 -0.415
170 0.0851 0 -0.0122 0.0025 0 -0.220
180 0 0 0 0 0 0 ];
%%%%%对上表进行插值%%%%%
A0 = interp1(CX_data(:,1),CX_data(:,2),gamma);
A1 = interp1(CX_data(:,1),CX_data(:,3),gamma);
A2 = interp1(CX_data(:,1),CX_data(:,4),gamma);
A3 = interp1(CX_data(:,1),CX_data(:,5),gamma);
A4 = interp1(CX_data(:,1),CX_data(:,6),gamma);
A5 = interp1(CX_data(:,1),CX_data(:,7),gamma);
A6 = interp1(CX_data(:,1),CX_data(:,8),gamma);
B0 = interp1(CY_data(:,1),CY_data(:,2),gamma);
B1 = interp1(CY_data(:,1),CY_data(:,3),gamma);
B2 = interp1(CY_data(:,1),CY_data(:,4),gamma);
B3 = interp1(CY_data(:,1),CY_data(:,5),gamma);
B4 = interp1(CY_data(:,1),CY_data(:,6),gamma);
B5 = interp1(CY_data(:,1),CY_data(:,7),gamma);
B6 = interp1(CY_data(:,1),CY_data(:,8),gamma);
C0 = interp1(CN_data(:,1),CN_data(:,2),gamma);
C1 = interp1(CN_data(:,1),CN_data(:,3),gamma);
C2 = interp1(CN_data(:,1),CN_data(:,4),gamma);
C3 = interp1(CN_data(:,1),CN_data(:,5),gamma);
C4 = interp1(CN_data(:,1),CN_data(:,6),gamma);
C5 = interp1(CN_data(:,1),CN_data(:,7),gamma);
%%%%%风系数计算%%%%%
cx = -(A0 + A1*2*A_L/L^2 + A2*2*A_T/B^2 + A3*(L/B) + A4*(S/L) + A5*(C/L) + A6*M);
cy = (B0 + B1*2*A_L/L^2 + B2*2*A_T/B^2 + B3*(L/B) + B4*(S/L) + B5*(C/L) + B6*A_SS/A_L);
cn = (C0 + C1*2*A_L/L^2 + C2*2*A_T/B^2 + C3*(L/B) + C4*(S/L) + C5*(C/L));
%%%%%风力和风力矩计算%%%%%
if(angle_w>0)
F_wind(1,1) = 0.5*cx*rho_a*V_r^2*A_T;
F_wind(2,1) = 0.5*cy*rho_a*V_r^2*A_L;
F_wind(3,1) = 0.5*cn*rho_a*V_r^2*A_L*L;
else
F_wind(1,1) = -0.5*cx*rho_a*V_r^2*A_T;
F_wind(2,1) = -0.5*cy*rho_a*V_r^2*A_L;
F_wind(3,1) = -0.5*cn*rho_a*V_r^2*A_L*L;
end
⛳️ 运行结果
🔗 参考文献
本程序参考以下中文EI期刊,程序注释清晰,干货满满。
[1]田超.风浪流作用下船舶操纵运动的仿真计算[D].武汉理工大学,2003.DOI:10.7666/d.y519207.