WOLFRAM 语言教程

求解 LotkaVolterra 方程的数值方法

引言

LotkaVolterra系统在数学生物学中出现,并且对动物物种的生长建模.考虑两个物种,其中 表示捕食者的数目,而 表示猎物的数量. LotkaVolterra 微分系统的一个具体实例是:

其中点号表示关于时间 的微分.

LotkaVolterra 系统(1)具有一个不变量,它对于所有 都是恒定的:

不变量 (1) 的水平曲线是闭合的,这使得解是周期性的. 我们期望 (2) 的数值解也是周期性的,但事实并非总是如此. 注意,(3) 是一个泊松系统:

其中 在 (4) 中定义.

泊松系统和泊松积分器在 [HLW02] 和 [MQ02] 的章节 VII.2 中讨论.

加载一个具有一些预定义问题的程序包,并且选择 LotkaVolterra 系统.
In[10]:=
Click for copyable input
定义一个功用函数来可视化解.
In[18]:=
Click for copyable input

显式欧拉

使用显式或者前向欧拉方法来求解系统 (5).
In[19]:=
Click for copyable input
Out[20]=

后退欧拉

定义关于 RadauIIA 隐式朗格-库塔方法的后退或者隐式欧拉方法,并且使用它来求解 (6). 所得的轨迹(trajectory)从初始条件开始以顺时针方向向位于 (2,1) 的固定点螺旋形旋转.
In[21]:=
Click for copyable input
Out[23]=

投影

使用 LotkaVolterra 方程的不变量(2)的前向欧拉方法的投影给出一个周期性的解.
In[24]:=
Click for copyable input
Out[25]=

分裂

另一个获取正确定性行为的方法是使用加法规则把 (7) 分为两个系统:

通过适当地求解 (8),我们可以建立泊松积分器.

对 LotkaVolterra 方程的分裂定义方程.
In[26]:=
Click for copyable input

辛欧拉

对 (9)中的每个系统定义关于使用后退和前向欧拉方法的分裂法的辛欧拉法.
In[31]:=
Click for copyable input
使用辛欧拉法得到的数值解是周期性的.
In[33]:=
Click for copyable input
Out[33]=

考虑分裂 LotkaVolterra 方程,并且计算(1)中每个系统的流(或者精确解).该解可以通过如下方式找到,其中常量应该与每个步骤的初始条件相关.

In[34]:=
Click for copyable input
Out[34]=
In[35]:=
Click for copyable input
Out[35]=

局部计算流的一个优点是它产生一个显式,并且非常有效的积分过程. 方法提供一个只在初始阶段使用 DSolve 来计算每个分裂的流的一般方法.

建立一个混合的符号数值分裂法,并且使用它来求解 LotkaVolterra系统.
In[36]:=
Click for copyable input
使用分裂法的数值解是周期性的.
In[38]:=
Click for copyable input
Out[38]=