目标拦截问题—微分对策

笔者偏微分的一次小实验,利用微分对策解决目标拦截问题。自给参数求解,不足之处望多多指正。

问题描述

导弹从坐标原点以的速度在这里插入图片描述
发射,发射角在这里插入图片描述
,在高度H=100m处有一架飞机从水平居原点l=100m处以在这里插入图片描述
的速度水平向x轴负方向飞来,求导弹能打到高度H时的最小射角以及导弹来拦截飞机的最小射程角。如下图所示。(取重力加速度g=9.8m/s^2,取在这里插入图片描述
在这里插入图片描述

求解思路

求解导弹速度关于时间的数值解序列点

由物理知识可以建立如下的微分等式:
在这里插入图片描述
其中:u1(t)为导弹x方向的关于t的函数;u3(t)为导弹y方向上关于时间t的函数。代入数据得:在这里插入图片描述
对上述微分方程使用4阶的龙格—库塔算法(算法原理如下): { y i + 1 = y i + 1 6 ( K 1 + 2 K 2 + 2 K 3 + K 4 ) K 1 = h f ( x i , y i ) K 2 = h f ( x i + h 2 , y i + 1 2 K 1 ) K 3 = h f ( x i + h 2 , y i + 1 2 K 2 ) K 4 = h f ( x i + h , y i + K 3 ) \left\{\begin{array}{l}y_{i+1}=y_{i}+\frac{1}{6}\left(K_{1}+2 K_{2}+2 K_{3}+K_{4}\right) \\ K_{1}=h f\left(x_{i}, y_{i}\right) \\ K_{2}=h f\left(x_{i}+\frac{h}{2}, y_{i}+\frac{1}{2} K_{1}\right) \\ K_{3}=h f\left(x_{i}+\frac{h}{2}, y_{i}+\frac{1}{2} K_{2}\right) \\ K_{4}=h f\left(x_{i}+h, y_{i}+K_{3}\right)\end{array}\right. yi+1=yi+61(K1+2K2+2K3+K4)K1=hf(xi,yi)K2=hf(xi+2h,yi+21K1)K3=hf(xi+2h,yi+21K2)K4=hf(xi+h,yi+K3)
求解出u2(t)、u4(t)关于时间t的序列点。

角度求解

利用二分法思想,取初始角度为0,步长取在这里插入图片描述
,利用4阶的龙格—库塔算法得到导弹对应的相应时间点的速度的数值解,通过插值型积分得到不同角度下的导弹的位移情况,并求出导弹在y轴方向刚好最大射高为100m时的角度。具体设计的求解算法程序运行步骤如下:
在这里插入图片描述

求解结果与程序

导弹能打到高度H时的最小射角

首先将龙格-库塔算法通过程序实现:

function [x,y]=runge_kutta1(ufunc,y0,h,a,b)
%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点
n=floor((b-a)/h);%求步数
x(1)=a;%时间起点
y(:,1)=y0;%赋初值,可以是向量,但是要注意维数
for ii=1:n

x(ii+1)=x(ii)+h;

k1=ufunc(x(ii),y(:,ii));

k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);

k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2);

k4=ufunc(x(ii)+h,y(:,ii)+h*k3);

y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;
%按照龙格库塔方法进行数值求解
end

代入函数运行尝试:

微分程序

%导弹函数x y方向的速度的方程y(1)是速度v0 y(2)为射角
function dy=Missile(x,y)
dy = zeros(2,1);%始化列向量
%定义y方向
dy(1) = -(y(1)*0.025+9.8);
% dy(2) = y(2);
% %定义x方向
% dy(3) =-y(3)*0.01;
dy(2)=-(y(2)*0.025);
[T1,F1]=runge_kutta1(@Missile,[300*sin(pi/3) 300*cos(pi/3)],0.01,0,2);

%subplot(122)
plot(T1,F1)%自编的龙格库塔函数效果
legend('y方向的速度','x方向的速度')
title('自编的   龙格库塔函数')

运行结果(假设射角为pi/3时的尝试):
在这里插入图片描述
再利用龙格-库塔方法与角度迭代思想程序求取导弹能打到高度H时的最小射角程序为:

%定义速度为300m/s,飞机从高100m的地方水平距离为100米以50m/s的速度向y轴方向飞行
%最大飞行时间是2s,取射角为c,按区间值pi/180长度进行迭代

H=100;
v=300;
%飞机的速度
v1=50;
%H=0;
t=0;
%x轴方向l方向
l=100;
%导弹的水平路程
x=0;
%找到一个初始角
for c=0:pi/180:pi/2
    [T,F1]=runge_kutta1(@Missile,[300*sin(c) 300*cos(c) ],0.01,0,2);
    h=0;
    j=1;
    F11=F1(1,:);
     for i=1:0.01:2
         d=0;
         h=h+0.01*F11(j);
         j=j+1;
         if h<H+0.1&&h>H-0.1
             d=1;
             fprintf('高度正好到h时角度:c=%d',c);
             break;
         else
             fprintf('角度:c=%d,达不到高度\n',c);
         end
     end
     if d==1
         break;
     end
end

通过步长为pi/180迭代尝试求解,当h<H+0.1&&h>H-0.1是视作符合高度条件,迭代停止得到结果,最终的运行结果为:

在这里插入图片描述
达高的最小角度为c=5.061455e-01。

拦截飞机的最小射程角

利用二分法思想求取最小射程角,同时画出两者的运动轨迹的实现()

二分程序

程序运行的两者运动轨迹图结果如下图:
在这里插入图片描述
可得最小拦截射程角为1.00,此时导弹拦截到飞机

小结

本次实验主要通过龙格-库塔法与插值型积分的思想对导弹拦截问题进行求解,求解得当射角取得弧度为0.5061时,导弹的最大射高可取得100m;最小拦截射程角为1.00,导弹可以拦截到飞机。本次实验在求解最小拦截射程角时,利用了二分法的思想求解,减少的求解的计算量,但在误差分析与灵敏度分析方面,仍是将来的改进提高处,有待进一步的研究使实验得到更精确的结果。

猜你喜欢

转载自blog.csdn.net/Zengmeng1998/article/details/108899692