小船过河 matlab,小船过河matlab实现.doc_蚂蚁文库

41528d3028836879cd698677c3999917.gif小船过河 matlab实现.doc

(一)问题分析一只小船要渡过一条宽为d的河流,目标是起点A正对着的另一岸B点。已知河水的流速v1与船在静水中的速度v2之比为k。(1)建立小船的航线模型,并求其解析解。(2)设d=100m,v1=1m/s,v2=2m/s,用数值解法求渡河所需时间,任意时刻小船的位置及航行曲线,作图,并于解析解比较;(3)若流速v1=0,0.5,1.5,2(m/s),结果如何。这个问题涉及的主要变量有:船在静水中的速度v2,河水的速度v1,v1与v2速度之比为k,船的航行时间t,船在任意时刻的位置x,y。由于k未知,所以船过河的具体航线有多种情况,但针对本题过河问题为了更好的解决问题,不妨做以下假设:(1)船的速度方向始终指向终点B;(2)船在航行的过程中任意时刻的总速度与航线相切。通过以上假设,小船过河问题就简化为:速度求曲线轨迹问题,微分方程问题。(二)建立数学模型建立直角坐标系,为方便起见,将B点设为坐标原点,河岸为x轴,垂直于河岸方向为y轴,如图所示。设在t时刻,小船的位置为(x,y),船头指向与水平方向的夹角为a。则此时水平方向的速度为v1-v2*cos(a),竖直方向的速度为v2*sin(a)。又由于水平方向的速度为dx/dt,竖直方向的速度为dy/dt。则可列出小船航线的微分方程:dx/dt=v1-v2*cos(a)dy/dtv2*sin(a)又由于cos(a)=x/sqrt(x^2+y^2),sin(a)=-y/sqrt(x^2+y^2)。则微分方程为:dx/dt=v1-v2*x/sqrt(x^2+y^2)dy/dt=-v2*y/sqrt(x^2+y^2)初始条件为:x(0)=0,y(0)=-100;6以上就是小船航线的数学模型。(三)求解模型的数学方法(解析解与数值解)(1)解析解的得出,matlab算法的具体实现,以及解析解的图形根据dx/dt=v1-v2*x/sqrt(x^2+y^2)dy/dt=-v2*y/sqrt(x^2+y^2)两式相除得到dy/dx=v2*y/(v1*sqrt(x^2+y^2)-v2)分离变量得到:dx/x=du/(-u*v1*sqrt(1+u^2)/(v1*sqrt(1+u^2)-v2))其中u=y/x;然后利用微分方程得到x关于y的解析表达式:x=1/2*c^(-k)*y^(1-k)-1/2*c^k*y^(k+1)然后根据初始条件:x(0)=0,y(0)=-d,d=100;得到:c=-0.01.则小船航线的解析数学表达式为:x=1/2*(-0.01)^(-k)*y^(-k+1)-1/2*(-0.01)^(k)*y^(k+1).解析解的matlab程序:xiaochuan.mfunctionx=xiaochuan(y)k=0.3;x=1/2*(-0.01).^(-k).*y.^(-k+1)-1/2.*(-0.01).^(k).*y.^(k+1);hangxing.my=[0:-0.1:-100];fori=0:1:1000 x(:,i+1)=xiaochuan(-i/10);endplot(x,y);title( 小船过河1 )xlabel( x轴 );ylabel( y轴 );>>hangxing.m(2)数值解法的具体实现与matlab算法:根据此模型的微分方程:dx/dt=v1-v2*x/sqrt(x^2+y^2)dy/dt=-v2*y/sqrt(x^2+y^2)并且初始条件:x(0)=0,y(0)=-d通过龙格——库塔方程求其数值解:由于该模型的参数为:河宽d,船在静水中的速度v2,河水流速v1,船在任意时刻的位置(x,y),时间t,船在a点时t=0。则小船航线的微分方程的matlab算法如下:xiaochuan1.m:functiondx=xiaochuan1(t,x,v1,v2)s=(x(1)^2+x(2)^2)^0.5;%x(1),x(2)表示x,ydx=[v1-v2*x(1)/s;-x(2)*v2/s];%以列向量的形式表示小船过河的微分方程在编写运行程序时设定时间t的起终点和中间的等分点,终点时间根据船在静水中速度和水的流速设为150s,时间间隔为0.01s。lv.mts=[0:0.01:150];d=( 输入河宽d= );x0=[0,-d];opt=odeset( reltol ,1e-6, abstol ,1e-9);v1=( 输入河水流速v1= );v2=( 输入船在静水中速度v2= );[t,x]=ode15s(@xiaochuan1,ts,x0,opt,v1,v2);[t,x]subplot(1,2,1),plot(t,x),title( x—t图 ),gtext( t轴 ),gtext( x轴 );grid;subplot(1,2,2),plot(x(:,1),x(:,2)),title( 小船过河图2 );gtext( x轴 ),gtext( y轴 );grid;(四)计算所得结果(1)当v1=1m/s,v2=2m/s,d=100m时>>lv输入河宽d=100输入河水流速v1=1输入船在静水中速度v2=2t,x,y值如下:15.260012.6707-69.631315.270012.6771-69.611615.280012.6835-69.591915.290012.6899-69.572315.300012.6963-69.552666.57000.0970-0.000466.58000.0870-0.000366.59000.0770-0.000266.60000.0670-0.000266.61000.0570-0.000166.62000.0470-0.000166.63000.0370-0.000166.64000.0270-0.000066.65000.0170-0.000066.66000.0070-0.0000则当d=100m,v1=1m/s,v2=2m/s时t=66.64s时小船到达对岸b点,渡河所需时间t=66.64s,小船任意时刻的位置如x—t图所示,航线如“小船过河图2”所示(2)d=100m,v1=0,0.5,1.5,2m/s;v2=2m/s时所得结果①当d=100,v1=0,v2=2时,>>lv输入河宽d=100输入河水流速v1=0输入船在静水中速度v2=2[t,x]值如下:47.12000-5.760047.13000-5.740047.14000-5.720047.15000-5.700047.16000-5.680047.17000-5.6600.49.94000-0.120049.95000-0.100049.96000-0.080049.97000-0.060049.98000-0.040049.99000-0.020050.00000-0.0000此时由于t=100,v1=0,v2=2,t=100/2=50,小船过河时间t=50s,小船任意时刻的位置如x—t图所示,航线如“小船过河

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值