繁体   English   中英

如何使用“scipy.integrate.solve_ivp”将一个微分方程组的解插入另一个微分方程组?

[英]How can I insert the solution of one system of differential equations into another system of differential equations using "scipy.integrate.solve_ivp"?

我正在通过伴随方法构建范德波尔模型的相位响应曲线。 为此,有必要求解原始微分方程组并将其解包含在伴随系统中。 如下所示。

原系统对应:

def vanderpol(t, v, mu):
x, y = v
dxdt = mu*(x-(x**3)/3-y)
dydt = (1/mu)*x
return (dxdt, dydt)

使用参数:

    mu  = 1.5
    T1  = 7.09637359
    omega1 = (2*np.pi)/T1
    tend = 25*T1
    y0  = [1, 1]

scipy.integrate.solve_ivp函数:

sol = solve_ivp(vanderpol, [-tend, tend], y0, args=[mu], dense_output=True, max_step=1e-2)

现在,上述系统中的解函数x(t)必须包含在以下微分方程组中,称为伴随系统:

    def adjunta(t, v, mu):
    zx, zy = v
    dzxdt = -zx*(mu/omega1)*(1-x(t)**2)-zy/(mu*omega1)
    dzydt = (zx*mu)/omega1
    return (dzxdt, dzydt)

其中x(t)表示原始微分方程组的解函数x(t)

由于scipy.integrate.solve_ivp中的函数sol返回三个向量作为数值积分的结果(sol.t, sol.y[0], sol.y[1]) 如何在伴随系统中包含sol.y[0]解决方案?

如果不能同时解决两个系统,您可以将其作为参数传递给伴随系统:

def adjunta(t, v, mu, x):
   ...
   return (dzxdt, dzydt)

然后通过solve_ivp中的args参数传递它

sol = solve_ivp(adjunta, ..., args=[mu, x], ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM