Skip to main content
\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)
Mathematics LibreTexts

5.3: 5.3 Cobweb Plots for One-Dimensional Iterative Maps

  • Page ID
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    One possible way to solve the overcrowded phase space of a discrete-time system is to create two phase spaces, one for time \(t−1\) and another for \(t\), and then draw trajectories of the system’s state in a meta-phase space that is obtained by placing those two phase spaces orthogonally to each other. In this way, you would potentially disentangle the tangled trajectories to make them visually understandable.

    However, this seemingly brilliant idea has one fundamental problem. It works only for one-dimensional systems, because two- or higher dimensional systems require fouror more dimensions to visualize the meta-phase space, which can’t be visualized in the three-dimensional physical world in which we are confined.

    This meta-phase space idea is still effective and powerful for visualizing the dynamics of one-dimensional iterative maps. The resulting visualization is called a cobweb plot, which plays an important role as an intuitive analytical tool to understand the nonlinear dynamics of one-dimensional systems.

    Here is how to manually draw a cobweb plot of a one-dimensional iterative map, \(x_{t} = f(x_{t−1})\), with the range of \(x_{t}\) being \([x_{min},x_{max}]\). Get a piece of paper and a pen, and do the following:

    1. Draw a square on your paper. Label the bottom edge as the axis for \(x_{t−1}\), and the left edge as the axis for \(x_{t}\). Label the range of their values on the axes (Fig. 5.3.1).

    Fig. 5.4.PNG
    Figure \(\PageIndex{1}\): Drawing a cobweb plot (1).

    2. Draw a curve \(x_{t} = f(x_{t−1})\) and a diagonal line \(x_{t} = x_{t−1}\) within the square (Fig. 5.3.2). Note that the system’s equilibrium points appear in this plot as the points where the curve and the line intersect.

    3. Draw a trajectory from \(x_{t−1}\) to \(x_{t}\). This can be done by using the curve \(x_{t} = f(x_{t−1)}\) (Fig. 5.3.3). Start from a current state value on the bottom axis (initially, this is the initial value \(x_{0}\), as shown in Fig. 5.3.3), and move vertically until you reach the curve. Then switch the direction of the movement to horizontal and reach the left axis. You end up at the next value of the system’s state (\(x_{1}\) in Fig. 5.3.3). The two red arrows connecting the two axes represent the trajectory between the two consecutive time points.

    4. Reflect the new state value back onto the horizontal axis. This can be done as a simple mirror reflection using the diagonal line (Fig. 5.3.4). This completes one step of the “manual simulation” on the cobweb plot.

    Fig. 5.5.PNG
    Figure \(\PageIndex{2}\): Drawing a cobweb plot (2).

    5. Repeat the steps above to see where the system eventually goes (Fig. 5.3.5).
    6. Once you get used to this process, you will notice that you don’t really have to touch either axis. All you need to do to draw a cobweb plot is to bounce back and forth between the curve and the line (Fig. 5.3.6)—move vertically to the curve, horizontally to the line, and repeat.

    Exercise \(\PageIndex{1}\)

    Draw a cobweb plot for each of the following models:

    • \[x_{t} = x_{t-1} +0.1, x_{0}=0.1\]
    • \[x_{t} =1.1x_{t-1}, x_{0}=0.1\]

    Exercise \(\PageIndex{2}\)

    Draw a cobweb plot of the following logistic growth model with \(r = 1\),\(K=1\), \(N_{0} =0.1\):

    \[N_{t} =N_{t-1} +rN_{t-1}(1-\frac{N_{t-1}}{K})\label{ (5.17)}\]

    Fig. 5.6.PNG
    Figure \(\PageIndex{3}\): Drawing a cobweb plot (3).

    Cobweb plots can also be drawn using Python. Code 5.4 is an example of how to draw a cobweb plot of the exponential growth model (Code 4.9). Its output is given in Fig. 5.4.1.

    code 5.4.png

    Figure \(\PageIndex{4}\): Drawing a cobweb plot (4).

    Code alternate 1.png

    Fig 5.8.PNG
    Figure \(\PageIndex{5}\): Drawing a cobweb plot (5).

    code alternate 2.png

    Exercise \(\PageIndex{3}\)

    Using Python, draw a cobweb plot of the logistic growth model with \(r = 2.5\), \(K = 1\), \(N_{0} = 0.1\).

    Fig 5.9.PNG
    Figure \(\PageIndex{6}\): Drawing a cobweb plot (6).