使用SciPy/Matplotlib绘制Verhulst方程相图报错及结果不符咨询
问题解答
1. 原采纳答案报除零错误的原因
原采纳答案的默认参数组合会使得计算共存平衡点X_R时分母C1 = gamma*c - delta*d的取值为0,此时两个物种的零增长等值线平行,不存在正平衡点,直接套用未修改参数的代码就会触发除零报错。
2. 当前代码结果与参考不符的遗漏设置
- 缺少时间数组定义:代码中调用
odeint时传入了参数t,但没有提前定义t的取值范围,比如需要添加t = np.linspace(0, 15, 200)来指定积分的时间长度和步长,否则积分得到的轨迹长度不够,和参考图轨迹长度不一致。 - 变量大小写错误:雅可比函数中写的
-gamma*x[0]使用了小写的x,和函数传入的大写参数X不匹配,虽然当前代码没有调用雅可比函数不影响绘图,但如果后续用到会报错。 - 坐标轴范围设置不合理:代码中通过
plt.ylim(ymin=0)[1]和plt.xlim(xmin=0)[1]自动获取已绘制轨迹的范围,参考图的坐标轴范围固定为[0,1],可以手动设置plt.xlim(0, 1)、plt.ylim(0, 1)匹配参考图的显示范围。 - 箭头归一化多余:参考图的箭头长度代表向量场的速率大小,你现在的代码将所有向量除以模长
M做了归一化,所有箭头长度一致,和参考图表现不同,删掉DX1 /= M、DY1 /= M两行即可。 - 缺少更多初始点的轨迹:你现在只绘制了从
v * X_R出发的5条轨迹,参考图还包含了坐标轴附近、其他区域出发的多条轨迹,需要补充更多初始点的积分和绘制逻辑。
内容的提问来源于stack exchange,提问作者RKerr
相关产品推荐
相关产品推荐

