In science and engineering, many problems involve quantities that change over time like speed of a moving object or temperature of a cooling cup. These changes are often described using differential equations.
SciPy provides a function called odeint (from the scipy.integrate module) that helps solve these equations numerically. By giving it a function that describes how your system changes and some starting values, odeint calculates how the system behaves over time.
Syntax
scipy.integrate.odeint (func, y0, t, args=())
Parameter:
- func: function that returns the derivative (dy/dt).
- y0: initial conditions.
- t: time points to solve the ODE at.
- args (optional): extra values passed to func.
Solving Differential Equations
Let's solve an ordinary differential equation (ODE) using the odeint() function.
Example 1
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# Initial condition
y0 = 1
# Time points
t = np.linspace(0, 5)
# Define the differential equation using lambda
# dy/dt = -y * t + 13
dydt = lambda y, t: -y * t + 13
# Solve the ODE
y = odeint(dydt, y0, t)
plt.plot(t, y)
plt.xlabel("Time")
plt.ylabel("Y")
plt.show()
Output

Explanation:
- Defines and solves the ODE dy/dt = -y * t + 13 using odeint with initial value y = 1.
- The graph shows how y changes over time.
- y increases first then slows as -y * t term grows.
Example 2
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# Initial condition
y0 = 1
# Time values
t = np.linspace(0, 5)
# Define ODE directly using lambda: dy/dt = 13 * e^t + y
dydt = lambda y, t: 13 * np.exp(t) + y
# Solve ODE
y = odeint(dydt, y0, t)
plt.plot(t, y)
plt.xlabel("Time")
plt.ylabel("Y")
plt.show()
Output

Explanation:
- Defines and solves ODE dy/dt = 13*eᵗ + y using odeint starting from y = 1.
- The graph shows y grows rapidly, driven by both exponential and linear terms.
- The exponential term accelerates the growth of y as time increases.
Example 3
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# Initial conditions
y0 = [0, 1, 2]
# Time values
t = np.linspace(1, 10)
# Define the ODE using lambda
dydt = lambda y, t: (1 - y) / (1.95 - y) - y / (0.05 + y)
# Solve the ODE
y = odeint(dydt, y0, t)
plt.plot(t, y)
plt.xlabel("Time")
plt.ylabel("Y")
plt.show()
Output

Explanation:
- Defines and solves ODE dy/dt = (1−y)/(1.95−y) − y/(0.05+y) using odeint with initial values y = 0, 1 and 2.
- The graph shows how y evolves over time for each initial value.
- The equation models a system with competing growth and decay rates, influenced by the values of y.