数学建模的高手请进!帮忙解决问题!
发布网友
发布时间:2023-08-10 02:37
我来回答
共1个回答
热心网友
时间:2024-12-05 06:16
解:
一 问题的重述与分析:
原问题实际上是说明飞机从北京飞往底特律原航线与改航后的航线在时间上有明显的减少,因此我们要做的只是求出原航线与改航后的航线的实际航程,通过比较得出结论,是否时间上有缩减。此外,飞机在飞行途*经9地,飞行的路线在问题1与2中有所不同,
现分别分析如下:
对问题1,采用了分别对航线上的各相邻的两地求其航程。得出结果与改航后的航程进行比较说明在时间有所减少与题意相符。
对问题2,采用压缩法近似得出椭圆,建立空间坐标,对可地用三维空间坐标定义,用近似模拟的方法,将曲线分为若干个部分,分别求出各部分的值,得出结果与改航后的航程进行比较说明在时间有所减少与题意相符。
二 基本假设
⒈假设飞机在飞行的过程中不考虑地球的自转。
⒉假设飞机飞行高度约为10公里,飞行速度约为每小时980公里.
⒊假设飞机在飞行的过程中不受自然、自身因素的影响。
⒋假设飞机在飞行的航线都是以最短的距离进行飞行.
⒌假设问题2中的旋转椭圆体是以子午线的短半轴为旋转轴,长为6357千米.
⒍假设问题2中的旋转椭圆体中赤道圆面,并且半径为6378千米.
⒎假设问题2中的旋转椭球体是采用压缩法形成的.
⒏假设飞机航行所经各地为一质点。⒐⒑⒒⒓⒔⒕
假设合理性的分析:
对假设1,2,3,4,我们认为这样不仅可以排除一些外在因素的影响,而且飞机在飞行的过程中相对比较稳定,使问题的结果具有稳定性,可靠性.假设5,6,7,使问题2在理解上排除干扰,基本符合实际情况,不会影响结果的正确性,对我们分析问题,简化模型提供了帮助,因此对问题的假设是合理的.
四 模型的建立
对问题1分析:
由已知条件可知,北京飞往底特律途径11地,为求航程,我们只需求出各相邻两地的距离, 然后求其总航程。由于题中假设地球为一球体,首先我们找出经度,纬度与相邻两地与球体的夹角的关系如下:
图 一
模拟两地的实际距离,由图可知:
OE=Rcosa1 OF=Rcosa2 DE=Rsinb1 CF=Rsinb2
EF2=OE2+OF2-2*OE*Ofcosd
=(Rcosa1)2+(Rcosa2)2-2*R2cosa1cosa2cosd
DC2=EF2+(CF-DE)2
=2*R2-2*R2*(cosa1cosa2cosd+sinb1*sinb2)
模型建立如下:
M=Z-L
模型的求解:
对于该问题的求解,通过计算机编程,求出相邻两地的航程,然后求出飞机飞行原航线的总航程所需时间,再与改航后的航程时间进行比较,得出改航后飞机从北京飞往底特律的飞行时间可节省3.84小时。
问题2的分析:
对于问题二 ,我们把求曲线长转化成求曲线段的种长。这种思想是根据——曲线可以近似看成是由无数线段组成。因此,我们在解决问题二时,可以把椭圆上的曲线段按经度和纬度等分成若干段,然后把每一对经纬度在椭球上对应的点用线段连接起来,求线段长的种和就得到椭圆上曲线的长。航行中的每一个地方,通过空间三维,建立坐标系,在利用求空间两点间的距离公式,得出近似的曲线长。
如图所示:为求旋转椭球体上A、B两点的距离,可根据已知条件(经度,纬度,长短半轴长),分别确定A,B两点的空间坐标,然后求出空间两点间的距离。同理可将AB段按经、纬度分为若干份,近似的求出A、B两地在旋转椭球体上距离。
由以上分析,模型建立如下:
M=Z-L
模型的求解:
附录
问题一:
流程图:
程序:
#include <iostream.h>
#include <math.h>
#define pi 3.1415926
#define n pi/180
void main()
{ double r(6381);
double a[12]={39,31,36,53,62,59,55,50,47,47,42,43};
double b[12]={116,122,140,-165,-150,-140,-135,-130,-125,-122,-87,-83};
double c[12];
double o,sum(0),Time,time,D,D1;
/* for(int i=0;i<11;i++)
{
cout<<"input a["<<i<<"]and b["<<i<<"]"<<endl;
cin>>a[i]>>b[i];
}*/
for(int j=0;j<11;j++)
{/*if(j==2) o=acos(cos(a[j]*n)*cos(a[j+1]*n)*cos((360-(b[j+1]+b[j]))*n)+sin(a[j]*n)*sin(a[j+1]*n));
else*/ o=acos(cos(a[j]*n)*cos(a[j+1]*n)*cos((b[j+1]-b[j])*n)+sin(a[j]*n)*sin(a[j+1]*n));
c[j]=r*o;
sum+=c[j];
}
D=acos(cos(a[0]*n)*cos(a[11]*n)*cos((b[11]-b[0])*n)+sin(a[0]*n)*sin(a[11]*n));
D1=D*r/980;
time=sum/980;
Time=time-D1;
cout<<sum<<" and "<<time<<" and "<<D1<<"and"<<Time<<endl;
}