本帖最后由 wrj001 于 2016-3-14 20:51 编辑
[题目:]
我方正前方1海里处发现一敌舰以0.4海里/分速度横向航行,立刻发射制导鱼雷,若鱼雷速度为0.8海里/分,求敌舰航行多远及何时被鱼雷击中。
[假设:] 1. 鱼雷在追击过程中方向始终朝向敌舰; 2. 鱼雷的轨迹是光滑的曲线; 3. 假设鱼雷与敌舰距离<鱼雷一个仿真步长,时敌舰被击中。 [数学模型:] 在笛卡尔坐标系中,我方位置取为原点[0,0],敌舰初始位置为[1,0];任意t时刻敌舰位置[1,Zt],鱼雷位置[Xt,Yt];取时间间隔为秒,计算不同时刻鱼雷敌舰位置。 鱼雷t时刻x轴方向速度 Vx=.8/60*(1-Xt)/sqrt((1-Xt)^2+(Zt-Yt)^2]) y轴方向速度 Vy=.8/60*(Zt-Yt)/sqrt((1-Xt)^2+(Zt-Yt)^2]) [仿真模型:] 初始位置计算 x[0] := 0.; y[0] := 0.; z[0] := 0.; 鱼雷坐标初始增量 x 方向:a[0] := .8*1/60; y 方向:b[0] := 0. 任意时刻t位置计算 z[t] := t*.4*1/60; x[t] := x[t-1]+a[t-1]; y[t] := y[t-1]+b[t-1]; 任意时刻t鱼雷坐标增量 a[t] := .8*1/60*(1-x[t-1])/sqrt((1-x[t-1])^2+(z[t-1]-y[t-1])^2); b[t] := .8*(1/60*(z[t-1]-y[t-1])/sqrt((1-x[t-1])^2+(z[t-1]-y[t-1])^2); 鱼雷与敌舰距离 d[t] := sqrt((x[t]-1.)^2+(y[t]-z[t])^2); [仿真程序:] restart; with(plots); x[0] := 0.: y[0] := 0.: z[0] := 0.: a[0] := .8*1/60: b[0] := 0.: for t to infinity do z[t] := .4*t*1/60; x[t] := x[t-1]+a[t-1]; y[t] := y[t-1]+b[t-1]; a[t] := .8*1/60*(1-x[t-1])/sqrt((1-x[t-1])^2+(z[t-1]-y[t-1])^2); b[t] := .8*1/60*(z[t-1]-y[t-1])/sqrt((1-x[t-1])^2+(z[t-1]-y[t-1])^2); d[t] := sqrt((x[t]-1.)^2+(y[t]-z[t])^2); if d[t] <= .8*1/60 then break end if end do: 't' = t; 'z' = z[t]; Q1 := display(seq(plot([[x, y]], style = point, color = blue, symbol = solidcircle, symbolsize = 10), i = 1 .. t), insequence = true): Q2 := display(seq(plot([[1, z]], style = point, symbol = diamond, symbolsize = 25), i = 1 .. t), insequence = true): display([Q1, Q2]); |