一、部分题目
2016年高教社杯全国大学生数学建模竞赛题目
A题 系泊系统的设计
近浅海观测网的传输节点由浮标系统、系泊系统和水声通讯系统组成(如图1所示)。某型传输节点的浮标系统可简化为底面直径2m、高2m的圆柱体,浮标的质量为1000kg。系泊系统由钢管、钢桶、重物球、电焊锚链和特制的抗拖移锚组成。锚的质量为600kg,锚链选用无档普通链环,近浅海观测网的常用型号及其参数在附表中列出。钢管共4节,每节长度1m,直径为50mm,每节钢管的质量为10kg。要求锚链末端与锚的链接处的切线方向与海床的夹角不超过16度,否则锚会被拖行,致使节点移位丢失。水声通讯系统安装在一个长1m、外径30cm的密封圆柱形钢桶内,设备和钢桶总质量为100kg。钢桶上接第4节钢管,下接电焊锚链。钢桶竖直时,水声通讯设备的工作效果最佳。若钢桶倾斜,则影响设备的工作效果。钢桶的倾斜角度(钢桶与竖直线的夹角)超过5度时,设备的工作效果较差。为了控制钢桶的倾斜角度,钢桶与电焊锚链链接处可悬挂重物球。
系泊系统的设计问题就是确定锚链的型号、长度和重物球的质量,使得浮标的吃水深度和游动区域及钢桶的倾斜角度尽可能小。
请建立数学模型解决以下问题
问题1 某型传输节点选用II型电焊锚链22.05m,选用的重物球的质量为1200kg。现将该型传输节点布放在水深18m、海床平坦、海水密度为1.025×103kg/m3的海域。若海水静止,分别计算海面风速为12m/s和24m/s时钢桶和各节钢管的倾斜角度、锚链形状、浮标的吃水深度和游动区域。
问题2 在问题1的假设下,计算海面风速为36m/s时钢桶和各节钢管的倾斜角度、锚链形状和浮标的游动区域。请调节重物球的质量,使得钢桶的倾斜角度不超过5度,锚链在锚点与海床的夹角不超过16度。
问题3 由于潮汐等因素的影响,布放海域的实测水深介于16m~20m之间。布放点的海水速度最大可达到1.5m/s、风速最大可达到36m/s。请给出考虑风力、水流力和水深情况下的系泊系统设计,分析不同情况下钢桶、钢管的倾斜角度、锚链形状、浮标的吃水深度和游动区域。
二、部分论文
三、部分源代码
1
完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCode
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 1005
#define g 9.8
#define pi 3.14159
double INF=99999;
double L=1,Rfb=1,rou=1025,Mfb=1000;
double Ffengx,Ffengy,Ffu,h,Vf,Vs;
double theat[MAXN],jiao[MAXN];
double x[10];
double y[10];
double T[MAXN];
double Xj,Yj;
double Theat;
double Fx[MAXN],Fy[MAXN];
double sum=0;
double ans;
double windj;
double Abs(double a)
{
if(a>0)
return a;
return -a;
}
void fb()
{
Vf=12;
double S=(2-h)*2*cos(windj)+pi*1*1*sin(windj);
Ffengx=0.625*S*Vf*Vf*cos(windj);
Ffengy=0.625*S*Vf*Vf*sin(windj);
Ffu=rou*g*pi*Rfb*Rfb*h;
double Gfb=1000*g;
x[1]=Ffengx;
y[1]=Ffu-Gfb-Ffengy;
}
void steel()
{
double G=10*g-rou*g*pi*0.025*0.025*L;
for(int i=2;i<=5;i++)
{
y[i]=y[i-1]-G;
x[i]=x[i-1];
theat[i-1]=atan((y[i-1]*L-G*L/2)/(x[i-1]*L))/pi*180;
//cout<<theat[i-1]<<endl;
sum+=L*sin(theat[i-1]/180*pi);
}
double Gg=1200*g;
double Gt=100*g-rou*g*pi*0.15*0.15*L;
Yj=y[5]-Gg-Gt;
Xj=x[5];
Theat=atan((y[5]*L-Gt*L/2)/(x[5]*L))/pi*180;
sum+=L*sin(Theat/180*pi);
//cout<<Theat<<endl;
}
void chain()
{
Fx[0]=Xj;
Fy[0]=Yj;
double l=0.105;
double G=7*l*g;
//cout<<G<<endl;
for(int i=1;i<=210;i++)
{
Fy[i]=Fy[i-1]-G;
Fx[i]=Fx[i-1];
jiao[i]=atan((Fy[i-1]*l-G*l/2)/(Fx[i-1]*l))/pi*180;
//cout<<jiao[i]<<endl;
if(jiao[i]<=0)
break;
sum+=l*sin(jiao[i]/180*pi);
}
}
int main()
{
for(double i=0;i<=90;i++)
{
windj=i/180*pi;
INF=99999;
h=0;
while(1)
{
if(h>2)
break;
sum=0;
h=h+0.001;
fb();
steel();
chain();
if(Abs(sum-18)<INF)
{
INF=Abs(sum-18);
ans=h;
}
}
cout<<ans<<endl;
}
return 0;
}
2
完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCode
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 1005
#define g 9.8
#define pi 3.14159
double L=1,Rfb=1,rou=1025,Mfb=1000;
double Ffengx,Ffengy,Ffu,h,Vf,Vs;
double theat[MAXN],jiao[MAXN];
double x[10];
double y[10];
double T[MAXN];
double Xj,Yj;
double Theat;
double Fx[MAXN],Fy[MAXN];
double sum=0;
double sum2;
double ans;
double windj;
double gball=2228;
double Abs(double a)
{
if(a>0)
return a;
return -a;
}
void fb()
{
Vf=36;
double S=(2-h)*2*cos(windj)+pi*1*1*sin(windj);
Ffengx=0.625*S*Vf*Vf*cos(windj);
Ffengy=0.625*S*Vf*Vf*sin(windj);
Ffu=rou*g*pi*Rfb*Rfb*h;
double Gfb=1000*g;
x[1]=Ffengx;
y[1]=Ffu-Gfb-Ffengy;
}
void steel()
{
double G=10*g-rou*g*pi*0.025*0.025*L;
cout<<"四根钢管夹角:"<<endl;
for(int i=2;i<=5;i++)
{
y[i]=y[i-1]-G;
x[i]=x[i-1];
theat[i-1]=atan((y[i-1]*L-G*L/2)/(x[i-1]*L))/pi*180;
cout<<theat[i-1]<<endl;
sum2+=L*cos(theat[i-1]/180*pi);
}
double Gg=gball*g;
double Gt=100*g-rou*g*pi*0.15*0.15*L;
Yj=y[5]-Gg-Gt;
Xj=x[5];
Theat=atan((y[5]*L-Gt*L/2)/(x[5]*L))/pi*180;
sum2+=L*cos(Theat/180*pi);
cout<<"钢桶夹角:"<<endl;
cout<<Theat<<endl;
}
void chain()
{
Fx[0]=Xj;
Fy[0]=Yj;
double l=0.105;
double G=7*l*g;
cout<<"锚链夹角:"<<endl;
for(int i=1;i<=210;i++)
{
Fy[i]=Fy[i-1]-G;
Fx[i]=Fx[i-1];
jiao[i]=atan((Fy[i-1]*l-G*l/2)/(Fx[i-1]*l))/pi*180;
if(jiao[i]<=0)
{
cout<<0<<endl;
sum2+=l;
continue;
}
cout<<jiao[i]<<endl;
sum2+=l*cos(jiao[i]/180*pi);
}
}
int main()
{
windj=0;
h=1.082;
fb();
steel();
chain();
cout<<sum2<<endl;
return 0;
}
3
完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCode
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<ctime>
using namespace std;
#define MAXN 1005
#define g 9.8
#define pi 3.14159
double INF=99999;
double L=1,Rfb=1,rou=1025,Mfb=1000;
double Ffengx,Ffengy,Ffu,h,Vf,Vs;
double theat[MAXN],jiao[MAXN];
double x[10];
double y[10];
double T[MAXN];
double Xj,Yj;
double Theat;
double Fx[MAXN],Fy[MAXN];
double sum=0,sum2=0;
double ans;
double windj;
double Fw,Vw,weigh;
double type[10][5];
double Ds[10];
int Type,number;
void fb()
{
double S=(2-h)*2*cos(windj)+pi*1*1*sin(windj);
Ffengx=0.625*S*Vf*Vf*cos(windj);
Ffengy=0.625*S*Vf*Vf*sin(windj);
Fw=374*2*h*Vw*Vw;
Ffu=rou*g*pi*Rfb*Rfb*h;
double Gfb=1000*g;
x[1]=Ffengx+Fw;
y[1]=Ffu-Gfb-Ffengy;
}
void steel()
{
double G=10*g-rou*g*pi*0.025*0.025*L;
for(int i=2;i<=5;i++)
{
Fw=374*Vw*Vw*0.05;
theat[i-1]=atan((y[i-1]*L-G*L/2)/(x[i-1]*L+Fw*L/2))/pi*180;
y[i]=y[i-1]-G;
x[i]=x[i-1]+Fw;
sum+=L*sin(theat[i-1]/180*pi);
sum2+=L*cos(theat[i-1]/180*pi);
//cout<<theat[i-1]<<endl;
}
double Gg=weigh*g;
double Gt=100*g-rou*g*pi*0.15*0.15*L;
Fw=374*Vw*Vw*0.3;
Theat=atan((y[5]*L-Gt*L/2)/(x[5]*L+Fw*L/2))/pi*180;
Yj=y[5]-Gg-Gt;
Xj=x[5]+Fw;
sum+=L*sin(Theat/180*pi);
sum2+=L*cos(Theat/180*pi);
//cout<<Theat<<endl;
}
void chain()
{
Fw=Ds[Type]*374*Vw*Vw;
Fx[0]=Xj;
Fy[0]=Yj;
double l=type[Type][1];
double G=type[Type][2]*l*g;
for(int i=1;i<=number;i++)
{
Fy[i]=Fy[i-1]-G;
Fx[i]=Fx[i-1]+Fw;
jiao[i]=atan((Fy[i-1]*l-G*l/2)/(Fx[i-1]*l+Fw*l/2))/pi*180;
if(jiao[i]<=0)
{
jiao[i]=0;
sum+=0;
sum2+=l;
//cout<<jiao[i]<<endl;
continue;
}
sum+=l*sin(jiao[i]/180*pi);
sum2+=l*cos(jiao[i]/180*pi);
//cout<<jiao[i]<<endl;
}
}
void initial()
{
type[1][1]=0.078;
type[1][2]=3.2;
type[2][1]=0.105;
type[2][2]=7;
type[3][1]=0.120;
type[3][2]=12.5;
type[4][1]=0.150;
type[4][2]=19.5;
type[5][1]=0.180;
type[5][2]=28.12;
Ds[1]=0.0017;
Ds[2]=0.0032;
Ds[3]=0.0049;
Ds[4]=0.0076;
Ds[5]=0.0109;
}
double hmin=99999,hmax=-1;
double Rmin=99999,Rmax=-1;
double Abs(double a)
{
if(a>0)
return a;
return -a;
}
int main()
{
INF=99999;
srand(time(NULL));
initial();
cout<<"请输入风的速度(m/s):"<<endl;
cin>>Vf;
cout<<"请输入风向与水平面的夹角(°):"<<endl;
cin>>windj;
cout<<"请输入海水流速(m/s):"<<endl;
cin>>Vw;
for(int i=1;i<=1000;i++)
{
cout<<i<<endl;
Type=rand()%5+1;
weigh=500+rand()%2500;
number=60+rand()%500;//存疑
h=0;
while(1)
{
if(h>2)
break;
sum=0;
sum2=0;
h=h+0.01;
fb();
steel();
chain();
if(sum+h>=16&&sum+h<=20&&Theat>=85&&jiao[number]<=16&&jiao[number]>=0)
{
if(h<hmin)
hmin=h;
if(h>hmax)
hmax=h;
if(sum2<Rmin)
Rmin=sum2;
if(sum2>Rmax)
Rmax=sum2;
}
}
}
cout<<hmin<<' '<<Rmin<<endl;
cout<<hmax<<' '<<Rmax<<endl;
return 0;
}