We had a worksheet in class that did several things:
Explained the dynamics of quadratic maps with zero or one fixed point.
Proved that if a quadratic has two fixed points, it is conjugate via an affine linear map to a map of the form $F_\mu(x) = \mu x (1-x).$ where $\mu>1$. These maps form the Logistic family of maps.
One trivial remark is that if $\mu>1$, then every point in $(-\infty,0) \cup (1, \infty)$ is forward asymptotic to $-\infty$. This is because $F_\mu(x)
Because of this we will concentrate on understanding the dynamics on the interval $[0,1]$.
The goal of this notebook is to take a tour through the Logistic family as $\mu$ increases from the value one. Below we define the logistic family:
def F(mu): def F_mu(x): return mu*x*(1-x) return F_mu
For example F(3/2) can be plotted as follows:
G = F(3/2) plot(G, 0, 1, aspect_ratio = 1)
The value $\mu$ represents $F'(0)$. Observe also that zero is fixed. Since $\mu>0$, this point represents a repelling fixed point.
The other fixed point is at the point $p_\mu = \frac{\mu-1}{\mu}.$ We define this point as a function of mu:
def p(mu): return (mu-1)/mu
We can check symbolically that $p_\mu$ is indeed fixed by $F_\mu$:
mu = var("mu") # make mu into a symbolic variable bool(F(mu)(p(mu)) == p(mu)) # Attempt to evaluate the equation as true or false.
More on symbolic expressions can be found here: http://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html
Now we consider the multiplier of the fixed point $p_\mu$. This is just the value $F_\mu'(p_\mu)$. Here we have Sage compute $F_\mu'$:
x = var("x") F_prime = F(mu)(x).derivative(x) F_prime
Below we demonstrate that
$F'_\mu(p_\mu)=2-\mu.$
Note that F_prime
is an algebraic expression in the variables x
and mu
. We can substitute a value for x
using the subs()
method which takes as input a mapping. We will map x
to p(mu)
. The .simplify_full()
method attempts to simplify the resulting expression.
F_prime.subs({x:p(mu)}).simplify_full()
Observe that:
We have $0
In the case $\mu=2$, we have $F'_\mu(p_\mu)=0$. This means that $p_\mu=\frac{1}{2}$ since $\frac{1}{2}$ is the only critical point. Since $F'_\mu(p_\mu)=0$, $p_\mu$ is a {\em super-attracting fixed point}. Furthemore, because $p_\mu$ coincides with the critical point, the map $F_\mu$ is never one-to-one on a neighborhood of $p_\mu$.
We have $-1
When $\mu>3$, we have that $F'_\mu(p_\mu)<-1$. At this point $p_\mu$ has become a repelling fixed point.
It follows from the above facts that two maps taken from different cases above are not topologically conjugate. For example, a map from case 1 is not conjugate to a map from case 3, because in case 1, the attracting fixed point $p_\mu$ is locally orientation preserving, whiel in case 3 the attracting fixed point is locally orienation reversing.
In fact it can be shown that two maps taken from case 1 are topologically conjugate, and two maps taken from case 3 are topologically conjugate. The topological conjugacy can not be a diffeomorphism because conjugacy by a diffeomorphism preserves multipliers at fixed and periodic points. (Excercise: Show this is true.)
Now we will attempt to understand the dynamics of these maps for values of $\mu$ running from $1$ to a little bigger than $3$.
This cobweb function was taken from an earlier notebook:
def cobweb(x, T, N, xmin, xmax): cobweb_path = [(x,x)] for i in range(N): y = T(x) # Reassign y to be T(x). cobweb_path.append( (x,y) ) cobweb_path.append( (y,y) ) x = y # Reassign x to be identical to y. cobweb_plot = line2d(cobweb_path, color="red", aspect_ratio=1) function_graph = plot(T, (xmin, xmax), color="blue") # define the identity map: identity(t) = t id_graph = plot(identity, (xmin, xmax), color="green") return cobweb_plot + function_graph + id_graph
Here is an example of a cobweb plot in the case $\mu=\frac{3}{2}$ starting at $x=0.1$, plotting 10 iterations over the interval $(0,1)$.
cobweb(0.1, F(3/2), 10, 0, 1)
We will use sliders to allow experimentation. A slider can be created decribing values in the interval $[1,2]$ with a step size of $0.001$ and initial value $3/2$ as below:
slider(1, 2, 0.001, 3/2)
We want to be able to vary $\mu \in (1,2)$ and vary $x \in (0,1)$. We can use the @interact
decorator for a function to do this. The values of the sliders will be used as input to a function which is run whenever the sliders are updated.
@interact def iteractive_plot(mu = slider(1, 2, 0.001, 3/2), x = slider(0, 1, 0.001, 1/2)): return cobweb(x, F(mu), 10, 0, 1)
From looking at the Cobweb plot, you should be convinced that:
Any point $x \in (0, p_\mu)$ has an orbit which increases and accumulates on $p_\mu$. To prove this, it suffices to show that $x \in (0, p_\mu)$ implies $x < F_\mu(x) < p_\mu$ and apply our standard argument.
Any point $x \in (p_\mu,\frac{1}{2}]$ has an orbit which decreases down toward $p_\mu$. Again it suffices to show that if $x \in (p_\mu,\frac{1}{2}]$, then $p_\mu < F_\mu(x) < x$.
If $x \in (\frac{1}{2}, 1)$, then $0 < F_\mu(x) < \frac{1}{2}$. From this and statements 1 and 2 above, it follows that $x$ is forward asymptotic to $p_\mu$.
The above shows that $W^s(p_\mu)=(0,1)$, which completely describes the dynamics on $[0,1]$. Every point in $(0,1)$ is forward asymptotic to $p_\mu$. (Also, zero is fixed and $F_\mu(1)=0$.)
Recall that $F_2$ has a super-attracting fixed point. The point $p_\mu=\frac{1}{2}$ is both a critical point and fixed. The following code lets you experiment with this case.
@interact def iteractive_plot(x = slider(0, 1, 0.001, 1/4)): return cobweb(x, F(2), 10, 0, 1)
Similar analysis to the previous case can be used to prove that every point in $(0,1)$ is forward asymptotic to the super-attracting fixed point $p_\mu=\frac{1}{2}$.
You can experiment with the maps below:
@interact def iteractive_plot(mu = slider(2, 3, 0.001, 2.5), x = slider(0, 1, 0.001, 0.9)): return cobweb(x, F(mu), 20, 0, 1)
The dynamics are a bit more complex because locally $F_\mu$ is orientatation-reversing in a neighborhood of $p_\mu$. This causes orbits to spiral inward rather than approach directly.
By experimenting with the cobweb plots above, you should be convinced that all orbits are asymptotic to the fixed point $p_\mu$.
Theorem. When $2<\mu<3$, all orbits in $(0,1)$ are asymptotic to $p_\mu$.
We will give a proof of this using the following claim about the interval $I = [\frac{1}{2}, 2 p_\mu-\frac{1}{2}]$.
Claim. Suppose $2<\mu<3$.
The interval is symmetric around $p_\mu$.
We have $F_\mu(\frac{1}{2}) \in I$. Note that $F_\mu(\frac{1}{2})$ is the maximum value taken by $F_\mu$.
We have $-1 < (F^2_\mu)'(x) < 1$ for each $x \in I$.
Proof of 1. It is symmetric around $p_\mu$ because the endpoints are at equal distance from $p_\mu$. Observe $|p_\mu-\frac{1}{2}|=p_\mu-\frac{1}{2} = |p_\mu-(2 p_\mu-\frac{1}{2})|.$
Graphical "proof" of 2. We can consider plotting the left and right endpoints of $I$ as well as $F_\mu(\frac{1}{2})$. We plot the left endpoint in green, the right endpoint in blue, and the $F_\mu(\frac{1}{2})$ in red below. All are expressed as a function of $\mu$.
plt = plot(1/2, 2, 3, color="green") plt += plot(2*p(mu)-1/2, 2, 3, color="blue") plt += plot(F(mu)(1/2), 2, 3, color="red") plt
Graphical "proof" of 3. We plot $(F^2_\mu)'(x)$ as a function of $x$ below, allowing the choice of $\mu$ with a slider. We also add plots of the constant function $-1$ and the constant function $1$.
@interact def iteractive_plot(mu = slider(2, 3, 0.001, 2.5)): x = var("x") F_mu = F(mu) square = F_mu(F_mu(x)) plt = plot(square.derivative(x), 1/2, 2*p(mu)-1/2, color="blue") plt += plot(-1, 1/2, 2*p(mu)-1/2, color="red") plt += plot(1, 1/2, 2*p(mu)-1/2, color="red") return plt
Proposition. If $x \in I$, then the orbit of $x$ is forward asymptotic to $p_\mu$.
Proof: We use the Claim. Since $|(F_\mu^2)'(t)|$ is a continuous function of $t$, it attains a maximum on $I$. Call this value $C$. By statement 3 of the claim, we know $C<1$. Then by the Mean Value Theorem, we see that for any $x \in I$, we have $|F_\mu^2(x)-p_\mu| < C |x - p_\mu|.$ Since $F_\mu^2(x)$ is closer to $p_\mu$ than $x$ and $I$ is symmetric around $p_\mu$, it must be that $F_\mu^2(x) \in I$. Then by induction we see that for any $x \in I$ and any $k>0$, we have $|F_\mu^{2k}(x)-p_\mu| < C^k |x - p_\mu|.$ Since $C<1$, the right hand side tends to zero as $k \to +\infty$. Thus, we have that $\lim_{k \to +\infty} F_\mu^{2k}(x)=p_\mu$. This shows that the orbit of $x$ is forward asymptotic to $p_\mu$. as desired. □
Proof of the Theorem. Now we will show that all points are forward asymptotic to $p_\mu$.
From the proposition above, we already know that the statement is true on the interval $I=[\frac{1}{2}, 2 p_\mu-\frac{1}{2}]$.
Now consider the case of $x \in (0,\frac{1}{2})$. Observe that if $x \in (0,\frac{1}{2})$, then $F_\mu(x)>x$. Since there are no fixed points in the interval $(0,\frac{1}{2})$, points in the orbit increase until at some point we reach a $F_\mu^n(x) \geq \frac{1}{2}$. Since $F_\mu^n(x)$ is in the image of $F_\mu$, it is less than or equal to the maximum $F_\mu(\frac{1}{2})$ taken. Thus from statement (2) of the claim we know that $F_\mu^n(x) \in I$. But then it follows from the Proposition above that $F_\mu^n(x)$ is forward asymptotic to $p_\mu$. But, then $x$ must be forward asymptotic to $p_\mu$ as well.
We already know $\frac{1}{2}$ is forward asymptotic to $p_\mu$ since $\frac{1}{2} \in I$. Now consider the $x>\frac{1}{2}$. Let $y=1-x$, which is less than $\frac{1}{2}$. Then we know from the previous paragraph that $y$ is forward asymptotic to $p_\mu$. But we also have that $F_\mu(x)=F_\mu(y)$ and thus $F^n_\mu(x)=F^n_\mu(y)$ for all $n \geq 1$. Thus $x$ must also be forward asymptotic to $p_\mu$. □
@interact def iteractive_plot(mu = slider(2, 3, 0.001, 2.5), x = slider(0, 1, 0.001, 0.9)): plt = cobweb(x, F(mu), 20, 0, 1) plt += line2d([(1/2,1/2),(2*p(mu)-1/2,2*p(mu)-1/2)],thickness=2,color="purple") return plt
At the value of $3$, the point $p_\mu$ is slowly attracting.
@interact def iteractive_plot(x = slider(0, 1, 0.001, 0.9)): return cobweb(x, F(3), 200, 0, 1)
Aside from looking at the cobweb plot above, a good way to convince yourself of this is to look at the square. Here we define the square $F_\mu^2(x)$:
def F2(mu): F_mu = F(mu) def F2_mu(x): return F_mu(F_mu(x)) return F2_mu
@interact def iteractive_plot(x = slider(0, 1, 0.001, 0.9)): return cobweb(x, F2(3), 200, 0, 1)
The following lets you see what happens when you vary $\mu$ through the value of $3$. We plot on a small interval containing $p_\mu$.
@interact def iteractive_plot(mu = slider(2.9, 3.2, 0.001, 2.95), x = slider(0.5, 0.8, 0.001, 0.73)): return cobweb(x, F(mu), 200, 0.5, 0.8)
It is easier to see what is going on by plotting $F_\mu^2$.
@interact def iteractive_plot(mu = slider(2.9, 3.2, 0.001, 2.95), x = slider(0.5, 0.8, 0.001, 0.73)): return cobweb(x, F2(mu), 100, 0.5, 0.8)
The family of maps $F_\mu$ undergoes a period-doubling bifurcation at the value $c=3$. At values of $c$ slightly greater than $3$, the fixed point $p_\mu$ has switched to being a repelling fixed point, and a new attracting period two orbit emerges.