Python实现Lotka-Volterra差分方程绘制种群互动报错求解
问题原因
- 迭代全为0的问题:你的差分递推循环从
n=2开始,但仅初始化了R[0]、F[0]两个初始值,R[1]、F[1]保持了np.zeros初始化的默认值0,后续所有计算都基于前序的0值,自然输出全为0。同时Lotka-Volterra一阶差分方程仅依赖前1个时间步的结果,不需要从n=2开始递推,循环起始值设置错误。 - 绘图报错的问题:你生成的时间序列
t设置了num=10000,长度为10000,而种群数组R、F的长度仅为N+1=501,二者维度不匹配;且你绘图时传入的是R[n],此时n是循环结束后的固定值,仅为单个数值,和长度10000的t自然无法匹配绘图。
修正后可运行代码
import numpy as np import matplotlib.pyplot as plt N = 500 a = 0.4 b = 0.1 c = 0.005 e = 0.2 R = np.zeros(N+1) F = np.zeros(N+1) # 时间序列长度和种群数组保持一致,每个时间步对应一组种群值 t = np.arange(N+1) R[0] = 100 F[0] = 20 # 从n=1开始递推,覆盖所有时间步 for n in range(1, N+1): # 兔子种群更新 R[n] = R[n-1] + a*R[n-1] - c*R[n-1] * F[n-1] # 狐狸种群更新 F[n] = F[n - 1] + e * c * R[n - 1] * F[n - 1] - b * F[n - 1] # 传入完整数组绘图,同时展示两个种群的变化 plt.plot(t, R, label='兔子种群数量') plt.plot(t, F, label='狐狸种群数量') plt.xlabel('时间步') plt.ylabel('种群数量') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者fredericoamigo
相关产品推荐
相关产品推荐

