导弹运动方程如下:
导弹初始参数如下:V=250,弹道倾角=0度,x= 0,y=3000(高度);
目标位置参数:x= 6000,y=0;
弹目运动关系示意图:
核心代码:
#龙格库塔右端函数
def dery(Y,t,Var,U):
ay = U[0];
g = Var[0];S = Var[1];m = Var[2];
V = Y[0];theta = Y[1];x = Y[2];y = Y[3];
L,D = cacu_aeroForce(V,y,ay,S,m,g);
dV = -D/m - g*sin(theta);
dtheta = (L - m*g*cos(theta))/(m*V);
dx = V*cos(theta);
dy = V*sin(theta);
dstate = np.array([np.float64(dV),np.float64(dtheta),np.float64(dx),np.float64(dy)],dtype=np.float64);
return dstate
#函数功能: 通用的四阶龙格库塔函数
#参数 Y : 积分函数的每一步结果,第一为初值
#参数 h : 积分时间步长
#参数 tn : 积分时间累积项,每调用一次本函数其应当增加一次步长h
#参数 Var : 积分右端函数所需的中间变量
#参数 U : 龙格库塔积分所需的微分方程的控制参数
def RungeKutta4(Y,h,tn,Var,U):
k1 = dery(Y, tn,Var,U)
k2 = dery(Y + h*0.5*k1,tn + 0.5 * h,Var,U)
k3 = dery(Y + h*0.5*k2,tn + 0.5 * h,Var,U)
k4 = dery(Y + h*k3, tn + h, Var,U)
# 返回一次迭代后的y值
Y = Y + h/6.0 *(k1 + 2 * k2 + 2 * k3 + k4)
return Y
仿真结果:
专业制导控制仿真+qq:1763053463