scipy.integrate.solve_ivp 中的初始值

Posted

技术标签:

【中文标题】scipy.integrate.solve_ivp 中的初始值【英文标题】:Initial values in scipy.integrate.solve_ivp 【发布时间】:2019-03-16 15:39:21 【问题描述】:

我正在尝试使用solve_ivp,但我不明白它如何处理参数中的初始值。 solve_ivp 上的documentation 声明:

scipy.integrate.solve_ivp(fun, t_span, y0, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False, **options)

y0 : array_like, 形状 (n,) 初始状态。对于复杂域中的问题,使用复杂数据类型传递 y0(即使最初的猜测是纯真实的)

但是,我不明白这个例子

>>> from scipy.integrate import solve_ivp
>>> def exponential_decay(t, y): return -0.5 * y
>>> sol = solve_ivp(exponential_decay, [0, 10], [2, 4, 8])
>>> print(sol.t)
[  0.           0.11487653   1.26364188   3.06061781   4.85759374
   6.65456967   8.4515456   10.        ]
>>> print(sol.y)
[[2.         1.88836035 1.06327177 0.43319312 0.17648948 0.0719045
  0.02929499 0.01350938]
 [4.         3.7767207  2.12654355 0.86638624 0.35297895 0.143809
  0.05858998 0.02701876]
 [8.         7.5534414  4.25308709 1.73277247 0.7059579  0.287618
  0.11717996 0.05403753]]

当微分方程只有一个分量时,为什么他们在这里给出一个包含 3 个初始值的数组?

【问题讨论】:

在该示例中,y 将是一个长度为 3 的一维数组。 基本上y可以接受任意长度的一维数组作为初始值。 【参考方案1】:

微分方程只有一个分量

它没有。函数exponential_decay 可以接受一个数组作为y,并以向量化方式对该数组执行操作,这在 NumPy 中很典型。

初始值决定了未知函数有多少分量。在这种情况下,三个。

【讨论】:

以上是关于scipy.integrate.solve_ivp 中的初始值的主要内容,如果未能解决你的问题,请参考以下文章

在 scipy.integrate.solve_ivp python 中传递矩阵作为输入