Skip to main content
Mathematics LibreTexts

4.5: Building Your Own Model Equation

  • 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}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Now that you know how to simulate the dynamics of difference equations, you may want to try building your own model equation and test its behaviors. Then a question arises: How do you build your own model equation?

    Mathematics is a language that is used to describe the world. Just like that there is no single correct way to describe an idea in English, there is no single correct way to build a mathematical model equation either. It is highly dependent on your own personal literacy, creativity, and expressiveness in the language of mathematics. Ultimately, you just need to keep “reading” and “writing” math every day, in order to get better in mathematical model building. Having said that, there are some practical tips I can offer to help you build your own model equations. Here they are:

    Practical tips for mathematical model building

    1. If you aren’t sure where to start, just grab an existing model and tweak it.
    2. Implement each model assumption one by one. Don’t try to reach the final model in one jump.
    3. To implement a new assumption, first identify which part of the model equation represents the quantity you are about to change, replace it with an unknown function, and then design the function.
    4. Whenever possible, adopt the simplest mathematical form.
    5. Once your equation is complete, check if it behaves as you desired. It is often helpful to test its behavior with extreme values assigned to variables and/or parameters.

    Let me illustrate each of those tips by going through an example. Consider building another population growth model that can show not just exponential growth but also convergence to a certain population limit. Any ideas about where to start? As the first tip suggests, you could use an existing model that is similar to what you want to model, and then modify it for your needs. Since this example is about population growth, we already know one such model: the exponential growth model. So let’s start there:

    \[x_{t}=ax_{t-1}\label{(4.19)} \]

    This model is very simple. It consists of just two components: growth ratio \(a\) and population size \(x_{t−1}\).

    The second tip says you should take a step-by-step approach. So let’s think about what we additionally need to implement in this model. Our new model should show the following two behaviors:

    • Exponential growth
    • Convergence to a certain population limit

    We should check the first one first. The original model already shows exponential growth by itself, so this is already done. So we move on to the second one. Obviously, the original model doesn’t show such convergence, so this is what we will need to implement in the model. The third tip says you need to focus on a specific component to be revised. There are many options here. You could revise \(a\), \(x_{t−1}\), or you could even add another term to the right hand side. But in this particular case, the convergence to a certain limit means that the growth ratio \(a\) should go to 1 (i.e., no net growth). So, we can focus on the a part, and replace it by an unknown function of the population size \(f(x_{t−1})\). The model equation now looks like this:

    \[x_{t}=f(x_{t-1})x_{t-1}\label{(4.20)} \]

    Now your task just got simpler: just to design function \(f(x)\). Think about constraints it has to satisfy. \(f(x)\) should be close to the original constant \(a\) when the population is small, i.e., when there are enough environmental resources, to show exponential growth. In the meantime, \(f(x)\) should approach 1 when the population approaches a carrying capacity of the environment(let’s call it \(K\) for now). Mathematically speaking, these constraints mean that the function \(f(x)\) needs to go through the following two points: \((x,f(x)) = (0,a)\) and \((K,1)\).

    And this is where the fourth tip comes in. If you have no additional information about what the model should look like, you should choose the simplest possible form that satisfies the requirements. In this particular case, a straight line that connects the two points above is the simplest one (Fig. 4.5.1), which is given by

    \[f(x)= -\frac{a-1}{K}x+a.\label{(4.21)} \]

    You can plug this form into the original equation, to complete a new mathematical equation:

    \[x_{t} =-(\frac{a-1}{K} x_{t-1} +a) x_{t-1}\label{(4.22)} \]

    Now it seems your model building is complete. Following the fifth tip, let’s check if the new model behaves the way you intended. As the tip suggests, testing with extreme values often helps find out possible issues in the model. What happens when \(x_{t−1} = 0\)?

    Fig. 4.5.PNG
    Figure \(\PageIndex{1}\): The simplest example of how the growth ratio \(a = f(x)\) function of population size should behave as a \(x\).

    In this case, the equation becomes \(x_{t = 0}\), so there is no growth. This makes perfect sense; if there are no organisms left, there should be no growth. Another extreme case: What happens when \(x_{t−1} = K\)? In this case, the equation becomes \(x_{t} = x_{t−1}\), i.e., the system maintains the same population size. This is the new convergent behavior you wanted to implement, so this is also good news. Now you can check the behaviors of the new model by computer simulations.

    Exercise \(\PageIndex{1}\)

    Simulate the behavior of the new population growth model for several different values of parameter \(a\) and initial condition \(x_{0}\) to see what kind of behaviors are possible.

    \[x_{t} = -(\frac{a-1}{K} x_{t-1} +a)x_{t-1}\label{(4.23)} \]

    For your information, the new model equation we have just derived above actually has a particular name; it is called the logistic growth model in mathematical biology and several other disciplines. You can apply a parameter substitution \(r = a−1\) to make the equation into a more well-known form:

    \[x_{t} = -(\frac{a-1}{K} x_{t-1} +a)x_{t-1}\label{(4.24)} \]

    \[=-(\frac{r}{K}x_{t-1} +r+1)x_{t-1}\label{ (4.25)} \]

    \[=x_{t-1}+rx_{t-1}(1- \frac{x_{t-1}}{K})\label{(4.26)} \]

    This formula has two terms on its right hand side: the current population size \((x_{t−1})\) and the number of newborns \((rx_{t−1}(···))\). If \(x\) is much smaller than \(K\), the value inside the parentheses gets closer to 1, and thus the model is approximated by

    \[x_{t} \approx x_{t-1} +rx_{t-1}.\label{(4.27)} \]

    This means that \(r\) times the current population is added to the population at each time step, resulting in exponential growth. But when \(x\) comes close to \(K\), inside the parentheses approaches 0, so there will be no net growth.

    Exercise \(\PageIndex{2}\)

    Create a mathematical model of population growth in which the growth ratio is highest at a certain optimal population size, but it goes down as the population deviates from the optimal size. Then simulate its behavior and see how its behavior differs from that of the logistic growth model.

    This page titled 4.5: Building Your Own Model Equation is shared under a CC BY-NC-SA 3.0 license and was authored, remixed, and/or curated by Hiroki Sayama (OpenSUNY) via source content that was edited to the style and standards of the LibreTexts platform.