欢迎光临~MATLAB代做|MATLAB代写|MATLAB有偿编程—谷速软件
语言选择: 中文版 ∷  英文版

数学建模其它资料

导弹跟踪问题题目 数学建模matlab编程辅导

 点击下载

实验四 导弹跟踪问题

一.实验目的
   本实验主要涉及常微分方程。通过实验复习微分方程的建模和求解,介绍两种求解微分方程的数值方法:Euler法和改进的Euler法,还介绍了仿真方法。
二.实际问题
   某军的一导弹基地发现正北方向120km处海面上有敌艇一艘以90km/h的速度向正东方向行驶。该基地立即发射导弹跟踪追击敌艇,导弹的速度为450km/h,自动导航系统使导弹在任一时刻都能对准敌艇。试问导弹在何时何处击中敌艇?

三.数学模型
   设坐标系如下,取导弹基地为原点0(0,0)。 轴指向正东方,y轴指向正北方。
 
当t=0时,导弹位于O,敌艇位于点(0,H),(H=120(km))设导弹t时刻的位置为P( ),由题意,
                           (4.1)
其中 。
另外在t时刻,敌艇位置应该为 ,其中 =90(km/h)。由于导弹轨迹的切线方向必须指向敌艇,即直线PM的方向就是导弹轨迹上点P的切线方向,故有
                                                    (4.2)
                                                 (4.3)
方程(4.3)初值条件想 
            x(0)=0,y(0)=0                                       (4.4)
构成了一个关于时间变量t的一阶微分方程组的初值问题。
由(4.2)得
 
两边对t求导得
 
即有 
 
把(4.1)写为 代入上式,就得到轨迹方程。这是一个二阶非线性微分方程,加上初值条件,则初值问题
                       
上式分别为(4.5),(4.6),(4.7)。
就是导弹的轨迹的数学模型。
四.解释方法
方程(4.5)可以降阶。令 ,则式(4.5)化为一介可分离变量方程
 
易得
 
由式(4.7)得 ,从而
 
于是有
                                    (4.8)
于是积分又可以得到
 
利用式(4.6)得 ,于是导弹轨迹方程为

                         (4.9)
设导弹击中敌艇于B(L,H),以y=H代入(4.9)得
                                             (4.10)
而导弹击中敌艇的时刻
                                                (4.11)
将数据代入(4.10),(4.11)式,得
L=25(km), T 0.2778(h)
五.数值方法
1.Euler方法
     Euler方法十分简单,就是用差商代替微商,即将 代之以 ,而将 代之以 。
设导弹到达( )处的时刻为tk,那么得到计算的迭代格式为 
 
上式分别为(4.15)(4.16)(4.17)
于是
     
使用MATLAB,编辑文件m4_.m:
function m4_1(n)
H=120;
h=H/n;
lamda=90/450;
x(1)=0;p(1)=0;
y=0:h:H;
for i=0:n-1
    x(i+2)=x(i+1)+h*p(i+1);
    p(i+2)=p(i+1)+h*(lamda*sqrt(1+p(i+1)^2)/(H-y(i+1)));
end
[x;p]’
L=x(n+1)
T=x(n+1)/90
输入m4_1(4)得到


ans =
         0         0
         0    0.0500
    1.5000    0.1167
    5.0025    0.2174
   11.5254    0.4221
L =
   11.5254
T =
0.1281
使用MATLAB,建立m4_2.m:
function m4_2(N)
k=1;
for n=N
    H=120;
    h=H/n;
    lamda=90/450;
    x0=0;p0=0;
    for i=0:n-1
        x1=x0+h*p0;
        p1=p0+h*(lamda*sqrt(1+p0^2)/(H-i*h));
        x0=x1;
        p0=p1;
    end
   L(k)=x1;
   T(k)=x1/90;
   k=k+1;
end
[N;L;T]'
        
键入m4_2([4,8,12,24,48,96,120,240])得到
ans =

    4.0000   11.5254    0.1281
    8.0000   15.9537    0.1773
   12.0000   17.9732    0.1997
   24.0000   20.5508    0.2283
   48.0000   22.2494    0.2472
   96.0000   23.3286    0.2592
  120.0000   23.5803    0.2620
  240.0000   24.1510    0.2683

由方程(4.1),(4.3)解出 的表达式,取时间步长 ,对应 
时导弹轨迹上点的坐标为 ,则Euler格式为
 
上式分别为(4.21)(4.22)(4.23)
当计算到 即停止,于是,
 
使用matlab,编辑m文件:
function m4_3(t)
H=120;Ve=90;Vw=450;
x(1)=0;y(1)=0;T(1)=0;
for i=1:10e6
    M=(Ve*T(i)-x(i))/(H-y(i));
    x(i+1)=x(i)+Vw*t/sqrt(1+1/M.^2);
    y(i+1)=y(i)+Vw*t/sqrt(1+M.^2);
    T(i+1)=t+T(i);
    if y(i+1)>=H
     break;
    end
