Lotka-Volterra, can you estimate steady-state values from just exploring a plot?

12 次查看(过去 30 天)
Hello,
I am currently working on the Lotka-Volterra model for modelling hare-lynx populations over time.
I have a working function to model this with ode45, that is not a problem.
These are the differential equations that I am using:
% growth rate of the prey population (snowshoe hare)
dxdt(1)=k1*x(1)-k2*x(1)*x(2);
% growth rate of the predator populations (canadian lynx)
dxdt(2)=k2*x(1)*x(2)-k3*x(2);
But then, I also have historical data of number of lynx and hares from 1900 to 1920. I was asked to estimate a new k1 value (different from my initial model, where I know all, k1, k2 and k3), then estimate the steady-state values for X (hare) and Y (lynx) from the historical data. And then, based on the new k1 and the calculated steady-states, calculate new k2 and k3.
So I have the new k1, which is 1.3610. But I don't know how to estimate the steady-states here from just looking at a graph (this was suggested by one of the tutors on a forum), or without knowing the new k2 and k3 yet. If I knew the k2 and k3, that would be fairly easy, as I would only need to calculate X and Y values for which my differential equations are zero. I read that there is an option of plotting nullclines to find steady-states, but I don't know how to apply them with only knowing k1 and having the historical values of number of prey and predators.
The plots above are the historical data that I have imported and plotted. I would very much appreciate if someone could tell me how I can estimate the steady-states from these.
BW,
K

回答(1 个)

David Goodmanson
David Goodmanson 2021-7-16
编辑:David Goodmanson 2021-7-16
Hi Kamila,
Here is one fairly simple way to find the parameters. The two equations are
dhare/dt = k1*hare - k2*hare*lynx
dlynx/dt = -k3*lynx + k2*hare*lynx
The steady state fixed point occurs when both time derivatives are zero in which case the fixed point is at [hare0,lynx0] and you can solve and get the standard result
hare0 = k3/k2 lynx0 = k1/k2
For Lotka-Volterra, the oscillations form a closed single-loop orbit. Fortunately for the Hudson Bay data someone chose to provide 21 years so there is an almost exactly closed two-loop curve. (The loops would be identical for perfect L-V behavior but of course this is real data).
Suppose 'hare' is a row vector of population by year. I added the first point to the end of the array with hare = [hare hare(1)] (similarly for lynx) so now if you plot hare vs lynx you will get a closed curve with two loops.
So far so good. Now suppose you time integrate both sides of the first L-V equation around an integral number of orbits, going from tstart to tfin. On the left hand side, integrating the derivative you get hare(tstart)-hare(tfin) = 0 since the start position and the end position are the same. On the right hand side you get
0 = k1*Ihare - k2*Iboth where Ihare = Int hare dt and Iboth = Int hare*lynx dt
so
Iboth/Ihare = k1/k2 = lynx0
and similarly for the second equation
Iboth/Ilynx = k3/k2 = hare0
For the integrations you can use t = 0:21 since you have one-year intervals and use the trapz function ,
Ihare = trapz(t,hare) (similary for lynx); Iboth = trapz(t,hare.*lynx)
I got lynx0 = 2.0883e+04 hare0 = 3.5292e+04
which, given the look of the data, ought to be rounded to something like 21000 and 35000. Once you have those, with a new k1 you can use the eqns above to solve for k2 and k3.
A long time ago there was a comic strip about Fat Freddy's Cat. One day Fat Freddy's Cat went out toward the woods and met a big kind of cat he had never seen before. He said, what kind of cat are you? And the cat said, "I'm a lynx". To which FFC said, "Oh, I always wondered where links sausage came from".

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by