A题 (波浪能最大输出功率设计)评阅要点

在这里插入图片描述


B题 无人机遂行编队飞行中的纯方位无源定位)评阅要点

在这里插入图片描述


C题 (无人机遂行编队飞行中的纯方位无源定位)评阅要点)评阅要点

在这里插入图片描述

附录:微分方程例程(与本文无关)

3.1 例题:求二阶 RLC 振荡电路的数值解

高阶常微分方程,必须做变量替换,化为一阶微分方程组,再用 odeint 求数值解。

零输入响应的 RLC 振荡电路可以由如下的二阶微分方程描述:

{d2udt2+RL∗dudt+1LC∗u=0u(0)=U0u′(0)=0 \begin{cases} \begin{aligned} &\frac{d^2 u}{dt^2} + \frac{R}{L} * \frac{du}{dt} + \frac{1}{LC}*u = 0\\ &u(0) = U_0\\ &u'(0)= 0 \end{aligned} \end{cases} dt2d2u+LRdtdu+LC1u=0u(0)=U0u(0)=0

α=R/2L\alpha = R/2Lα=R/2Lω02=1/LC\omega_0^2=1/LCω02=1/LC,在零输入响应 us=0u_s=0us=0 时上式可以写成:

{d2udt2+2αdudt+ω02u=0u(0)=U0u′(0)=0 \begin{cases} \begin{aligned} &\frac{d^2 u}{dt^2} + 2 \alpha \frac{du}{dt} + \omega_0^2 u = 0\\ &u(0) = U_0\\ &u'(0)= 0 \end{aligned} \end{cases} dt2d2u+2αdtdu+ω02u=0u(0)=U0u(0)=0
对二阶微分方程问题,引入变量 v=du/dtv = {du}/{dt}v=du/dt,通过变量替换就把原方程化为如下的微分方程组:

{dudt=vdvdt=−2αv−ω02uu(0)=U0v(0)=0 \begin{cases} \begin{aligned} &\frac{du}{dt} = v \\ &\frac{dv}{dt} = -2\alpha v - \omega_0^2 u\\ &u(0)=U_0\\ &v(0)=0 \end{aligned} \end{cases} dtdu=vdtdv=2αvω02uu(0)=U0v(0)=0

这样就可以用上节求解微分方程组的方法来求解高阶微分方程问题。


3.2 二阶微分方程问题的编程步骤

以RLC 振荡电路为例讲解 scipy.integrate.odeint() 求解高阶常微分方程初值问题的步骤:

  1. 导入 scipy、numpy、matplotlib 包;

  2. 定义导数函数 deriv(Y, t, a, w)

    注意 odeint() 函数中定义导数函数的标准形式是 f(y,t)f(y,t)f(y,t) ,本问题中 y 表示向量,记为 Y=[u,v]Y=[u,v]Y=[u,v]

    导数定义函数 deriv(Y, t, a, w) 编程如下,其中 a, w 分别表示方程中的参数 α、ω\alpha、\omegaαω

# 导数函数,求 Y=[u,v] 点的导数 dY/dt
def deriv(Y, t, a, w):
    u, v = Y  # Y=[u,v]
    dY_dt = [v, -2*a*v-w*w*u]
    return dY_dt
  1. 定义初值 Y0=[u0,v0]Y_0=[u_0,v_0]Y0=[u0,v0]YYY 的定义区间 [t0, t][t_0,\ t][t0, t]

  2. 调用 odeint() 求 Y=[u,v]Y=[u,v]Y=[u,v] 在定义区间 [t0, t][t_0,\ t][t0, t] 的数值解。

    例程中通过 args=paras 将参数 (a,w) 传递给导数函数 deriv(Y, t, a, w) 。本例要考察不同参数对结果的影响,这种参数传递方法使用非常方便。


3.3 二阶微分方程问题 Python 例程

# 3. 求解二阶微分方程初值问题(scipy.integrate.odeint)
# Second ODE by scipy.integrate.odeint
from scipy.integrate import odeint  # 导入 scipy.integrate 模块
import numpy as np
import matplotlib.pyplot as plt

# 导数函数,求 Y=[u,v] 点的导数 dY/dt
def deriv(Y, t, a, w):
    u, v = Y  # Y=[u,v]
    dY_dt = [v, -2*a*v-w*w*u]
    return dY_dt

t = np.arange(0, 20, 0.01)  # 创建时间点 (start,stop,step)
# 设置导数函数中的参数 (a, w)
paras1 = (1, 0.6)  # 过阻尼:a^2 - w^2 > 0
paras2 = (1, 1)  # 临界阻尼:a^2 - w^2 = 0
paras3 = (0.3, 1)  # 欠阻尼:a^2 - w^2 < 0

# 调用ode对进行求解, 用两个不同的初始值 W1、W2 分别求解
Y0 = (1.0, 0.0)  # 定义初值为 Y0=[u0,v0]
Y1 = odeint(deriv, Y0, t, args=paras1)  # args 设置导数函数的参数
Y2 = odeint(deriv, Y0, t, args=paras2)  # args 设置导数函数的参数
Y3 = odeint(deriv, Y0, t, args=paras3)  # args 设置导数函数的参数
# W2 = (0.0, 1.01, 0.0)  # 定义初值为 W2
# track2 = odeint(lorenz, W2, t, args=paras)  # 通过 paras 传递导数函数的参数

# 绘图
plt.plot(t, Y1[:, 0], 'r-', label='u1(t)')
plt.plot(t, Y2[:, 0], 'b-', label='u2(t)')
plt.plot(t, Y3[:, 0], 'g-', label='u3(t)')
plt.plot(t, Y1[:, 1], 'r:', label='v1(t)')
plt.plot(t, Y2[:, 1], 'b:', label='v2(t)')
plt.plot(t, Y3[:, 1], 'g:', label='v3(t)')
plt.axis([0, 20, -0.8, 1.2])
plt.legend(loc='best')
plt.title("Second ODE by scipy.integrate.odeint")
plt.show()

3.4 二阶方程问题 Python 例程运行结果

在这里插入图片描述

结果讨论:

RLC串联电路是典型的二阶系统,在零输入条件下根据 α\alphaαω\omegaω 的关系,电路的输出响应存在四种情况:

  1. 过阻尼: α2−ω2>0\alpha^2 - \omega^2>0α2ω2>0 ,有 2 个不相等的负实数根;
  2. 临界阻尼: α2−ω2=0\alpha^2 - \omega^2 = 0α2ω2=0,有 2 个相等的负实数根;
  3. 欠阻尼: α2−ω2<0\alpha^2 - \omega^2 <0α2ω2<0,有一对共轭复数根;
  4. 无阻尼:R=0R=0R=0,有一对纯虚根。

例程中所选择的 3 组参数分别对应过阻尼、临界阻尼和欠阻尼的条件,微分方程的数值结果很好地体现了不同情况的相应曲线。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