如何在 Python 中使用 odeint 将 ODE 的初始条件放在特定时间点?

How to put initial condition of ODE at a specific time point using odeint in Python?

如何在Python中使用odeint在特定时间点放置ODE的初始条件?

所以我有 y(0) = 5 作为初始条件, 以下代码有效::

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# function that returns dy/dt
def model(y,t):
    k = 0.3
    dydt = -k * y
    return dydt

# initial condition
y0 = 5

# time points
t = np.linspace(0,20)

# solve ODE
y = odeint(model,y0,t)

# plot results
plt.plot(t,y)
plt.xlabel('time')
plt.ylabel('y(t)')
plt.show()

我想在负时间线和正时间线中查看图表。

所以我把t = np.linspace(0,20)改成了t = np.linspace(-5,20),但是初始条件取y(-5) = 5.

如何解决这个问题?

我觉得不行,按了docs

但是您可以分别求解正负 t,然后将它们拼接在一起。将相关行替换为

tp = np.linspace(0,20)
tm = np.linspace(0,-5)

# solve ODE
yp = odeint(model,y0,tp)
ym = odeint(model,y0,tm)

# stich together; note we flip the time direction with [::-1] construct
t = np.concatenate([tm[::-1],tp])
y = np.concatenate([ym[::-1],yp])

这产生