You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用scipy.integrate.solve_ivp将微分方程组解代入另一方程组?

范德波尔模型伴随方程组代入原解的实现方法
  • 利用稠密输出函数获取连续的x(t)
    你在求解原方程组时已设置dense_output=True,这会让solve_ivp返回的sol对象包含一个可调用的sol.sol方法——它能对任意时刻t进行插值,返回该时刻的状态向量[x(t), y(t)]。这是获取连续x(t)的核心方式,避免了仅使用离散的sol.y[0]带来的精度局限。

  • 修改伴随方程组函数,引入原解的插值方法
    调整adjunta函数,让它接收sol、omega1等必要参数,并通过sol.sol(t)获取当前时刻的x(t)值:

def adjunta(t, v, mu, omega1, sol):
    zx, zy = v
    # 获取当前t对应的x(t)
    x_t = sol.sol(t)[0]
    dzxdt = -zx*(mu/omega1)*(1 - x_t**2) - zy/(mu*omega1)
    dzydt = (zx*mu)/omega1
    return (dzxdt, dzydt)
  • 求解伴随方程组
    调用solve_ivp求解伴随方程时,将mu、omega1和sol作为参数传入args,同时设置合适的初始条件和时间区间:
# 根据研究需求设置伴随方程的初始条件
z0 = [1.0, 0.0]
# 求解伴随方程组,时间区间可与原方程组保持一致
adj_sol = solve_ivp(adjunta, [-tend, tend], z0, args=[mu, omega1, sol], max_step=1e-2)
  • 关键注意点
    • sol.sol(t)支持标量和数组形式的t,完全适配solve_ivp内部对导数的计算需求;
    • 若伴随方程的求解区间超出原方程组的求解范围,插值会进入外推模式,精度会下降,需确保原求解区间足够覆盖需求。

内容的提问来源于stack exchange,提问作者Brayan Guerra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:39:26