I'm new to Python, and am just grasping the concept of the 'for' loop. I have generated a loop to print out several differences, but I cannot seem to append all of them to a list.
Here is the code I have thus far:
# Question 1
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from scipy.interpolate import CubicSpline
from numpy import log
y0 = [10,1] # [Prey, Predator] units in hundreds
pd = [100,200,300,400,500,600,700,800,900,1000, 1100, 1200,
1300,1400,1500,1600,1700,1800,1900,2000]
for x in pd:
t = np.linspace(0.,50.,num=x)
alpha = 0.1
beta = 0.02
gamma = 0.4
delta = 0.02
params = [alpha, beta, delta, gamma]
def sim(variables, t, params):
# Prey population level
x = variables[0]
# Predator population level
y = variables[1]
alpha = params[0]
beta = params[1]
delta = params[2]
gamma = params[3]
dxdt = alpha * x - beta * x * y
dydt = delta * x * y - gamma * y
return([dxdt, dydt])
y = odeint(sim, y0, t, args=(params,))
lv_prey = y[:,0] # saving prey population separately
lv_pred = y[:,1] # saving predator population separately
prey_array = np.array(lv_prey)
pred_array = np.array(lv_pred)
# Fit a cubic spline
num_pts = 10
tsp = np.array([t[i] for i in range(0, len(t), len(t)//num_pts)])
# Prey
prey_sp = np.array([lv_prey[i] for i in range(0, len(t), len(t)//num_pts)])
Curve1 = CubicSpline(tsp, prey_sp, bc_type = 'natural', extrapolate = False)
# Predator
pred_sp = np.array([lv_pred[i] for i in range(0, len(t), len(t)//num_pts)])
Curve2 = CubicSpline(tsp, pred_sp, bc_type='natural', extrapolate=False)
prey_extrap_dots=Curve1(tsp)
prey_extrap_line = Curve1(np.array([tt for tt in t if tt<=tsp[-1]]))
pred_extrap_dots=Curve2(tsp)
pred_extrap_line=Curve2(np.array([tt for tt in t if tt<=tsp[-1]]))
# Fit the invariate for the Lotka-Volterra model
Cspline = alpha*np.log(pred_extrap_line) - beta*(pred_extrap_line) - delta*(prey_extrap_line) + gamma*np.log(prey_extrap_line)
diff = np.max(Cspline) - np.min(Cspline)
diffList = []
diffList.append(diff)
print("The difference is {}".format(diff))
When I call the diffList command, only the last output of the loop is appended.
How can I append the diff values to a list?