如何在 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])
这产生
如何在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])
这产生