为了账号安全,请及时绑定邮箱和手机立即绑定

Lotka-Volterra 方程:错误解

Lotka-Volterra 方程:错误解

幕布斯6054654 2021-08-05 17:47:45
我写了一段代码来在 Python 上使用四阶 Runge-Kutta 求解 Lotka-Volterra 方程,但由于某种原因它不起作用,解决方案是完全错误的。老实说,我不明白我做错了什么。import numpyfrom pylab import plot, showdef rk(f, x, h):    f_1 = f(x)    f_2 = f(x+1./2*h*f_1)    f_3 = f(x+1./2*h*f_2)    f_4 = f(x+h*f_3)    return x+1./6*h*(f_1+2*f_2+2*f_3+f_4)def lv(x):    alpha = 1.    return numpy.array([alpha*x[0]-x[0]*x[1], x[0]*x[1]-x[1]], float)a = 0.b = 10.m = 100T = numpy.linspace(a, b, m)H = (b-a)/mX = numpy.zeros((m, 2))X[0, :] = [1., 30.]for i in range(1, m):    X[i, :] = rk(lv, X[i-1, :], H)plot(T, X)show()非常感谢您的帮助。
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

将积分间隔扩展到 100 并相应地增加步数以观察解的周期性行为,我得到大约 34.6 的周期,峰值相当小。

//img1.sycdn.imooc.com//610bb3f20001dc9809500478.jpg

从生态的角度考虑一下,捕食者数量为 30,猎物数量为 1,捕食性明显。当然,猎物迅速减少到接近于零,捕食者也挨饿到零,然后猎物种群慢慢恢复,直到其指数增长触发捕食者指数增长,循环重新开始。


请注意,时间离散化的步骤是(b-a)/(m-1),检查T[1]-T[0]。要获得您需要的m步长间隔,并相应地增加 x 数组和积分循环。H=(b-a)/mT=linspace(a,b,m+1)


查看完整回答
反对 回复 2021-08-05
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信