用龙格库塔法或欧拉法编程解算运动学弹道

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.sans-serif'] = ['SimHei']
# 参数
c1 = -4.695
c2 = 10.735
c3 = -1.8207
c4 = 0.2623
c5 = -1.274
c6 = -0.102
v = 25  # 鱼雷匀速运动速度
vm = -5  # 目标匀速运动速度
xm0 = 1500
zm0 = 1500
beta0 = 0  # 初始角度
omega0 = 0  # 初始角速度
delta0 = 0  # 初始角加速度
psit0 = 0  # 初始航向角
Psit0 = 0  # 初始目标航向角
x0 = 0  # 初始x坐标
z0 = 0  # 初始z坐标
Psim0 = 0  # 初始目标航向角
k = 0.5
# 时间步长和模拟时间
dt = 0.01
simulation_time =100
# 初始化变量
t = 0
x = x0
z = z0
beta = beta0
omega = omega0
delta = delta0
psit = psit0
Psit = Psit0
Psim = Psim0
# 存储轨迹数据
x_vals = []
z_vals = []
psit_vals = []
# 定义函数
def q(xm, zm, x, z):
    return np.arctan2(zm - z, xm - x)

def runge_kutta_step(xm, zm, x, z, beta, omega, delta, psit, Psit, Psim, dt):
    q_val = q(xm, zm, x, z)
    psi_t = omega
    Psi_t = psi_t - beta
    eta_val = q_val - Psi_t
    delta = k * eta_val

    dw_dt = c1 * omega + c2 * beta + c3 * delta
    dbeta_dt = c4 * omega + c5 * beta + c6 * delta

    Psit = psi_t - beta - (1 - c4) * q_val - c5 * beta - c6 * delta

    dx_dt = v * np.cos(Psit)
    dz_dt = -v * np.sin(Psit)

    x += dx_dt * dt
    z += dz_dt * dt
    beta += dbeta_dt * dt
    omega += dw_dt * dt
    psit += omega * dt

    return x, z, beta, omega, psit, Psit
while t < simulation_time:
    # 调用龙格库塔法进行一步计算
    x, z, beta, omega, psit, Psit = runge_kutta_step(xm0, zm0, x, z, beta, omega, delta, psit, Psit, Psim, dt)
    x_vals.append(x)
    z_vals.append(z)
    psit_vals.append(psit)
    t += dt
    print("时间: {:.2f}, 位置: ({:.2f}, {:.2f}), 方向: {:.2f}".format(t, x, z, psit))
# 可视化
plt.figure(figsize=(10, 6))
plt.plot(x_vals, z_vals, label='鱼雷轨迹')
plt.scatter([xm0], [zm0], color='red', label='目标', marker='x')
plt.xlabel('X 坐标')
plt.ylabel('Z 坐标')
plt.title('鱼雷轨迹模拟')
plt.legend()
plt.grid()
plt.show()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值