作者:CS数模
链接:https://www.zhihu.com/question/642456117/answer/3384320467
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
import numpy as np
import matplotlib.pyplot as plt
# 模型参数
alpha = 0.1 # 雄性相对于资源的生长率
beta = 0.05 # 雄性相对于数量的死亡率
gamma = 0.08 # 雌性相对于资源的生长率
delta = 0.03 # 雌性相对于数量的死亡率
# 初始条件
M_0 = 100 # 初始雄性数量
F_0 = 100 # 初始雌性数量
P_0 = M_0 + F_0 # 初始总体数量
R_0 = 0.5 # 初始资源可用性
# 模拟时间参数
dt = 0.1 # 时间步长
t_max = 100 # 模拟时间
num_steps = int(t_max / dt) + 1
# 初始化数组
time = np.linspace(0, t_max, num_steps)
M = np.zeros(num_steps)
F = np.zeros(num_steps)
P = np.zeros(num_steps)
R = np.zeros(num_steps)
# 设置初始条件
M[0] = M_0
F[0] = F_0
P[0] = P_0
R[0] = R_0
# Euler 方法求解微分方程
for i in range(1, num_steps):
dM_dt = alpha * R[i-1] - beta * M[i-1]
dF_dt = gamma * R[i-1] - delta * F[i-1]
dP_dt = dM_dt + dF_dt
M[i] = M[i-1] + dt * dM_dt
F[i] = F[i-1] + dt * dF_dt
P[i] = P[i-1] + dt * dP_dt
R[i] = R[i-1] # 在这个简单的模型中,我们假设资源可用性保持不变
# 绘制结果
plt.figure(figsize=(10, 6))
plt.plot(time, M, label='Male Population')
plt.plot(time, F, label='Female Population')
plt.plot(time, P, label='Total Population')
作者:CS数模
链接:https://www.zhihu.com/question/642456117/answer/3384320467
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
import numpy as np
import matplotlib.pyplot as plt
# 模型参数
alpha = 0.1 # 雄性相对于资源的生长率
beta = 0.05 # 雄性相对于数量的死亡率
gamma = 0.08 # 雌性相对于资源的生长率
delta = 0.03 # 雌性相对于数量的死亡率
rho = 0.02 # 繁殖成功率常数
eta = 0.01 # 捕食者的攻击率常数
# 初始条件
M_0 = 100 # 初始雄性数量
F_0 = 100 # 初始雌性数量
P_0 = M_0 + F_0 # 初始总体数量
R_0 = 0.5 # 初始资源可用性
# 模拟时间参数
dt = 0.1 # 时间步长
t_max = 100 # 模拟时间
num_steps = int(t_max / dt) + 1
# 初始化数组
time = np.linspace(0, t_max, num_steps)
M = np.zeros(num_steps)
F = np.zeros(num_steps)
P = np.zeros(num_steps)
R = np.zeros(num_steps)
B = np.zeros(num_steps)
H = np.zeros(num_steps)
# 设置初始条件
M[0] = M_0
F[0] = F_0
P[0] = P_0
R[0] = R_0
B[0] = 0
H[0] = 10 # 初始捕食者数量
# Euler 方法求解微分方程
for i in range(1, num_steps):
dM_dt = alpha * R[i-1] - beta * M[i-1]
dF_dt = gamma * R[i-1] - delta * F[i-1]
dP_dt = dM_dt + dF_dt
dB_dt = rho * p_f * (1 - p_f)
dH_dt = eta * P[i-1]
M[i] = M[i-1] + dt * dM_dt
F[i] = F[i-1] + dt * dF_dt
P[i] = P[i-1] + dt * dP_dt
作者:CS数模
链接:https://www.zhihu.com/question/642456117/answer/3384320467
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
import numpy as np
import matplotlib.pyplot as plt
# 模型参数
alpha = 0.1 # 雄性相对于资源的生长率
beta = 0.05 # 雄性相对于数量的死亡率
gamma = 0.08 # 雌性相对于资源的生长率
delta = 0.03 # 雌性相对于数量的死亡率
rho = 0.02 # 繁殖成功率常数
epsilon = 0.01 # 海蟒鳗鱼与其他生态系统成员相互作用的强度
eta = 0.01 # 捕食者的攻击率常数
xi = 0.005 # 捕食者对海蟒鳗鱼的捕食受到其他生态系统成员的影响的强度
zeta = 0.02 # 其他生态系统成员的自然死亡率常数
omega = 0.01 # 其他生态系统成员与海蟒鳗鱼相互作用的强度
# 初始条件
M_0 = 100 # 初始雄性数量
F_0 = 100 # 初始雌性数量
P_0 = M_0 + F_0 # 初始总体数量
R_0 = 0.5 # 初始资源可用性
B_0 = 0 # 初始成功繁殖的数量
H_0 = 10 # 初始捕食者数量
N_0 = 50 # 初始其他生态系统成员的数量
# 模拟时间参数
dt = 0.1 # 时间步长
t_max = 100 # 模拟时间
num_steps = int(t_max / dt) + 1
# 初始化数组
time = np.linspace(0, t_max, num_steps)
M = np.zeros(num_steps)
F = np.zeros(num_steps)
P = np.zeros(num_steps)
R = np.zeros(num_steps)
B = np.zeros(num_steps)
H = np.zeros(num_steps)
N = np.zeros(num_steps)
# 设置初始条件
M[0] = M_0
F[0] = F_0
P[0] = P_0
R[0] = R_0
B[0] = B_0
H[0] = H_0
N[0] = N_0
# Euler 方法求解微分方程
for i in range(1, num_steps):
p_m = M[i-1] / P[i-1]
p_f = F[i-1] / P[i-1]
dM_dt = alpha * R[i-1] - beta * M[i-1] - epsilon * N[i-1] * M[i-1]
dF_dt = gamma * R[i-1] - delta * F[i-1] - epsilon * N[i-1] * F[i-1]
dP_dt = dM_dt + dF_dt
dB_dt = rho * p_f * (1 - p_f)
dH_dt = eta * P[i-1] - xi * N[i-1] * H[i-1]
dN_dt = -zeta * N[i-1] + omega * P[i-1]
M[i] = M[i-1] + dt * dM_dt
F[i] = F[i-1] + dt * dF_dt
P[i] = P[i-1] + dt * dP_dt#见完整版
作者:CS数模
链接:https://www.zhihu.com/question/642456117/answer/3384320467
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
import numpy as np
import matplotlib.pyplot as plt
# 模型参数
alpha = 0.1 # 雄性相对于资源的生长率
beta = 0.05 # 雄性相对于数量的死亡率
gamma = 0.08 # 雌性相对于资源的生长率
delta = 0.03 # 雌性相对于数量的死亡率
rho = 0.02 # 繁殖成功率常数
epsilon = 0.01 # 海蟒鳗鱼与寄生物相互作用的强度
eta = 0.01 # 寄生物攻击宿主的强度
xi = 0.005 # 寄生物对宿主的寄生率
zeta = 0.02 # 寄生物的自然死亡率常数
# 初始条件
M_0 = 100 # 初始雄性数量
F_0 = 100 # 初始雌性数量
P_0 = M_0 + F_0 # 初始总体数量
R_0 = 0.5 # 初始资源可用性
B_0 = 0 # 初始成功繁殖的数量
H_0 = 10 # 初始寄生物数量
# 模拟时间参数
dt = 0.1 # 时间步长
t_max = 100 # 模拟时间
num_steps = int(t_max / dt) + 1
# 初始化数组
time = np.linspace(0, t_max, num_steps)
M = np.zeros(num_steps)
F = np.zeros(num_steps)
P = np.zeros(num_steps)
R = np.zeros(num_steps)
B = np.zeros(num_steps)
H = np.zeros(num_steps)
# 设置初始条件
M[0] = M_0
F[0] = F_0
P[0] = P_0
R[0] = R_0
B[0] = B_0
H[0] = H_0
# Euler 方法求解微分方程
for i in range(1, num_steps):
p_m = M[i-1] / P[i-1]
p_f = F[i-1] / P[i-1]
dM_dt = alpha * R[i-1] - beta * M[i-1] - epsilon * H[i-1] * M[i-1]
dF_dt = gamma * R[i-1] - delta * F[i-1] - epsilon * H[i-1] * F[i-1]
dP_dt = dM_dt + dF_dt
dB_dt = rho * p_f * (1 - p_f)
dH_dt = eta * P[i-1] - xi * H[i-1] * M[i-1] - zeta * H[i-1]
M[i] = M[i-1] + dt * dM_dt
F[i] = F[i-1] + dt * dF_dt
P[i] = P[i-1] + dt * dP_dt#见完整版