How to put initial condition of ODE at a specific time point using odeint in Python?
So I have y(0) = 5 as initial condition, following code works::
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()
I wanna see the graph in both negative and positive time line.
So I change t = np.linspace(0,20) to t = np.linspace(-5,20), but then the initial condition is taken as y(-5) = 5.
How to solve this?
Advertisement
Answer
I do not think you can, according to the docs
But you can solve for positive and negative t‘s separately and then stich them together. Replace the relevant lines with
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])
