LotkaVolterra方程:错误解

2024-05-28 21:08:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python上写了一段代码,用四阶Runge-Kutta来解Lotka-Volterra方程,但是由于某些原因它不起作用,这个解是完全错误的。老实说,我不明白我做错了什么。你知道吗

import numpy
from pylab import plot, show


def 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 = 100
T = numpy.linspace(a, b, m)
H = (b-a)/m
X = 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()

非常感谢你的帮助。你知道吗


Tags: 代码importalphanumpyreturnplotdefshow
1条回答
网友
1楼 · 发布于 2024-05-28 21:08:14

把积分区间延长到100,相应地增加步数来观察解的周期行为,我得到了一个34.6的周期,峰值很小。你知道吗

enter image description here

从生态学的角度考虑,你有30个捕食者和1个猎物,有明显的捕食。当然,猎物会迅速减少到接近于零,然后捕食者也会饿死到零,从那以后,猎物的数量会慢慢恢复,直到它的指数增长触发捕食者的指数增长,这个周期又重新开始。你知道吗


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

相关问题 更多 >

    热门问题