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?

## 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])

this produces

## Recent Comments