end
[T;x;y]'
L=x(i+1)
T=x(i+1)/Ve
 m4_3(0.1)
> In m4_3 at 6

ans =

         0         0         0
    0.1000         0   45.0000
    0.2000    5.3615   89.6795
    0.3000   22.6750  131.2155
L =22.6750
T =0.2519

m4_3(0.05)
Warning: Divide by zero.
> In m4_3 at 6

ans =

         0         0         0
    0.0500         0   22.5000
    0.1000    1.0374   44.9761
    0.1500    3.4121   67.3504
    0.2000    7.6462   89.4484
    0.2500   14.8679  110.7580
    0.3000   29.1948  128.1070
L =

   29.1948
T =

0.3244
2.改进的Euler方法
改进的Euler迭代式
 
上式分别为(4.24)(4.25)(4.26)(4.27)(4.28)
六.仿真方法
设导弹和敌艇在初始时刻分别位于 。此时,导弹指向 。而在 时,导弹的位置 ,其中 ,敌艇的位置则为 。这时导弹沿 方向飞行, 的倾角为 ;在 时导弹的位置为 。
以此方式,当 时,导弹的位置为 ,其中
                                       (4.33)
                                           (4.34)
                              (4.35)
                              (4.36)
而敌艇的位置为 。
如之前一样,当 时,仿真停止。这时
 ,   
七.实验任务
1.用改进的Euler方法取步长 为0.1和0.05时计算,用MATLAB验证结果。
m.文件
function m4_5(t)
H=120;Ve=90;Vw=450;
x(1)=0;y(1)=0;T(1)=0;
for i=1:10e6
    M=(Ve*T(i)-x(i))/(H-y(i));
    x1(i+1)=x(i)+Vw*t/sqrt(1+1/M.^2);
    y1(i+1)=y(i)+Vw*t/sqrt(1+M.^2);
    T(i+1)=i*t;
    x(i+1)=0.5*(x1(i+1)+x(i)+Vw*t/sqrt(1+((H-y1(i+1))/(Ve*T(i+1)-x1(i+1))).^2));
    y(i+1)=0.5*(y1(i+1)+y(i)+Vw*t/sqrt(1+((Ve*T(i+1)-x1(i+1))/(H-y1(i+1))).^2));
    if y(i+1)>=H
        break;
    end
end
[T;x;y]'
L=x(i+1)
T=x(i+1)/Ve
运行结果:
 m4_5(0.1)
Warning: Divide by zero.
> In m4_5 at 6
ans =

         0         0         0
    0.1000    2.6808   44.8397
    0.2000   12.5752   88.2868
0.3000   27.0724  130.2557
L =
    27.0724
T =
0.3008

m4_5(0.05)
Warning: Divide by zero.
> In m4_5 at 6

ans =
      0         0         0
  0.0500   0.5187   22.4880
  0.1000   2.1060   44.9219
  0.1500   5.0982   67.2021
  0.2000   10.1610  89.0691
  0.2500   19.6565  108.9880
  0.3000   24.2409  130.9903
L =
      24.2409
T =
      0.2693

得到的结果与书上表4.6和4.7结果一致。
2.验证仿真方法和Euler迭代格式,当输入相同的步长后,结果完全一致。
建立m文件:
function m4_4(t)
H=120;Ve=90;Vw=450;
x(1)=0;y(1)=0;
for i=1:10e6
    M=sqrt(((i-1)*Ve*t-x(i)).^2+(H-y(i)).^2);
    ctheta=((i-1)*Ve*t-x(i))./M;
    stheta=(H-y(i))./M;
    x(i+1)=x(i)+Vw*t*ctheta;
    y(i+1)=y(i)+Vw*t*stheta;
    if y(i+1)>=H
        break;
    end
end
[x;y]'
L=x(i+1)
T=x(i+1)/Ve
运行结果:
 m4_4(0.1)

ans =

         0         0
         0   45.0000
    5.3615   89.6795
   22.6750  131.2155
L =
   22.6750
T =
   0.2519

 m4_4(0.05)
ans =

         0         0
         0   22.5000
    1.0374   44.9761
    3.4121   67.3504
    7.6462   89.4484
   14.8679  110.7580
   29.1948  128.1070
L =
   29.1948
T =
   0.3244
根据运行结果可知,这两种迭代格式实际上确实是相同。

3.由于Euler法或改进的Euler法的计算格式中每一步值的取得仅仅依赖上一步的值,因此在计算过程中改变步长是可行的,即当计算到 而 远大于H时可缩小步长(例如原来的十分之一)以 作为新起点继续进行迭代。试用这种变步长方法来改进用Euler法和改进的Euler方法过得到的结果。
用手机扫描二维码关闭
二维码