首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用"scipy.integrate.solve_ivp“将一个微分方程组的解插入到另一个微分方程组中?

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

Stack Overflow用户
提问于 2022-07-18 20:38:48
回答 1查看 68关注 0票数 0

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

原系统对应于:

代码语言:javascript
复制
def vanderpol(t, v, mu):
x, y = v
dxdt = mu*(x-(x**3)/3-y)
dydt = (1/mu)*x
return (dxdt, dydt)

参数如下:

代码语言:javascript
复制
    mu  = 1.5
    T1  = 7.09637359
    omega1 = (2*np.pi)/T1
    tend = 25*T1
    y0  = [1, 1]

scipy.integrate.solve_ivp函数:

代码语言:javascript
复制
sol = solve_ivp(vanderpol, [-tend, tend], y0, args=[mu], dense_output=True, max_step=1e-2)

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

代码语言:javascript
复制
    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,sol.y1)。如何将sol.y解包含在伴随系统中?

EN

回答 1

Stack Overflow用户

发布于 2022-07-22 22:04:38

如果同时解决这两个系统不是一种选择,您可以将其作为一个参数传递给伴随系统:

代码语言:javascript
复制
def adjunta(t, v, mu, x):
   ...
   return (dzxdt, dzydt)

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

代码语言:javascript
复制
sol = solve_ivp(adjunta, ..., args=[mu, x], ...)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73028350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档