这个例子展示了如何用这两种方法求解一个表示捕食者/猎物模型的微分方程ode23
和ODE45.
.这些功能用于使用可变步长runge-kutta集成方法的常微分方程的数值解。ode23
使用简单的2nd和3rd阶配方进行中等精度和ODE45.
使用第4个和第5阶对进行更高的准确性。
考虑一对一阶常微分方程生态方程,或捕食模型:
变量 和 分别测量猎物和捕食者的数量。二次交叉项解释了物种间的相互作用。捕食者数量在捕食者不存在时增加,捕食者数量在捕食者稀少时减少。
要模拟该系统,创建一个函数,该函数返回状态导数的列向量,给定状态和时间值。这两个变量
和
可以在MATLAB中表示为向量的前两个值y
.类似地,衍生物是向量中的前两个值yp
.函数必须接受的值t
和y
并返回由其中的方程产生的值yp
.
Yp (1) = (1 - y(2))*y(1)
Yp (2) = (-1 + *y(1))*y(2)
在这个例子中,方程包含在一个名为lotka.m.
.该文件使用的参数值为
和
.
类型洛特卡
函数yp = lotka(t,y) % lotka - volterra捕食-猎物模型。% Copyright 1984-2014 The MathWorks, Inc. yp = diag([1 - .01*y(2), -1 + .02*y(1)])*y;
使用ode23
解定义的微分方程洛特卡
超过间隔
.使用的初始条件为
因此,捕食者和猎物的群体是平等的。
t0 = 0;tfinal = 15;y0 = [20;20);[t,y] = ode23(@lotka,[t0 tfinal],y0);
将产生的种群与时间相乘。
情节(t, y)标题('捕食者/猎物群体随着时间的推移')xlabel(“t”)ylabel('人口')传说('猎物',“捕食者”,'地点',“北”)
现在让人口互相残杀。由此得到的相平面图使种群之间的循环关系非常清楚。
情节(y (: 1), y(:, 2))标题(“相平面图”)xlabel(“猎物人口”)ylabel(捕食者种群的)
解系统第二次使用ODE45.
,而不是ode23
.这ODE45.
求解器每一步花费的时间更长,但它也需要更大的步骤。然而,产量ODE45.
是平滑的,因为默认情况下,求解器使用一个连续扩展公式,在所采取的每个步骤的跨度中,在四个等间隔时间点产生输出。(你可以调整点数与“完善”
选择。)画出两个解决方案进行金宝搏官方网站比较。
[T,Y] = ode45(@lotka,[t0 tfinal],y0);情节(y (: 1), y (:, 2),“- - -”Y (: 1), Y (:, 2),“- - -”);标题(“相平面图”)传说(“ode23”,“数值”)
结果表明,用不同的数值方法求解微分方程会得到略有不同的结果。