MATLAB微分方程有一个导弹追踪问题,网上有解题思路,现在加一问,被追舰在中途加速行驶应该怎么求?

甲舰位于坐标(0, 0)处,向位于x轴上的点A(x0, 0)处的乙舰发射导弹,导弹始终对准乙舰,如果乙舰以最大的速度v0(v0是常数)沿平行于y轴的直线行驶,导弹的速度为αv0。根据已给数据可知:α=7.834872,xo=12.99078.
如果导弹沿运行轨迹到坐标为x1=0.5x0=6.49539时,乙舰才发现甲舰追踪自己,此时乙舰加速,以速度为2
v0前进,导弹速度不变,假定v0=1, 问导弹是否能击中乙舰?如能击中,导弹将在何时何地击中乙舰?

代码如下,望采纳

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# 常数值定义
x0 = 12.99078
v0 = 1
a = 7.834872
alpha = a * v0

# 定义微分方程组
def missile(y, t, x0, alpha):
    """
    导弹模型微分方程组
    :param y: 状态向量
    :param t: 时间参数(未用到)
    :param x0: 乙舰距离原点的水平距离
    :param alpha: 导弹速度与乙舰速度的比
    """
    x, y, vx, vy = y
    # 计算导弹速度大小和方向
    v = np.sqrt(vx**2 + vy**2)
    theta = np.arctan2(vy, vx)
    # 计算乙舰的坐标
    xt = x + x0
    yt = 0
    # 计算两点之间的方向角和距离
    beta = np.arctan2(yt - y, xt - x)
    d = np.sqrt((xt - x)**2 + (yt - y)**2)
    # 计算受力(保证导弹对准乙舰)
    F = alpha * v * np.sin(beta - theta)
    # 计算导弹的加速度
    ax = F * np.cos(theta)
    ay = F * np.sin(theta)
    # 返回状态向量的一阶导数
    return [vx, vy, ax, ay]

# 运行ODE求解器求解微分方程
# 初始状态:x=0, y=0, vx=v0*alpha, vy=0
y0 = [0, 0, v0 * alpha, 0]
t = np.linspace(0, 10, 10000)
sol = odeint(missile, y0, t, args=(x0, alpha))

# 将坐标系平移,元素1加上x0
xt = sol[:, 0] + x0
yt = sol[:, 1]

# 绘制导弹轨迹
plt.plot(xt, yt)
plt.xlabel('水平距离')
plt.ylabel('高度')
plt.title('导弹追踪问题')

# 查找乙舰发现时刻索引
index = np.where(xt >= 6.49539)[0][0]

# 添加乙舰加速后的模拟
v0_2 = 2 * v0    # 加速后的速度
sol2 = odeint(missile, sol[index], t[index:], args=(x0, alpha))
xt2 = sol2[:, 0] + x0
yt2 = sol2[:, 1]

# 绘制乙舰加速后的轨迹
plt.plot(xt2, yt2)

# 查找导弹击中的时刻和坐标
index2 = np.where(yt2 <= 0.001)[0][0]
xt_hit = xt2[index2]
yt_hit = yt2[index2]

# 绘制击中乙舰的位置
plt.plot(xt_hit, yt_hit, 'ro')
plt.text(xt_hit, yt_hit, '击中', ha='center', va='bottom')

plt.show()

# 输出结果
print('导弹是否能够击中乙舰:', yt_hit <= 0)
print('导弹击中乙舰的时间:', t[index+index2])
print('导弹击中乙舰的位置: ({0}, {1})'.format(xt_hit, yt_hit))