Note: if you are new to Mathematica, place your cursor directly over the blue triangle in the blue brackets to the right and "double click."

There are a couple of things you need to know when working through this Notebook:

1. much of the content of the Notebook is hidden under cells. To reveal the content of a cell, you double click within the cell brackets to the right (as you did to reveal these cells),

2. this is an interactive document. You are expected to enter calculations and be an active participant while working through this Notebook. Thus, when you come to lines which look like the following:

Plot[Sin[x], {x, 0, 2  π}];

you are expected to evaluate these cells. To evaluate a cell, place your cursor behind the line of "code" and hit either "Enter" (using the accounting keypad on the right of the keyboard) or hit "Shift+Return" (that is, hold down "Shift" and hit the carriage "Return"). The very first time you evaluate something in this Notebook, you will be asked if you would like to automatically initialize some cells. Please answer "yes".

Global behavior

© 1996-8,  Barry Brunson and Claus Ernst

The global behavior of a function is what the function eventually acts like and looks like as we move far away from the origin.

Polynomials

Introduction :  Where to look?

A good graph of a function is one that shows the important features of the function. The hardest part of graphing, even with a powerful tool such as Mathematica,  is knowing where to look. That is, what inputs should we use?

Graphs can be misleading if we don't know the whole story.

Here are four plots, labeled A, B, C, and D, with no tick marks on the vertical axes. Which one is the graph of the function
f[x] = 2 \(TraditionalForm
      \`x\^6\  + \ 600\ x\^5\  + \ 600000\ x\^4\  + \ 800000\ x\^3\  - 
        200000000\ x\^2\) ?

Clear[hardf, plf, a, b, c, d]\(hardf[x_] := 
      2\ x\^6 + 600\ x\^5 + 60000\ x\^4 + 800000\ x\^3 - 200000000\ x\^2; 

    plf[wid_, lab_] := 
      Plot[hardf[x], {x, \(-wid\), wid}, Ticks -> {Automatic, None}, 
        PlotLabel -> lab, DisplayFunction -> Identity]; 

    a = plf[10, "A"]; 
b = plf[100, "B"]; 
d = plf[1000, "D"]; 
    
c = Plot[hardf[x], {x, 0, 50}, Ticks -> {Automatic, None}, 
        PlotLabel -> "C", DisplayFunction -> Identity]; 

    Show[GraphicsArray[{{a, b}, {c, d}}, 
        PlotLabel -> 
          \*""          Will the correct graph of\nf[x]=2(x^6) + 600(x^5)+60000(x^4)+800000(x^3)-200000000(x^2)\n              please stand up?""]\ , DisplayFunction -> $DisplayFunction]; \)

These four graphs look very different. The surprising answer to the question is:  All of them are right. Each one is the graph of the same function f, just plotted on different intervals.

Do you believe that?   Here are plots A and B together. In plot B on the right, look at the shape of the curve close to 0. That dome-shaped part is exactly what shows up in plot A on the left.

Clear[ared, aredb]\(ared = 
      Plot[hardf[x], {x, \(-10\), 10}, Ticks -> {Automatic, None}, 
        PlotStyle -> {{Red, Thickness[ .015]}}, 
        PlotLabel -> "A", DisplayFunction -> Identity]; 

    aredb = Show[{ared, b}, PlotRange -> {{\(-100\), 100}, Automatic}, 
        Ticks -> {{\(-100\), \(-10\), 10, 100}, None}, 
        PlotLabel -> "B"]; 

    Show[GraphicsArray[{ared, aredb}], 
      DisplayFunction -> $DisplayFunction]; \)

Here are plots C and B together. In plot B on the right, look at the shape of the curve between 0 and 50. That dip followed by a steep rise part is exactly what shows up in plot C on the left.

Clear[dred, dredb]\(dred = 
      Plot[hardf[x], {x, 0, 50}, Ticks -> {Automatic, None}, 
        PlotStyle -> {{Red, Thickness[ .015]}}, 
        PlotLabel -> "C", DisplayFunction -> Identity]; 

    \(dredb = 
      Show[{dred, b}, PlotRange -> {{\(-100\), 100}, Automatic}, 
        Ticks -> {{\(-100\), 50, 100}, None}, 
        PlotLabel -> "B"]; 

    Show[GraphicsArray[{dred, dredb}], 
      DisplayFunction -> $DisplayFunction]; \)\)

Finally, here are plots B and D together. In plot D on the right, look at the color close to 0. That red color is exactly what comes from plot B on the left. The output values are so small, though, that the curvature is completely lost in the huge vertical scale that plot D has.

Clear[bred, bredc]\(bred = 
      Plot[hardf[x], {x, \(-100\), 100}, Ticks -> {Automatic, None}, 
        PlotStyle -> {{Red, Thickness[ .020]}}, 
        PlotLabel -> "B", DisplayFunction -> Identity]; 

    bredc = Show[{bred, d}, PlotRange -> {{\(-1000\), 1000}, Automatic}, 
        Ticks -> {{\(-1000\), 1000}, Automatic}, 
        PlotLabel -> "D"]; 

    Show[GraphicsArray[{bred, bredc}], 
      DisplayFunction -> $DisplayFunction]; \)

Plot D on the right shows the global behavior of the function f[x] = 2  (x^6)+600  (x^5)+600000  (x^4)+800000 (x^3)-200000000  (x^2). "Global behavior" means what the function eventually acts like and looks like as we move far away from the origin. The global behavior of this function is to look like y = 2  (x^6)  If we took even larger intervals than [-1000, 1000], the graph would not differ much in shape from that one. The other three graphs show different aspects of the function's local behavior. If we zoom out to larger intervals, we eventually will lose sight of those local features.

Here is plot D, together with the plot of y = 2  (x^6) on the same set of axes (y = 2  (x^6) is in red):

Clear[global]\(global\  = 
      Plot[{hardf[x], 2  x\^6}, {x, \(-1000\), 1000}, 
        PlotRange -> {{\(-1000\), 1000}, Automatic}, 
        Ticks -> {{\(-1000\), 1000}, Automatic}, 
        PlotStyle -> {{Red, Thickness[ .012]}, Black}, 
        DisplayFunction -> Identity]; 

    Show[GraphicsArray[{d, global}], 
      DisplayFunction -> $DisplayFunction]; 
\)

If we have an interval where a function exhibits its global behavior, then we don't need to look anywhere farther away from 0. All of the function's interesting features must show up inside that interval.
That's why it is important to know what the global behavior of a function is. We will know when we have an interval that is large enough.

Global twins

We will use "global twins" to stand for two functions that have the same global behavior.

A polynomial and its global twin

Here is a polynomial:

Clear[f]f[x_] := 2 (x^3) - 15 (x^2) + 10f[x]

Take a look at this sequence of plots. The plots show the graphs of  y = f[x]  and  y = 2 (x^3), but on wider and wider intevals (y = f[x] is in red).

MultiPlot[f[x], 2  (x^3), -5, 5];

MultiPlot[f[x], 2  (x^3), -10, 10];

MultiPlot[f[x], 2  (x^3), -50, 50];

MultiPlot[f[x], 2  (x^3), -100, 100];

What's happening as we look on wider and wider intervals ?

The plots are getting more and more alike. It looks like f[x] and 2  (x^3)are global twins. Remember what f[x] is:

f[x]

Why do you think that  2 (x^3) and f[x] turn out to be global twins?

Another polynomial and its global twin

Here is another polynomial:

Clear[g]g[x_] := 4 (x^8) + 120 (x^7) - 35200 (x^6) - (x^2) - 30 x + 8000g[x]

Take a look at this sequence of plots. The plots show the graphs of  y = g[x]  and  y = 4 (x^8) but on wider and wider intevals (y = g[x] is in red).

MultiPlot[g[x], 4 (x^8), -75, 75];

MultiPlot[g[x], 4 (x^8), -150, 150];

MultiPlot[g[x], 4 (x^8), -250, 250];

MultiPlot[g[x], 4 (x^8), -500, 500];

What's happening as we look on wider and wider intervals ?

The plots are getting more and more alike. (Some students like to say that the two functions are starting to cohabit.) It looks like g[x] and 4 (x^8)are global twins. Remember what g[x] is:

g[x]

Why do you think that   4 (x^8) and g[x] turn out to be global twins?

Something which is not a global twin

Here is another polynomial:

Clear[h]h[x_] := 2 (x^4) - 5730 (x^2) + 1825001h[x]

Take a look at this sequence of plots. The plots show the graphs of  y = h[x]  and  y = (x^4), but on wider and wider intevals (y = h[x]  is in red)

MultiPlot[h[x], x^4, -100, 100];

MultiPlot[h[x], x^4, -200, 200];

MultiPlot[h[x], x^4, -500, 500];

MultiPlot[h[x], x^4, -5000, 5000];

Explain what's happening as we look on wider and wider intervals.

The plots seemed to be getting more and more alike for a while. However, the situation seems to have settled down, and there is a permanent gap between the graphs of the two functions. We might begin to doubt that  h[x]  and  (x^4) are global twins. Here's one more plot:

MultiPlot[h[x], x^4, -50000, 50000];

Exactly the same kind of gap that was in the last plot, but this has a larger scale on the vertical axis. Remember what h[x] is:

h[x]

Why do you think that   (x^4) and h[x] turn not out to be global twins?

For the same reason that  (x^4) is not close to 2 \(TraditionalForm
      \`x\^4\ when\ one\ puts\ in\ large\ values\ for\ \(x . \)\)

What is a global twin for h[x]?

 2 (x^4) and h[x] are global twins. Here is a plot of 2 (x^4)  and h[x] on the same set of axes:

MultiPlot[h[x], 2  x^4, -500, 500];

They are already cohabiting, on a fairly small interval.

How to compare gobal twins?

Why does f[x] =  2  (x^3) - 15  (x^2)+10  just look like  2  (x^3)  on the global scale? Because for large (positive or negative) values of x,  15  (x^2) and 10  are tiny compared to 2  (x^3).

When x = 500  say,  the number 15  (x^2) is 3,750,000. That may be a pretty big number; it's more than the entire population of Kentucky (in 1990). But it's very small compared to 2  (x^3), which is 250,000,000; that's about the size of the entire U.S. population in 1990.

If two numbers are close together in size, how will they show it? The  difference between them should be close to 0. And the quotient of them should be close to 1.  Looking at the quotient is much more reliable as we will see.

Go with  f[x] = 2 (x^3)  -  15  (x^2)  +  10 and the global twin 2  (x^3). Here is a  table of values of x,  f[x], 2  (x^3), the difference between f[x] and 2  (x^3), and the quotient of them. We'll go from x =100 to x =1000 in steps of 100

Clear[f, x, tableofvalues]\(	f[x_] := 2\ x\^3 - 15\ x\^2 + 10\)\(tableofvalues = 
      Table[{x, f[x], 2\ x\^3, f[x] - 2\ x\^3, f[x]\/\(2\ x\^3\)}, {x, 100, 
          1000, 100}]; 

    TableForm[N[tableofvalues], 
      TableHeadings 
        -> {
          None, {" x", "   f[x]", \*""  2\!\(x\^3\)"", 
            \*"" difference\n  f[x]-2\!\(x\^3\)"", 
            \*""quotient\n  \!\(f[x]\/\(2  x\^3\)\)""}}]\)

What is going on, anyway? Well, it looks like both f[x] and 2  (x^3) are exploding. And the difference  f[x] - 2  (x^3) is growing also, in the negative direction. But the quotient  f[x]/(2  (x^3))  is staying peacefully small, and close to 1.

Check it out yourself! After running the command below, replace 1000 by some other input value for x, and compare[x] will give a new line of data like that in the table:  values of x, f[x], 2  (x^3), the difference f[x] - 2  (x^3), and the quotient f[x]/(2  (x^3)).

Clear[f, x]f[x_] := 2 (x^3) - 15 (x^2) + 10compare[1000]

What is a global twin exactly?

The simplest global twin

Here is one of the polynomials from above:

Clear[h]h[x_] := 2 (x^4) - 5730 (x^2) + 1825001h[x]

We saw that  2 (x^4)  and  h[x] are global twins. Would  2 (x^4) + 70  (x^3) - 3456  (x^2) - 459000 x   and  
h[x]  also be global twins? Sure they are. Here is a plot of them together on a pretty big interval:

MultiPlot[h[x], 2 (x^4) + 70 (x^3) - 3456 (x^2) -  459000  x, 
      -500, 500];

Cohabiting, no question about it. In exactly the same way, each of the following would be global twins with h[x] = 2 (x^4) - 5730 (x^2) + 1825001:

({{2 (x^4) -38  (x^3) - 92  x +12}, {2 (x^4)  +  7  (x^2)  -  345 x  - 1}, {2  (x^4) - 67  (x^2)  + 119  x  +  381}})

In fact, any fourth-degree polynomial whose fourth-degree term is  2  (x^4) will be a global twin of  h[x]= 2 (x^4) - 5730 (x^2) + 1825001. It makes sense to come up with the simplest global twin possible, namely just  2  (x^4).

BOTTOM LINE:
In this chapter we pick the simplest function which can be a global twin
by concentrating on the highest power term of a polynomial.

More detail on global twins (optional material for instructors)

Background

Here is the polynomial h[x] from before, along with a "messy" global twin:

Clear[h, f]h[x_] := 2 (x^4) - 5730 (x^2) + 1825001h[x]f[x_] := 2 (x^4) + 70 (x^3) - 3456 (x^2) -  459000  xf[x]

This plot shows the graphs of  y = h[x]  and  y = f[x]    on a wide inteval.

MultiPlot[h[x], f[x], -300, 300];

Definitely cohabiting. But we call 2  (x^4) the simplest global twin for h[x]. Here is a plot of all three:

MultiPlot[h[x], f[x], 2  x^4, -300, 300];

All three cohabiting. They are all global twins of each other.

In order to explain what is happening, and to get a precise defintion of "global twin", let's look at the quotients of the three functions.

Here is a first look for x values between -210 and 210.

Clear[f, g, h, x, tableofvalues]h[x_] := 2 (x^4) - 5730 (x^2) + 1825001f[x_] := 2 (x^4) + 70 (x^3) - 3456 (x^2) -  459000  xg[x_]  :=  2  (x^4)\(tableofvalues = 
      Table[N[{x, f[x]\/h[x], g[x]\/h[x], f[x]\/g[x]}], {x, \(-210\), 210, 
          20}]; 
TableForm[tableofvalues, 
      TableHeadings 
        -> {
          None, {"x", \*""\!\(f[x]\/h[x]\)"", 
            \*""\!\(\(2  x\^4\)\/h[x]\)"", 
            \*""\!\(f[x]\/\(2  x\^4\)\)""}}]\)

For x values close to zero,  wild things happen. For example, for x = 50 some of these quotients are very large. However we see that all three quotinets are close to 1 for x values farther away from zero.
Here is a similar table over a larger range of x values, from -3000 to 3000.

Clear[f, g, h, x, tableofvalues]h[x_] := 2 (x^4) - 5730 (x^2) + 1825001f[x_] := 2 (x^4) + 70 (x^3) - 3456 (x^2) -  459000  xg[x_]  :=  2  (x^4)\(tableofvalues = 
      Table[N[{x, f[x]\/h[x], g[x]\/h[x], f[x]\/g[x]}], {x, \(-3000\), 3000, 
          400}]; 
TableForm[tableofvalues, 
      TableHeadings 
        -> {
          None, {"x", \*""\!\(f[x]\/h[x]\)"", 
            \*""\!\(\(2  x\^4\)\/h[x]\)"", 
            \*""\!\(f[x]\/\(2  x\^4\)\)""}}]\)

As we expected the values are very close to the number 1. Here is a plot of all three graphs over the same large range from -3000 to 3000.

Clear[h]h[x_] := 2 (x^4) - 5730 (x^2) + 1825001h[x]f[x_] := 2 (x^4) + 70 (x^3) - 3456 (x^2) -  459000  xf[x]MultiPlot[h[x], f[x], 2  x^4, -3000, 3000];

All three graph appear to be the same !

Formal definition

A formal definition of the concept of global twin requires the notion of limit from calculus.

Formal Definition of Global Twin:
 Two functions  f and g  are global twins of each other if  \(TraditionalForm
      \`\(lim\+\(x -> ∞\)\) f[x]\/g[x]\  = \ 1\).

So what functions are global twins of  h[x] = 2  (x^4) - 4 = 5730  (x^2) + 1825001? All fourth degree polynomials whose fourth degree terms are 2 (x^4)will be global twins. In general, let f[x] = 2  (x^4) + (ax^3) + (bx^2) + cx  + d be such a polynomial.
Then
h[x]/f[x]= \(TraditionalForm
      \`\(\(2\ x\^4 - 5730\ x\^2 + 1825001\)\/\(2  x\^4 + a\ x\^3 + b\ x\^2 + 
          c\ x + d\)\ \)\) =  \(TraditionalForm
      \`\(2\ x\^4 - 5730\ x\^2 + 1825001\)\/\(2  x\^4 + a\ x\^3 + b\ x\^2 + 
          c\ x + d\)\)= \(TraditionalForm
      \`\(2 - 5730\/x\^2 + 1825001\/x\^4\)\/\(2 + a\/x + b\/x\^2 + c\/x\^3 + 
          d\/x\^4\)\)
Thus, (lim_(x -> ∞))h[x]/f[x]= 1, and  h  and  f  are global twins.

In fact, the above defintion defines an equivalence relation on the set of functions on the real line.

Homework:  Optical illusions

Sample problem with a solution

g[x] = 5000 (x^2) + 56090 (x^4) - 643 (x^5) + (x^6)

Here is a function and its plot on a pretty big interval:

Clear[g, x]g[x_] := 5000 (x^2) + 56090 (x^4) - 643 (x^5) + (x^6)MultiPlot[g[x], -50, 50];

Is this function showing its global behavior on this interval? Check to be sure. (What is its simplest global twin? What does its simplest global twin look like?)

Solution

Let's check out this function:

g[x]

The simplest global twin for this function is just  (x^6), and the plot shown above does have that classic U-shape that even-powered function share. But is g really showing its global behavior? Plot its twin also:

MultiPlot[g[x], (x^6), -50, 50];

Oops! Those two don't look like twins. We aren't far enough out yet. Here is a plot on a larger interval:

MultiPlot[g[x], (x^6), -100, 100];

There is some of g's local curvature that we would have missed entirely. Keep going. It may take quite a while to get far enough away.

MultiPlot[g[x], (x^6), -10000, 10000];

Now we're definitely far enough away from the origin: cohabitation all the way! This baby definitely is showing its global behavior.

Let's see if a smaller interval would work.

MultiPlot[g[x], (x^6), -1000, 1000];

Not nearly as good.

What happens to the ratio of g[x]/(x^6) ? Let's see:

compare[1000]compare[-1000]

We can see that the quotient is close to the number 1, for values of x far away from zero.

1. p[x] = 3 (x^7) - 360 (x^6) - 192 x + 23040

Here is a function and its plot on a pretty big interval:

Clear[p, x]p[x_] := 3 (x^7) - 360 (x^6) - 192 x + 23040MultiPlot[p[x], -100, 100];

This function definitely is not showing its global behavior on this interval. Why not? (What is its simplest global twin? What does that global twin look like?) Find a reasonably small interval on which the function does show its global behavior. Plot both the function and its global twin to show the near-cohabitation.  Show  that  ratio of p[x]/(global twin)   is close to the number 1  for some large values of x.

2. q[x] = 4 (x^6) - 680 (x^5) + 12000 (x^4) - 4 (x^2) + 680 x - 12000

Here is a function and its plot on a pretty big interval:

Clear[q, x]q[x_] := 
      4 (x^6) - 680 (x^5) + 12000 (x^4) - 4 (x^2) + 680 x - 12000MultiPlot[q[x], -100, 100];

This function definitely is not showing its global behavior on this interval. Why not? (What is its simplest global twin? What does that global twin look like?) Find a reasonably small interval on which the function does show its global behavior. Plot both the function and its global twin to show the near-cohabitation.  Show  that  ratio of q[x]/(global twin)  is close to the number 1  for some large values of x.

3. r[x] = 3 (x^9) - 262000 (x^7) + 6 (10^9) (x^5) + 2 (10^13) (x^3)

Here is a function and its plot on a pretty big interval:

Clear[r, x]r[x_] := 3 (x^9) - 262000 (x^7) + 6 (10^9) (x^5) + 2 (10^13) (x^3)MultiPlot[r[x], -100, 100];

The plot has that classic shape of an odd-powered power function. Is the function showing its global behavior on this interval? If not, find a reasonably small interval on which the function does show its global behavior. Plot both the function and its global twin to show the near-cohabitation.  Show  that the  ratio  r[x]/(global twin)   is close to the number 1  for some large values of x.

4. t[x] = 4 (x^7) - 25 (10^4) (x^5) + 5 (10^9) (x^3) - 3 (10^13) x

Here is a function and its plot on a pretty big interval:

Clear[t, x]t[x_] := 4 (x^7) - 25 (10^4) (x^5) + 5 (10^9) (x^3) - 3 (10^13) xMultiPlot[t[x], -100, 100];

Is this function showing its global behavior on this interval? If so, why? If not, find a reasonably small interval on which the function does show its global behavior. Plot both the function and its simplest global twin to show the near-cohabitation.  Show  that  ratio of t[x]/(global twin)  is close to the number 1 for some large values of x.

Homework: Polynomials

For each function, identify its global behavior. Find a relatively small interval on which it shows its global behavior. Justify your answer with a plot showing the polynomial and its simplest global twin on the same set of axes.

1.  f[x] = (x^5) + 15  (x^4) - 137  (x^3) - 2811  (x^2) - 5120x + 42900.

2.  g[x] = (x^4) + 12  (x^3) - 398  (x^2) + 2580x - 5075.

3.  h[x] = 6  (x^6) + 794  (x^5) - 837  (x^4) - 900  (x^3) - 30.

4. Make your own choice of a polynomial having degree 10. Identify its global behavior. Find a relatively small interval on which it shows its global behavior. Justify your answer with a plot showing the polynomial and its simplest global twin on the same set of axes.

5. Make your own choice of a polynomial having degree equal to your age in years. Identify its global behavior. Find a relatively small interval on which it shows its global behavior. Justify your answer with a plot showing the polynomial and its simplest global twin on the same set of axes.

6. Make up a polynomial f[x] that doesn't exhibit its global behavior until you get out to around the interval [-50000, 50000]. Justify your answer with two plots: one with  f[x] not yet showing its global behavior, the other with f[x] finally showing its global behavior.

Rational functions

A rational function is just a quotient of two polynomials. The interesting behavior patterns of rational functions depend on two things:  the degrees of the two polynomials, and the zeros of the two polynomials.

The global behavior of a rational function just depends on the degrees of the two polynomials (and the leading coefficients).

A rational function and its global twin

Here is a rational function:

Clear[f]f[x_] := ((3 (x^2) (((x - 4))^2))/((x^3) - 8))f[x]

Take a look at this sequence of plots. The plots show the graphs of  y = f[x]  and  y = 3x together, on wider and wider intevals.

MultiPlot[f[x], 3 x, -5, 5];

MultiPlot[f[x], 3 x, -25, 25];

MultiPlot[f[x], 3 x, -100, 100];

MultiPlot[f[x], 3 x, -500, 500];

Explain what's happening as we look on wider and wider intervals.
Answer:

The plots are getting more and more alike. It looks like f[x] and 3x are global twins. Remember what f[x] is:

f[x]

Why do you think that  3x  turns out to be the global twin of  f[x]?

Answer:

The numerator of f[x], multiplied out, is:

Expand[Numerator[f[x]]]

The highest-power term of the numerator is 3  (x^4). In the denominator, the highest-power term is (x^3). These are the global twins of the top and the bottom, respectively. So the global behavior of f[x] itself is to act like ((3  (x^4))/(x^3))  =  3x.

Another rational function and its global twin

Here is another rational function:

Clear[g]g[x_] := 
      ((11 x ((x^4) + x + 1))/(3 (x - 6) ((x^2) + 36)))g[x]

Take a look at this sequence of plots. The plots show the graphs of  y = g[x]  and  y (( = 11  (x^2))/3) together,  on wider and wider intevals.

MultiPlot[g[x], ((11 (x^2))/3), -5, 5];

MultiPlot[g[x], ((11 (x^2))/3), -10, 10];

MultiPlot[g[x], ((11 (x^2))/3), -100, 100];

MultiPlot[g[x], ((11 (x^2))/3), -500, 500];

Explain what's happening as we look on wider and wider intervals.
Answer:

The plots are getting more and more alike. (Some students like to say that the two functions are starting to cohabit.) It looks like g[x] and ((11  (x^2))/3) are global twins. Remember what g[x] is:

g[x]

Why do you think that  ((11  (x^2))/3)  turns out to be a global twin of  g[x]?

Answer:

The numerator of g[x], multiplied out, is:

Expand[Numerator[g[x]]]

The highest-power term of the numerator is 11  (x^5).

The denominator of g[x], multiplied out, is:

Expand[Denominator[g[x]]]

In the denominator, the highest-power term is 3  (x^3). These are the global twins of the top and the bottom, respectively. So the global behavior of g[x] itself is to act like ((11  (x^5))/(3  (x^3))) = ((11  (x^2))/3) .

A rational function with a constant for its global twin

Here is yet another rational function:

Clear[h]h[x_] := ((12 (x^2) - 96)/(3 (x^2) + 5))h[x]

Take a look at this sequence of plots. The plots show the graphs of  y = h[x]  and  y = 4 together, on wider and wider intevals.

MultiPlot[h[x], 4, -5, 5];

MultiPlot[h[x], 4, -50, 50];

MultiPlot[h[x], 4, -500, 500];

Notice that the horizontal line now isn't the x-axis, but rather it's the line y = 4. Notice the scale on the vertical axis, and compare it with the vertical scale in the previous plot.

MultiPlot[h[x], 4, -1000, 1000];

It seems that we can't get y = h[x] (red) and y = 4 (green) to agree right around x =0. Does that mean the two functions are not global twins ?

Answer

Remember global behavior is behavior with large x values. So that the two functions disagree in the center of the picture is of no concern. The strange dip around x = 0 isn't going away. But that dip is part of the function's local behavior. Also look at the scale on the y-axis ! It is extremly small. Below is a plot where we forced Mathematica to have a range of [0,5] on the y-axis.

\(\(Plot[{h[x], 4}, {x, \(-1000\), 1000}, 
		PlotRange\  -> {0, 5}, 

      	PlotStyle -> {Red, Green}]; \)\)

Now we can see that the functions agree extremely well once we move away from the y-axis.

Explain what's happening as we look on wider and wider intervals.

Answer:

The plots are getting more and more alike. (Some students like to say that the two functions are starting to cohabit.) It looks like h[x] and  4  are global twins. Remember what h[x] is:

h[x]

Why do you think that  4  turns out to be the global twin of  h[x]?

Answer:

The highest-power term in the numerator is 12  (x^2), and the highest-power term in the denominator is 3  (x^2). These are the simplest global twins of the top and the bottom, respectively. So the global behavior of h[x] itself is to act like ((12  (x^2))/(3  (x^2)))= 4.

Homework: Rational functions

For each function, identify its global behavior. Find a relatively small interval on which it shows its global behavior. Justify your answer with a plot showing the function and its simplest global twin on the same set of axes.

1. f[x] = \(TraditionalForm
      \`\(8  x\^7 - 7  x\^6 + 6  x\^5 - 5  x\^4\)\/\(4  x\^4 + 3  x\^2 - 
          2  x + 1\)\)

2. g[x] = \(TraditionalForm
      \`\(4  x\^4 + 3  x\^2 - 2  x + 1\)\/\(8  x\^7 - 7  x\^6 + 6  x\^5 - 
          5  x\^4\)\)

3. h[x] = \(TraditionalForm
      \`\(30  x\^7 + 400  x\^6 + 7654321  x\^5 + 10\^10\)\/\(6  x\^7 + x\^4 + 
          10\)\)

4. Make your own choice of a rational function having degree 8 in the numerator and degree 6 in the denominator. Identify its global behavior. Find a relatively small interval on which it shows its global behavior. Justify your answer with a plot showing the function and its simplest global twin on the same set of axes.

5. Make your own choice of a rational function having degree 4 in the numerator and degree 6 in the denominator. Identify its global behavior. Find a relatively small interval on which it shows its global behavior. Justify your answer with a plot showing the function and its simplest global twin on the same set of axes.

6. Make your own choice of a rational function having the same degree in the numerator as in the denominator. Identify its global behavior. Find a relatively small interval on which it shows its global behavior. Justify your answer with a plot showing the function and its simplest global twin on the same set of axes.

7. Make up a rational function f[x] that doesn't exhibit its global behavior until you get out to around the interval [-50000, 50000].  Justify your answer with two plots: one with  f[x] not yet showing its global behavior, the other with f[x] finally showing its global behavior.

8. Give an example of a rational function having degree 5 in the numerator, and having 4  (x^3) as its global twin. Come up with a plot showing your function and y = 4  (x^3)cohabiting.

9. Give an example of a rational function having degree 5 in the denominator, and having 4  (x^3) as its global twin. Come up with a plot showing your function and y = 4  (x^3)cohabiting.

10. Suppose that a rational function has a constant for its global twin. What does that tell you about the degrees of the numerator and denominator of the rational function?

11. (extended discussion question) Consider f[x] = (1/(x^4)) and g[x] = (1/(x^6)). Both of these functions have outputs that get close to 0 as the inputs get very large.  Is the constant function 0 a global twin for both f and g? For either f or g? Discuss, and support your discussion with plots.

Exponential Growth
	versus
Polynomial Growth

Language

A power function has the form  (output) = (((input))^((constant))),
 such as f[x] = (x^2), g[x] = (x^5).

An exponential function has the form  (output) = (((constant))^((input))), 
such as  h[x] = (3^x), k[x] = (((1.05))^x).

Percentage growth for exponential functions and for power functions

The percentage rate of growth of a function  f,  when the input goes up by 1 unit, is just ((change  in output)/(current output)), expressed as a percent. So, it is given by:

percentgrowth = 100 \(TraditionalForm
      \`\(\((current\ output)\) –\ \((old\ output)\)\)\/\(current  
          output\)\)

Percentage growth for exponential functions

Example 1:  Find the percentage growth for  f[x] = (1.05^x) .

Clear[a, f, x, percentgrowth]\(a\  = \ 1.05; 
f[x_] := a\^x\)percentgrowth[x_] := 100 (( f[x + 1] - f[x])/f)[x]Simplify[percentgrowth[x]]

This says that when x increases by the number 1, f[x] increases by 5%. That's 5%, period — regardless of whether the input x is big or small.

Example 2:  Find the percentage growth for  f[x] = (3^x) .

Clear[a, f, x, percentgrowth]\(a\  = \ 3; 
f[x_] := a\^x\)percentgrowth[x_] := 100 (( f[x + 1] - f[x])/f)[x]Simplify[percentgrowth[x]]

This says that when x increases by one, f[x] increases by 200%. That's 200%, period — regardless of whether the input x is big or small.
In plain English: Every time x increases by 1, f[x] adds twice its previous size to its previous size. That is, f[x] triples in size.

RERUN: Try this again with different values of a.

Summary: Percentage growth for all exponential functions

When the input goes up by  1  unit, here is the percentage growth for any exponential function:

Clear[a, b, f, x, percentgrowth]f[x_] :=  b (a^x)percentgrowth[x_] := 100 (( f[x + 1] - f[x])/f)[x]Simplify[percentgrowth[x]]

The biggest thing to notice about this is:  The percentage growth rate is a constant; it doesn't depend on what the input  x  is (and it doesn't depend on what that constant coefficient b is). Large input or small input, the percentage growth rate is the same.

BOTTOM LINE: With exponential functions, the percentage growth is constant.

Percentage growth for power functions

Example 1. Find the percentage growth for  f[x] = (x^2.)

Clear[n, f, x, percentgrowth]\(n = 2; 
f[x_] := x\^n\)percentgrowth[x_] := 100 (( f[x + 1] - f[x])/f)[x]Simplify[percentgrowth[x]]

A little messy. Let's break this apart:

Apart[percentgrowth[x]]

Still messy, but at least we can see that he percentage growth isn't constant:  it depends on what the input  x  is. In fact, as the input  x  gets bigger, the percentage growth gets smaller. Compare the percentage growth for  x = 10, 100, 1000:

percentgrowth[{10. , 100. , 1000. }]

The outputs for the power function get larger as the input gets larger. But the percentage growth slows down. In fact, the percentage growth shrinks toward zero.

Example 2. Find the percentage growth for  f[x] = (x^5.)

Clear[n, f, x, percentgrowth]n = 5; f[x_] := (x^n)percentgrowth[x_] := 100 (( f[x + 1] - f[x])/f)[x]Simplify[percentgrowth[x]]

Pretty messy. Let's break this apart:

Apart[percentgrowth[x]]

Still messy, but at least we can see that he percentage growth isn't constant:  it depends on what the input  x  is. In fact, as the input  x  gets bigger, the percentage growth gets smaller. Compare the percentage growth for  x = 10, 100, 1000:

percentgrowth/@{10. , 100. , 1000. }

The outputs for the power function get larger as the input gets larger. But the percentage growth slows down. In fact, the percentage growth shrinks toward zero.

RERUN: Try this again with a different power of n. Is there any choice you can make for the power that will make the percentage growth constant?

Summary: Percentage growth for polynomial functions in general

When the input goes up by  1  unit, here is the percentage growth for any power function:

Clear[n, b, f, x, percentgrowth]f[x_] :=  b (x^n)percentgrowth[x_] := 100 (( f[x + 1] - f[x])/f)[x]Simplify[percentgrowth[x]]

Pretty messy. The biggest thing to notice about this is:  The percentage growth rate is not a constant; it does appear to depend on what the input  x  is  (even though it doesn't depend on what that constant coefficient b is).Large inputs have a different percentage growth rate from small inputs.

Further details.

We can't multiply out that percentage growth, without knowing what the number  n  is. However, we can do some reasoning about it.

First,  (x^(-n)) is the same thing as (1/(x^n)). That allows us to rewrite the percentage growth rate as  100 (-1 + ((((1 + x))^n)/(x^n))), which is the same as  100 (-1 + ((((1/x) + 1))^n)). We've seen this kind of expansion before, and the binomial theorem reveals the secret to us.

((((1/x) + 1))^n), or equivalently  (((1 + (1/x)))^n), starts out with  1 + (n/x)+ ..., and continues with other terms, every one of which has a higher power of x in the denominator. So what? 
(-1 + ((((1 + x))^n)/(x^n))) starts out with (n/x) +.....
So after the  -1 in the percentage growth rate wipes out the leading 1 in the expansion, we're left with terms that will all get small, as x gets big.

BOTTOM LINE: With power functions, the percentage growth slows down as the input gets bigger.

Exponential growth versus polynomial growth

Note: We usually are concerned with functions that are growing, and our interest will be in behavior for large positive input values.

Global behavior:  exponential functions versus power functions

Percentage growth for exponential functions stays constant. Percentage growth for power functions goes down toward zero as the input  x  goes up. What does that say about global behavior?

It says that a growing exponential function should overtake a growing power function, given enough time (that is, given a large enough input).

Exponential battles polynomial:  (2^x) versus (x^2)

Here is a plot for these two functions on a garden-variety interval:

Clear[f, g]f[x_] := (2^x)g[x_] := (x^2)MultiPlot[f[x], g[x], 0, 5];

The two graphs sort of play tag for a while, with first one then the other one having larger outputs. Here they are on a slightly larger interval:

MultiPlot[f[x], g[x], 0, 10];

There goes  f[x] = (2^x), leaving  g[x] = (x^2) in the dust.

How do we know  g[x] might not catch up again?  Here are their percentage growth rates:

gpercentgrowth[x_] := 100 ((g[x + 1] - g[x])/g)[x]gpercentgrowth[10]

This says  g[x]  is only going up at a  21%  rate when  x  goes up 1 unit. On the other hand, here's the percentage growth rate for f[x]:

fpercentgrowth[x_] := 100 (( f[x + 1] - f[x])/f)[x]fpercentgrowth[10]

Every time the input  x  goes up by  1  unit, the output doubles.

So? So f[x] is already bigger than g[x] when  x = 10, and on top of that, f[x] is growing faster than  g[x]  is. There is no way that  g[x]  can catch up, right?
Right, provided the percentage growth rate for  g[x]  can't increase. But it can't. Here's the percentage growth rate for  g[x]  in general:

Expand[gpercentgrowth[x]]

As  x  gets bigger, we'll be dividing by bigger numbers, so the overall percentage growth rate will just keep on getting smaller.

Exponential battles big polynomial:  (2^x) versus (x^12) + 3 (x^4) - 3 x

Here is a plot for these two functions on a small garden-variety interval:

Clear[f, g, x]; f[x_] := (x^12) + 3 (x^4) - 3 x; \(g[x_] := 2\^x; 
MultiPlot[f[x], g[x], 0, 1.5]; \)

This shows the polynomial (red) racing ahead of the exponential (green) at about x = 1.  Let the race proceed:

MultiPlot[f[x], g[x], 0, 1.8];

This shows the polynomial (red) continuing its lead ahead of the exponential (green). Look a little farther ahead:

MultiPlot[f[x], g[x], 0, 5];

Now the lead of the polynomial (red) is so large that the exponential (green) looks totally squashed. But life goes on:

MultiPlot[f[x], g[x], 0, 48];

Now the lead of the polynomial (red) is still large but the exponential (green) looks like it is starting to do something.

MultiPlot[f[x], g[x], 0, 100];

Here the exponential (green) is making its move:  it is passing the polynomial (red) and racing ahead.

MultiPlot[f[x], g[x], 0, 120];

Now the lead of the exponential (green) is so large that the  polynomial (red) looks totally squashed.
How do we know that the polynomial isn't going to make a comeback and take the lead again?
Look at the percentage growth rates.

gpercentgrowth[x_] := 100 ((g[x + 1] - g[x])/g)[x]gpercentgrowth[{10, 50, 100, 120}]

For the exponential function g[x] = (2^x) the  percentage growth rate stays constant at 100%.

fpercentgrowth[x_] := 100 ((f[x + 1] - f[x])/f)[x]N[fpercentgrowth[{10, 50, 100, 120}]]

For the polynomial function y = (x^12) + 3 (x^4) - 3 x the percentage growth rate is going down as x increases.

So? So the exponential function g[x] is already bigger than the polynomial f[x] when  x = 120, and on top of that, g[x] is growing faster than  f[x]  is. There is no way that  f[x]  can catch up, right?

Right, provided the percentage growth rate for  f[x]  can't increase. But it can't. The percentage growth rate for power functions goes down as the input goes up.

BOTTOM LINE: An exponential function will outgrow any power function when the input  x   is large enough.

Two exponential functions slug it out

Here is a plot for these two exponential-type functions on a garden-variety interval:

Clear[f, g]f[x_] := 50 (((1.07))^x)g[x_] := 3 (((1.13))^x)MultiPlot[f[x], g[x], 0, 10];

That's f[x] in red, starting out much larger than g[x]. Will f[x] be able to hold onto the lead?

MultiPlot[f[x], g[x], 0, 50];

It looks like g[x] is making a move.

MultiPlot[f[x], g[x], 0, 100];

Yep -- g[x] definitely is leaving f[x] in the dust.

Could we have predicted this was going to happen?

Sure. Look at the percentage growth rates:

\(gpercentgrowth[x_] := 100\ \(g[x + 1] - g[x]\)\/g[x]
\)fpercentgrowth[x_] := 100 ((f[x + 1] - f[x])/f)[x]Simplify[{fpercentgrowth[x], gpercentgrowth[x]}]

f[x] has a 7% growth rate, but g[x] has a 13% growth rate. Since they both are positive and growing, eventually, g[x] is going to overtake f[x].

Exponential & polynomial mix: Global twins

Here is a function and its plot on a pretty big interval:

Clear[g, x]g[x_] := 35  (x^4) + 75  (x^3) - 11  x + 40 + (1.3^x)MultiPlot[g[x], 0, 50];

Is this function showing its global behavior on this interval? Check to be sure. (What is its simplest global twin? What does its simplest global twin look like?) How does the ratio g[x]/(global twin) look? How does the percentage growth look for values of x far away from 0?

Solution

Let's check out this function:

g[x]

This has a combination of a polynomial (40 - 11 x + 75 (x^3) + 35 (x^4))and an exponential function (((1.30000000000000004`)^x)). A growing exponential function will always overtake a growing power function, given enough time (that is, given a large enough input). That suggests that the global behavior of this function should be to look like y = (1.3^x). Plot them together:

