Quiz: Solve ODEs with Python
1. Which input is not necessary for the ODEINT function from Scipy.Integrate?
A. A function that returns derivatives when given states (y) and time (t)
- Incorrect. model is required for y = odeint(model, y0, t)
B. Boundary conditions
- Correct. Boundary (spatial) conditions are used in the solution of partial differential equations and are not solved with an ordinary differential equation solver such as ODEINT.
C. Initial Conditions
- Incorrect. y0 is required for y = odeint(model, y0, t)
D. Time points
- Incorrect. t is required for y = odeint(model, y0, t)
2. What will an increased value of k do to the value of y(3) (the value of y at time=3) with initial condition y(0)=5?
$$\frac{dy}{dt}=-k \, y$$
import numpy as np
from scipy.integrate import odeint
def model(y,t):
k = 0.3
return -k * y
y = odeint(model,5,[0,3])
from scipy.integrate import odeint
def model(y,t):
k = 0.3
return -k * y
y = odeint(model,5,[0,3])
A. Increase y(3)
- Incorrect. Try the code and observe the value of y at time=3. A higher value of k causes a faster decay to zero.
B. Decrease y(3)
- Correct. A higher value of k causes a faster decay to zero.
C. The value of k has no effect on y(3)
- Incorrect. Try the code and observe the value of y at time=3. A higher value of k causes a faster decay to zero.
3. The differential equation `dy/dt=-0.3y` is integrated in 0.1 time steps to a final time of 3.0 with initial condition y(0)=5.
import numpy as np
from scipy.integrate import odeint
n=31 # total time points
def model(y,t):
return -0.3 * y
y=np.empty(n); t=np.empty(n)
for i in range(n):
if i==0:
t[i] = 0.0 # initial time
y[i] = 5 # initial condition
else:
# integrate forward with time-step 0.1
t[i] = t[i-1]+0.1
y[i] = odeint(model,y[i-1],[t[i-1],t[i]])[-1]
from scipy.integrate import odeint
n=31 # total time points
def model(y,t):
return -0.3 * y
y=np.empty(n); t=np.empty(n)
for i in range(n):
if i==0:
t[i] = 0.0 # initial time
y[i] = 5 # initial condition
else:
# integrate forward with time-step 0.1
t[i] = t[i-1]+0.1
y[i] = odeint(model,y[i-1],[t[i-1],t[i]])[-1]
What is the correct way to print the value of y at time=1.5?
A. print(y[1.5])
- Incorrect. The command print(y[1.5]) gives a syntax error because y must be indexed with an integer, not a floating point number. Each time step is 0.1.
B. print(y[-1])
- Incorrect. The value y[-1] is the last in the list, corresponding to time=3.0.
C. print(y[16])
- Incorrect. The value y[16] corresponds to time=1.6.
D. print(y[15])
- Correct. The value y[15] corresponds to time=1.5.