Here is the discrete logistic equation:
Here is the bifurcation diagram of the discrete logistic equation:
Question: how do we get the latter from the former?
It is here that the mathozoids begin to titter on about Lyapunov exponents and Dulac criterions and Poincare-Bendixson theorems and eigenvalue linearizations and whatnot. Bist du allein klug?* Because for someone trying to get their head around the bifurcation diagram for the first time? NOT HELPFUL.
And, yes, I know there's supposed to be a soupcon on the end of "Poincare."
I'm omitting it to demonstrate my contempt.
More the shame is that the bifurcation diagram is not difficult to understand if it is explained properly. There might even be one or two acceptable explanations out there somewhere. But those explanations lack the LabKitty signature panache. Let's see if we can do better.
First, a quick tour of the discrete logistic equation. What does it describe and what do the letters mean?
We seek to model a population of some reproducing organism (e.g., bacteria, subtidal ascidians, geraffes). The number of individuals at time t is usually denoted N(t). However, we assume our organisms reproduce all-at-once per time interval (i.e., "discretely," not to be confused with "discreetly") so we use "N(n)" instead of "N(t)" where n only takes on integer values. Hence: N(0) is the number of individuals we start with, N(1) is the number after one time interval, N(2) the number after 2 time intervals, and so on.
Footnote: Because humans -- randy little monkeys that we are -- breed continuously, the discrete logistic is not a good model for us. A discrete growth model is more appropriate for organisms that have an annual breeding season (i.e., go into "heat") like mule deer or undergraduates.
A population can grow fast or slow depending on things like birth and death rates, the average number offspring per mother, etc. We quantify all this using a single parameter "r" -- the population growth rate. If there were no limits on the size of the population (stay tuned) this is all our equation would need: N(n+1) = N(n) + r N(n). In words: the population in the next time interval is the population now plus the growth rate times the population now. Easy peasy.
Such unconstrained growth is called geometric growth (or exponential growth in a continuous-time model). A real population, however, cannot grow forever without limit. There is usually something that caps the maximum possible population size (think: the petri dish for bacteria or the erf for humans). In ecology lingo, this is called carrying capacity and denoted K. When we modify the discrete geometric growth equation to include a carrying capacity, we get the logistic:
N(n+1) = N(n) + r N(n) [ 1 - N(n)/K ]
Here, the population can grow as long as N < K. If N > K the term in brackets is negative and N(n+1) will be smaller than N(n) -- the population is getting dragged back down towards the carrying capacity. When N is precisely K, the equation predicts that the population size will remain at K, forever.
Footnote: I should note there are other forms of the discrete logistic equation. For example: N(n+1) = N(n) exp(r[1-N(n)/K]). The advantage of this version is that it can't generate negative population values (which the version we're using will for certain combinations of parameters). FYI.
This brings us to the bifurcation diagram.
The discrete logistic equation is famous for the strange behavior it exhibits when we tweak r. Doing so doesn't just make the population grow faster or grow slower. No, sir. For some values of r, the population will approach K and stick there. For others, however, the numbers will bounce around: the population will be larger than K, then smaller, then larger again. Sometimes such cycles are periodic; other times the bouncing around is more complicated, even chaotic (in the technical sense of nonlinear dynamics).
Here's three examples showing population growth for r values of 1.5, 2.2, and 2.9. Here I've set K = 1 and so N is interpreted as the population size as a fraction of K. This is usually how you see the bifurcation diagram plotted.
Mathematics is the study of patterns, the saying goes, and we would like to look for some pattern in how tweaking the growth rate changes the behavior of our system. One way to do this would be to systematically vary r and make plot after plot of the response and then thumb through the resulting big stack of plots and see if we can make some sense of it. In a manner of speaking, that's what the bifurcation diagram does for us. Let's have another look at it and relate the three sample responses shown above to the corresponding data shown in the bifurcation diagram.
Consider r = 1.5. The time series data shows that the system eventually reaches K (here equal to 1) and sticks there. So, on the bifurcation diagram we put a point at (1.5,1.0). This is point A on the diagram.
Consider r = 2.3. The system bounces between 0.75 and 1.16, approximately On the bifurcation diagram we put a point at (2.3,0.75) and another at (2.3,1.16). These are labeled B on the diagram.
Consider r = 2.9. The system is going nutzo, so we turn things over to MATLAB. We have it make a list of all the N values that the equation generates and plot them all at r = 2.9. In less-technical terms: we simply smoosh all the data into a single vertical line. This is C on the diagram.
Indeed, the smooshing approach works for any value of r. Here's MATLAB code that plots the whole diagram:
N0 = 0.1; K = 1;
r_min = 1; r_max = 3;
delta_r = 0.1;
nstep = 100;
clf; hold on;
for r = r_min : delta_r : r_max
N = zeros(nstep,1);
N(1) = N0;
for step = 1 : nstep-1
N(step+1) = N(step) + r*N(step)*(1-N(step)/K);
end
Y = N(nstep/2:nstep);
X = r*ones(size(Y));
plot(X,Y,'ko');
end
For a given value of r, we run the logistic out 100 time steps; we then throw out the first half of the data (to omit any start-up transients) and plot all remaining N values on the vertical line x = r. Repeating this process for r = 1 to r = 3 gives us the following bifurcation diagram:
This plot is coarse-grained (for lack of a better term) so you can more easily see what's being plotted. If you change delta_r to 0.01 in the code and plot dots instead of circles -- change plot(X,Y,'ko') to plot(X,Y,'k.') -- then you get the slicker version of the bifurcation diagram shown earlier.
And that's all there is to it. I dare say even my mom could understand the bifurcation diagram, given a proper explanation. (Nice lady, sure, but not exactly what you would call an intellectual powerhouse. Love you, Cat Mother.)
And if any of you mathozoids out there still insist on confusing students with Lyapunov exponents and what all else, you leave me no choice: I will fight you in the parking lot. Provided, of course, you provide airfare and an acceptable per diem.
LabKitty: the voice of reason in a world gone mad.
N(n+1) = N(n) + r N(n) [ 1 - N(n) / K ]
Here is the bifurcation diagram of the discrete logistic equation:
Question: how do we get the latter from the former?
It is here that the mathozoids begin to titter on about Lyapunov exponents and Dulac criterions and Poincare-Bendixson theorems and eigenvalue linearizations and whatnot. Bist du allein klug?* Because for someone trying to get their head around the bifurcation diagram for the first time? NOT HELPFUL.
And, yes, I know there's supposed to be a soupcon on the end of "Poincare."
I'm omitting it to demonstrate my contempt.
More the shame is that the bifurcation diagram is not difficult to understand if it is explained properly. There might even be one or two acceptable explanations out there somewhere. But those explanations lack the LabKitty signature panache. Let's see if we can do better.
First, a quick tour of the discrete logistic equation. What does it describe and what do the letters mean?
We seek to model a population of some reproducing organism (e.g., bacteria, subtidal ascidians, geraffes). The number of individuals at time t is usually denoted N(t). However, we assume our organisms reproduce all-at-once per time interval (i.e., "discretely," not to be confused with "discreetly") so we use "N(n)" instead of "N(t)" where n only takes on integer values. Hence: N(0) is the number of individuals we start with, N(1) is the number after one time interval, N(2) the number after 2 time intervals, and so on.
Footnote: Because humans -- randy little monkeys that we are -- breed continuously, the discrete logistic is not a good model for us. A discrete growth model is more appropriate for organisms that have an annual breeding season (i.e., go into "heat") like mule deer or undergraduates.
A population can grow fast or slow depending on things like birth and death rates, the average number offspring per mother, etc. We quantify all this using a single parameter "r" -- the population growth rate. If there were no limits on the size of the population (stay tuned) this is all our equation would need: N(n+1) = N(n) + r N(n). In words: the population in the next time interval is the population now plus the growth rate times the population now. Easy peasy.
Such unconstrained growth is called geometric growth (or exponential growth in a continuous-time model). A real population, however, cannot grow forever without limit. There is usually something that caps the maximum possible population size (think: the petri dish for bacteria or the erf for humans). In ecology lingo, this is called carrying capacity and denoted K. When we modify the discrete geometric growth equation to include a carrying capacity, we get the logistic:
N(n+1) = N(n) + r N(n) [ 1 - N(n)/K ]
Here, the population can grow as long as N < K. If N > K the term in brackets is negative and N(n+1) will be smaller than N(n) -- the population is getting dragged back down towards the carrying capacity. When N is precisely K, the equation predicts that the population size will remain at K, forever.
Footnote: I should note there are other forms of the discrete logistic equation. For example: N(n+1) = N(n) exp(r[1-N(n)/K]). The advantage of this version is that it can't generate negative population values (which the version we're using will for certain combinations of parameters). FYI.
This brings us to the bifurcation diagram.
The discrete logistic equation is famous for the strange behavior it exhibits when we tweak r. Doing so doesn't just make the population grow faster or grow slower. No, sir. For some values of r, the population will approach K and stick there. For others, however, the numbers will bounce around: the population will be larger than K, then smaller, then larger again. Sometimes such cycles are periodic; other times the bouncing around is more complicated, even chaotic (in the technical sense of nonlinear dynamics).
Here's three examples showing population growth for r values of 1.5, 2.2, and 2.9. Here I've set K = 1 and so N is interpreted as the population size as a fraction of K. This is usually how you see the bifurcation diagram plotted.
Mathematics is the study of patterns, the saying goes, and we would like to look for some pattern in how tweaking the growth rate changes the behavior of our system. One way to do this would be to systematically vary r and make plot after plot of the response and then thumb through the resulting big stack of plots and see if we can make some sense of it. In a manner of speaking, that's what the bifurcation diagram does for us. Let's have another look at it and relate the three sample responses shown above to the corresponding data shown in the bifurcation diagram.
Consider r = 1.5. The time series data shows that the system eventually reaches K (here equal to 1) and sticks there. So, on the bifurcation diagram we put a point at (1.5,1.0). This is point A on the diagram.
Consider r = 2.3. The system bounces between 0.75 and 1.16, approximately On the bifurcation diagram we put a point at (2.3,0.75) and another at (2.3,1.16). These are labeled B on the diagram.
Consider r = 2.9. The system is going nutzo, so we turn things over to MATLAB. We have it make a list of all the N values that the equation generates and plot them all at r = 2.9. In less-technical terms: we simply smoosh all the data into a single vertical line. This is C on the diagram.
Indeed, the smooshing approach works for any value of r. Here's MATLAB code that plots the whole diagram:
N0 = 0.1; K = 1;
r_min = 1; r_max = 3;
delta_r = 0.1;
nstep = 100;
clf; hold on;
for r = r_min : delta_r : r_max
N = zeros(nstep,1);
N(1) = N0;
for step = 1 : nstep-1
N(step+1) = N(step) + r*N(step)*(1-N(step)/K);
end
Y = N(nstep/2:nstep);
X = r*ones(size(Y));
plot(X,Y,'ko');
end
For a given value of r, we run the logistic out 100 time steps; we then throw out the first half of the data (to omit any start-up transients) and plot all remaining N values on the vertical line x = r. Repeating this process for r = 1 to r = 3 gives us the following bifurcation diagram:
This plot is coarse-grained (for lack of a better term) so you can more easily see what's being plotted. If you change delta_r to 0.01 in the code and plot dots instead of circles -- change plot(X,Y,'ko') to plot(X,Y,'k.') -- then you get the slicker version of the bifurcation diagram shown earlier.
And that's all there is to it. I dare say even my mom could understand the bifurcation diagram, given a proper explanation. (Nice lady, sure, but not exactly what you would call an intellectual powerhouse. Love you, Cat Mother.)
And if any of you mathozoids out there still insist on confusing students with Lyapunov exponents and what all else, you leave me no choice: I will fight you in the parking lot. Provided, of course, you provide airfare and an acceptable per diem.
LabKitty: the voice of reason in a world gone mad.
* Emperor Charles V to Martin Luther, 1521.
No comments:
Post a Comment