MultiPlot[g[x], (1.3^x), 0, 50];

Not even close. But perhaps we aren't far enough out yet. Here is a plot on a larger interval:

MultiPlot[g[x], (1.3^x), 0, 100];

Starting to cohabit. We sholdn't have to go out much farther to see them merge. Here's a slightly larger plot:

MultiPlot[g[x], (1.3^x), 0, 120];

What happens to the ratio of g[x]/(1.3^x) ? Let's see:

\(TableForm[
	Table[N[{x, g[x]\/1.3\^x}], {x, 0, 120, 10}], 
      TableHeadings -> {None, {" x", " quotient"}}]\)

We can see the quotient settling down to the number 1, for values of x far away from zero. Is there any chance that things would stray? Here's the percentage growth:

gpercentgrowth[x_] := 100 ((g[x + 1] - g[x])/g)[x]Table[gpercentgrowth[x], {x, 0, 120, 10. }] // TableForm

More evidence. The percentage growth seems to be settling down to around 30%. And 30% is exactly the percentage growth for the function y = (1.3^x) by itself.

Homework:  Exponential functions and polynomials

1. Percentage growth:  (1.5^x) versus  8  (x^6)  +  10  (x^5)

Here are two functions:

Clear[f, g, x]f[x_] := (1.5^x)g[x_] := 8  (x^6) + 10  (x^5)f[x]g[x]

