我正在尝试使用 Python 绘制 Lotka-Volterra 方程。当谈到 Python 时,我是一个真正的初学者。我有这两个方程:
和
我还把这些方程改写成一个迭代公式:
和
我是否可以假设我可以使用这种方法来解决这个问题?如何在 python 中实现它并使用 matplotlib 绘制它?
我想使用欧拉方法,但我正在努力将迭代方程编码到 Python 中。在此先感谢您,请尝试以新手级别的方式解释任何 Python 内容。
我正在尝试使用 Python 绘制 Lotka-Volterra 方程。当谈到 Python 时,我是一个真正的初学者。我有这两个方程:
和
我还把这些方程改写成一个迭代公式:
和
我是否可以假设我可以使用这种方法来解决这个问题?如何在 python 中实现它并使用 matplotlib 绘制它?
我想使用欧拉方法,但我正在努力将迭代方程编码到 Python 中。在此先感谢您,请尝试以新手级别的方式解释任何 Python 内容。
您要问的主要有两个问题:
我可以使用显式欧拉时间步进方法解决 Lotka-Volterra 问题吗?答:可能,但您需要采取非常小的时间步骤。它是非线性的,有时会根据参数表现出混乱的行为。所以选择会很重要。我可能会使用其他时间步进器,尤其是隐式和自适应的,但我想这要么是一项任务,要么是你试图教给自己一些东西。所以我会招待你的下一个问题。
如何在 python 中实现它并绘制它?回答:
我建议你使用像 numpy 这样的东西来简化实现。这是一个python代码
import numpy as np
import matplotlib.pyplot as plt
def LotkaVolterra_EEuler(R0, F0, alpha, beta, gamma, delta, t):
# Solves Lotka-Volterra equations for one prey and one predator species using
# explicit Euler method.
#
# R0 and F0 are inputs and are the initial populations of each species
# alpha, beta, gamma, delta are inputs and problem parameters
# t is an input and 1D NumPy array of t values where we approximate y values.
# Time step at each iteration is given by t[n+1] - t[n].
R = np.zeros(len(t)) # Pre-allocate the memory for R
F = np.zeros(len(t)) # Pre-allocate the memory for F
R[0] = R0
F[0] = F0
for n in range(0,len(t)-1):
dt = t[n+1] - t[n]
R[n+1] = R[n]*(1 + alpha*dt - gamma*dt*F[n])
F[n+1] = F[n]*(1 - beta*dt + delta*dt*R[n])
return R,F
def main():
# Main driver to organize the code better
t = np.linspace(0,40,3201) # interval [0,40] with 3201 equispaced points
# as you increase the number of points the
# solution becomes more similar to the
# reference solution on wikipedia
# You should set the parameters below as in your problem
# I am using the Baboon-Cheetah example from wikipedia
alpha, beta, gamma, delta = 1.1,0.4,0.4,0.1
R0, F0 = 10, 10
# Actually solve the problem
R, F = LotkaVolterra_EEuler(R0, F0, alpha, beta, gamma, delta, t)
# Plot the solution
plt.plot(t,R,'b.-',t,F,'r-')
plt.legend(['Baboon','Cheetah'])
plt.grid(True)
plt.title("Solution of Lotka-Volterra system using explicit Euler")
plt.show()
main() # Call the driver to get the results
这段代码可以改进很多。例如,它只解决 Lotka-Volterra,但显式 Euler 求解器可以推广到解决其他问题。假设会有一对捕食者和猎物,但并非必须如此。我会把剩下的留给你。您可以提出更多问题,我会尽力提供帮助,但我认为这应该是一个好的开始。