Find the percentage growth rates for these two functions. What happens to those percentage growth rates as the input x gets large (in the positive direction)? Can you come up with an input value x that will make  g[x]'s percentage growth rate less than 0.3?

2. Global behavior:  (1.02^x) versus  (x^1.02)

Here is a function and its plot on a pretty big interval:

Clear[f, g]f[x_] := (1.02^x)g[x_] := (x^1.02)MultiPlot[f[x], g[x], 0, 50];

That's g[x] = (x^1.02) in the green.

The number 1.02 isn't too far away from the number 1. So maybe g[x] = (x^1.02) isn't too far away from (x^1), which is just x, and f[x] = (1.02^(x ))isn't too far away from (1^x), which is just the number 1. If that's how it works, then g[x] should be dominating f[x]. It looks that way so far.

Is this pattern going to continue? Are the functions f and g showing their global behavior? Will g[x] = (x^1.02) continue to dominate f[x] = (1.02^x) for larger values of x? (Hint: think about the percentage growth rates, and plot on a larger interval.)

3. Global behavior: 100 (((1.7))^x) versus (1.8^x)

Here are two functions, along with their plot on the interval [0, 2].

Clear[f, g, x]f[x_] := 100 (((1.7))^x)g[x_] := (1.8^x)f[x]g[x]MultiPlot[f[x], g[x], 0, 2];

That's f[x] = 100 (((1.7))^x) in the red, lording it over little g[x]. Will this state of affairs continue as the input value x continues to move to the right? (What are the percentage growth rates for these two functions? What does that tell you has to happen eventually, as the input x increases? Find a reasonably small interval where g[x] starts to overtake f[x].)

4. The famous number  e.

Recall the number e (the base of the natural logarithms), named after Leonhard Euler. It is one of the most famous and important numbers in all of mathematics.

Here are two functions:

Clear[f, g, x]f[x_] := (2^x)g[x_] := (E^x)

Find the percentage growth rates for these two functions. What happens to those percentage growth rates as the input x gets large (in the positive direction)?

5. Fighting fraction: \(TraditionalForm
      \`\(3 \((2\^x)\) + \ 200  x\^7\)\/\(100  x\^7 + 2\^x\)\)

Here is a function:

Clear[f, x]f[x_] := ((3 ((2^x)) + 200  (x^7))/(100  (x^7) + (2^x)))

What is the global behavior of this function? Are the (x^7) terms going to have the final say, and make the global behavior be to act like the constant function y = 2? Or are the (2^x) terms going to have more influence, and make the global behavior be to act like the constant function y = 3? Or will something else happen?

6. Delaying tactics

Here is that famous function f[x] = (e^x) along with a rather puny polynomial, along with their graphs on a small interval.

Clear[f, g, x]f[x_] := (E^x)g[x_] := (x^2)f[x]\(g[x]
\)MultiPlot[f[x], g[x], 0, 5];

That's f[x] = (e^x) in red, easily outstripping the hapless g[x] = (x^2). Your job is to come up with a more powerful choice of a polynomial for g[x]; get one that will be able to stay ahead of f[x] at least until x gets up to around 2000. Confirm the power of your polynomial with a plot.

Do you have any hope of coming up with a polynomial that will stay ahead of f[x] forever? Why or why not? (Find the percentage growth rates of your powerful polynomial, and compare it with the percentage growth rate for f[x]. What is going to happen for larger and larger input values of x? What is going to happen no matter what polynomial you come up with?)

7. (extended discussion question) The family ((x^n)/(e^x)).

Consider the family of functions given by f[x] = ((x^n)/(e^x)), for nonnegative values of n. Here are the plots of a couple of these functions:

MultiPlot[(x/(E^x)), ((x^3)/(E^x)), 0, 8];

These start off pretty big, reach a peak, then taper off. Does this same thing happen with all members of this family? Why or why not? (Think in terms of percentage growth rates of the top and the bottom of the fraction.) Plot a few more members of this family, to illustrate your conclusion. The peak occurs at a different input value for each member of the family. Try to identify what that input value is.

(This family of functions plays a central role in the gamma function, which shows up in probability theory and many other places.)

Initialization cells

Off[General::"spell1"]; Off[Plot::"plnr"]; Needs["Graphics`Colors`"];

\(Clear[expr, MultiPlot]; 

    MultiPlot[expr__, left_, right_]\  := \ 
	
      Plot[{expr}, {x, left, right}, 
		
        PlotStyle -> 

          			{{Red, Thickness[ .0075]}, {Green, Thickness[ .0075]}, 

            				{Blue, Thickness[ .0075]}, {Magenta, Thickness[ .0075]}, 
            
				{Orange, Thickness[ .0075]}, {Black, 
              Thickness[ .0075]}, 

            				{Yellow, Thickness[ .0075]}, {Violet, Thickness[ .0075]}, 
            
				{Brown, \ Thickness[ .0075]}}]; \)

\(Clear[compare]; 

    compare[x_] := {{" x", "   f[x]", \*"" 2\!\(x\^3\)"", 
            \*"" difference\n  f[x]-2\!\(x\^3\)"", 
            \*""quotient\n  \!\(f[x]\/\(2  x\^3\)\)""}, 
          N[{x, f[x], 2\ x\^3, f[x] - 2\ x\^3, f[x]\/\(2\ x\^3\)}]} // 
        TableForm\)

External references

The notebook Polynomial Growth is part of an electronic text entitled
"Algebra, Trigonometry and Mathematica" which exists in its entirety using an older version of Mathematica.  (version 2.2)
Currently we are in the process of upgrading  this set of notebooks to version 3.0. of Mathematica.
In the new version the blue underlinded words in the above notebook would by working hyperlinks to other parts of the book.

If you have any suggestions please contact us:
Barry Brunson at bbrunson@wku.edu
Claus Ernst at ernst@wku.edu

This would link to an earlier discussion of the expansion of (((1 + t))^n).

This would link to an earlier discussion of the base of the natual logarithms.

This would link to information about Leonhard Euler.

This would link to an earlier discussion of parametric families of functions.

This would link to a reference for the gamma function.

This would link to a discussion of Newton's binomial theorem.