Barry Scott Davies, Captain USAF, Regular Air Force, Veteran

M.S. Engineering Physics, USAF Institute of Technology [in residence], December, 1982

**Hypothesis**: The fundamental mathematical model for our economies should not contain an exponential divergence.

**Abstract:** The mathematical properties of rolled over growth, (1+p/100)^n, are examined by tabulating the growth so that each row corresponds to one compounding, and each column entry contains growth from one compounding on elements from the previous column in previous compoundings. The growth is then partitioned into three groups: "Column1", "Column2", and "All Other Columns". The former two are subtracted from the latter and this difference is ploted as a function of time where the unit of time is the compounding period. The zeros, local minima, and inflection points in these plots seem to be points of interest for avoiding the exponential divergence which all rolled over growth ultimately produces. In particlar, the inflection points seem to occur very uniformly near the first doubling for growth rates from 1% up to 40%, (27 Feb 2012: 100%), (28 Feb 2012: 200%). If you are one who is short of time, then please have an intuitive look at the

and then click here to go directly to the result and do not click on any other links before you reach the RED TEXT.

**Conclusion:** Therefore, the first doubling seems to be a very safe and optimal point at which to reverse the expansion. I imagine that there could be millions or billions of different economic elements - perhaps even one for each person on the planet plus many more for other entities - oscillating with different growth rates and compounding periods. Consequently, a steady state might result - without the pain of recession and compatible with life on earth.

Grow 100 at 1% per year

**Introduction:** This page presents the original calculation in full. I have tried to make the presentation as readable as possible without altering the calculation - which would decrease the reliability of the results.

The blocks of information that are called cells in my version of *Mathematica* often show both input and output, with blue text as label, and the cell's sequence number appears in square brackets. Although the input and output are each a cell, I refer to them together as a unit. I do this even when the input contains several statements - each ending in a semi-colon - which makes the sequence number of the output different from the sequence number of the input. Initializations are placed at the bottom of the page because they generally interfere with the presentation. Please, if you did not click on the "Initializations" link, do so now and scroll on to see the message in red. Note, in the next cell, the initialized value of the symbol **nYears**:

**nYears = 8**. But this is a text cell, and the actual assignment of the value was made in the initialization section at the bottom of the page. The **handDrawnChartReplica** is described below the next cell.

As described in the abstract, the growth is tabulated so that each row corresponds to one compounding, and each column entry contains growth from one compounding on elements from the previous column in previous years. The very small numbers in the last few columns seem utterly negligible, but we will see that the exponential divergence occurs beyond the second column. Furthermore, I would like to point out that, if we use a powerful financial calculator to do future time value of money calculations, the calculator uses a formula which is mathematically equivalent to the process which the table illustrates. The calculator gives a very accurate approximation to the exact result which the chart represents. The powers of ten are only to be multiplied by the chart elements which are below the row in which the powers of ten appear. For clarity, the original small numbers are retained in the rows which are above the row in which the powers of ten appear.

At this point, readers short on time may wish to skip ahead to the "Results 1 - Inflection Points" section below. Scroll down quickly to see the plots in passing or click here.

With **bT** standing for binomial table in the next cell, the symbol **bT[nYears]** is defined at the beginning of the initialization section.

From previous experience and the expression (1+p/100)^n, I recognized the binomial coefficients in my hand drawn chart. In the pyramid of numbers, the first two columns of the hand drawn chart become the left hand diagonal line of 1's and the left hand diagonal line of consecutive integers. The column numbers are in the right diagonal line of consecutive integers, but these numbers correspond to the columns in such a way that the right diagonal sequence stops at one less than the number of columns in the **handDrawnChartReplica**. The powers of ten have been completely removed from the pyramid but they are essential in the hand drawn chart. And, for clarity, it is essential that the powers of ten appear in the middle row of the hand drawn chart.

Also please note that what is considered here is the growth of 100 as a pure number and not as a currency amount or as any other particular quantity that may grow in a rolled over way - rolled over meaning of course that the growth from any compounding becomes part of the starting amount for the next compounding. And the compounding period need not be a year, but can be any interval. Also, in the plots that appear below, **p** and **n** will be considered to be continuous variables.

In the next cell, the modules **sum1Row** and **sum1RowAfterCol2**, which were defined in the initialization section, compute the indicated amounts and the first few numbers in each list can be verified by inspection of the hand drawn chart replica, which is reproduced after the next cell. The module **sum1RowAfterCol2** returns zero if the row has less than three elements. See the note in the initialization section at cell tag "sum1RowAfterCol2".

cell tag: growth each year and after column 2

cell tag: avoid the easy to make mistake

Note well that the third element of the first line of the matrix immediately above is the sum of the third row of the hand drawn chart replica, while the third element of the second line is the last element in the third row of the chart. The first two elements in the first line are the sums respectively of the first and second rows of the chart, and these numbers do not pertain to the third row of the chart. So we should avoid the easy to make mistake of thinking that the third element in the second line is related to the first two elements in the first line. I find this mistake very easy to make anytime I have not looked at this work for a while!

The next cell checks the result from the list above (cell tagged "growth each year and after column 2") obtained with the module **sum1row** by comparing it to the result obtained from the general formula for the final amount. Please note again that what is considered here is the rolled over growth of 100 as a pure number. Consequently, I use the terms x0, growth, and final amount instead of initial deposit, interest, and final balance. As noted at the beginning of the initialization section, symbols such as **x0Is[100]** and **percent[1]** are just labelled representations of the initial amount and growth rate values 100 and 1% respectively. *Mathematica*'s built in function symbol **Tr** is short for trace, and it computes here the sum of a simple one dimensional list of numbers.

Also checked here is the result obtained from the initialization section defined module, **getFinalAmountFromBT**, where BT stands for the binomial table and where the module **sum1Row** is used. We can easily check that the number obtained is the same as shown in the previous cell.

Now, as another check, the results for 20 compoundings are computed.

And provision has been made to vary the growth rate, because it will be desired to look at growth rates higher than 1%. However, unless a module has **x0** as an explicit argument, the initial amount is assumed to be 100.

It should be noted again (see the cell tag "avoid the easy to make mistake" above) that the growth after column two presented immediately above can't be readily deduced from the preceding line which shows output from the symbol **growthForEachYear**, which is defined right here and is not a module. The first two elements of the first list are for the first and second rows respectively, and the first two elements of the third row are not shown.

The first line above is reproduced in the next cell and checked against the general expression for the growth table. The growth table was derived in earlier work and is here saved in the symbol **growthTable[8]** - using the function **growthTableForYearN**, which is defined in the initialization section. Note that output is generally suppressed by the semicolon at the end of each line, unless the line is a **Print** statement as in the second and third lines below - where **growthTable[8][[3,3]]** extracts the third element of the third row, and **growthForEachYear[nYears,percent[2]]** was calculated in the previous cell. Also: The "slash period" **/.** is *Mathematica*'s replacement operator with variables and values connected by the arrows in the list which follows the replacement operator. It will be shown below that the first nonzero term in the second line of the previous cell is equal to the last term in the third row of **growthTable[8]**.

The general expression for the last term of the third row above is printed in the previous cell in the line before the growth number list. In the general expression it was necessary to replace instances of the number **100** by **c** and **y** so that the binomial coefficients remain evident. Note that **y** occurs in every term whereas **c** does not occur in the first column which is the left edge of the pyramid. If, **x0** and **y** are both equal to **100** as in the present problem, then they would cancel leaving only **p**'s in the first column of the general chart. In this first column, the power of ten in the "factor" is zero, which explains why **c** does not appear in the general table in the first column.

To get a general expression for the growth after column two, it is necessary to set to zero the first two diagonal lines at the left side of the pyramid of numbers. This is done below with a pitfall noted.

The pitfall is shown in the output of the cell immediately above: It is the fact that the element **{1,1}** of **tempGT**, i.e. **tempGT[[1,1]]**, is not the same as the elements **{i,1}** when **i** is greater than one. But it does not matter in what follows because these elements are replaced by zero in the next cell. Note that **ReplacePart** is a built in *Mathematica* function, and **tempGT=ReplacePart[tempGT,0,{i,1}]** sets **tempGT** equal to what we get if we replace the element at position **{i,1}** by **0**.

However, now the pitfall is that an error message will result if we try to do the replacements starting at the first element of **tempGT** with the assumption that the first element is at position **{1,1}**. But, since the first element is already zero, we just do the replacements starting from the second element - which is why the iteration list in the **Do** structure is **{i,2,8}**.

Note finally that sums and lists behave the same when we reference their parts. Below is shown the fourth row of the output immediately above. The whole row is at position **{4}**, while the two terms in the sum are at positions **{4,1}** and **{4,2}** respectively. The built in **Extract** function uses the list form of the position, while the curly braces are omitted in direct references with the double square brackets.

Now the specific and general expressions yield the same results as shown next.

The modules shown below calculate the sum of the first two columns of the growth table where **x0** is assumed to be **100**, but where the growth rate is variable. Looking at **growthTable[8]**, we see that the first column is just **p** times the number of years, whereas the second column is given by the following cell:

Since the calculation is exact, it is not necessary to show the numbers since their difference is exactly zero.

Many Compoundings

Below, the calculation is performed for **100,000** compoundings, and this makes it clear that a divergence occurs beyond the 2nd column.

It is shown in the appendices _1_ and _2_ just before the initialization section, that it is not feasible for large numbers of compoundings to compute the growth using the binomial table. Therefore, I calculate below the sum of all columns beyond the second by subtracting the first two column sums from the general formula minus the initail amount.

Next, results are presented for higher growth rates. It seems clear that there is what might be called an explosion in the "AllOtherColumns" column. I am tempted to call it a detonation when the number of compoundings is such that "AllOtherColumns" and the first two are equal.

Plots and Tables

The purpose of the next module is to look more closely at various growth rates to see the number of compoundings required for "AllOtherColumns" to catch up to the sum of the first two columns.

cell tag: 3functionDescriptions

The function **fn** below is **( (the sum of all columns beyond the second)** minus

)/x0

where

If you got here by clicking on the "3functionDescriptions" link, then now is the time to click on the back button.

We can visually inspect the tables below to see where the "AllOtherColumns" column catches up to the sum of the first two columns. Since the point at whith **AllOtherColumns** exceed the sum of the first two seems to be the onset of what I call the explosion, I refer to this event in the output below as the detonation: True means the event has occured, and False means that it has not occured.

There seems to be nothing in any of the above material which prevents us from changing the compounding period from years to months. If the following module is interpreted in this way, then the horizontal unit in the plot is a month rather than a year. And ...

... therefore we have a curve with a local minimum at about six months - half a year. If we have a reformed economic element functioning like a pair of healthy lungs, then this half-year point might be the time at which "inhalation" stops and a half-year period of "exhalation" would begin, and it would be of such a nature that, at the end of the year, the economic element would be in the same state that it was in at the beginning of the year. Perhaps it would be six months of work followed by six months of relaxation.

First Doubling

A function which returns the number of compoundings to the first doubling is defined at the cell tag "firstDoublingInitialized" near the end of the initialization section. The derivation is shown in the next cell. **Exp** is the exponential function, and **Log** is the natural logarithm function.

Please Note: If you got here after scrolling after clicking on the "first doubling" link, then now is the time to click on the back button.

Zeros

To begin, we are unable analytically to solve for the number of compoundings at which the zeros occur for the function **fn**. In what follows, **Log** is the natural logarithm function.

Local Minima

Below is the calculation for the zeros of the first derivative. An analytical expression was obtained for the zeros of the first derivative, but the solution we need was not found.

Inflection Points

Below is the calculation for the zeros of the second derivative. As we go to higher derivatives the polynomial part of the function falls away and the resulting functions are easier to differentiate.

Below are the zeros we need, and they were found manually in another notebook. The successful function calls were pasted into this notebook. See the definitions near the end of the initialization section. The column headings z0, z1, z2 respectively stand for **zero0[p]**, **zero1[p]**, **zero2[p]**, where **p** is the growth rate in percentage points, are the "number of compoundings" to the zeros respectively of the functions **fn**, **dfn**, **ddfn**.

Results 1 - Inflection Points

It seems remarkable to me that the first doubling, d1, and the inflection point, z2, occur so close to one another uniformly as shown in the last column of the table, **MatrixForm[presData]**, immediately below. It seems that, for growth rates from 1% to 200%, the inflection point occurs just over one compounding beyond the first doubling. Therefore, the first doubling seems to be a very safe and optimal point at which to reverse the expansion in a healthy lung analogy. We would reverse the expansion even before the curve changes concavity! Again, the headings z2, z1, z0 stand for the number of compoundings required to reach the zeros respectively of the functions **ddfn**, **dfn**, **fn** (see the descriptions above at the cell tag "3functionDescriptions and see the definitions below at the cell tag 3functionDefinitions").

Please Note (RED TEXT): If you got here after scrolling after clicking on the link in the abstract, then this is the place to stop reading and click the back button.

And, furthurmore, z2, keeps us near the point at which the exponential function is equal to the number **E**. See the **firstDoubleTextString** above and see the definition of the list **argsE** below. The **example** shows the exponential expression for the growth factor, **x/x0**, with the argument of the exponential function. See the first three numbers in the first row of the table. The table above, combined with the one below, make me think that the inflection points should be used to define the point at which expansion reverses.

Results 2 - Two Column Truncation

It seems that truncating the growth to the first two columns radically increases sustainability, as shown by the numbers below for the ultra long times.

Results 3 - Equivalent Untruncated Rates

Here are the calculations for the equivalent untruncated growth rates for 7% truncated to the first two columns for times from 100 to 100,000 years. The function **eqUTGR** is derived and defined in the initialization section.

And here is the calculation for the equivalent untruncated growth rates for 20% truncated over the decades from 10 to 100 years.

This last table makes me think that people with today's short term outlook would not even notice the truncation.

Appendix - Other Columns

The material below was not needed, but it is interesting and seems to provide a good check of the binomial table calculations presented above.

Column 3

In the **Module** below, the powers of **p** and **10** can be seen to be correct for column three in the general 'pyramid' for the growth chart which appears near the top of this page in the expression **growthTable[8]** and is reproduced just before the section on column four below. Looking at column three in the **handDrawnChartReplica**, we see below that the function **c[3,n]** gives the correct sums.

Column 4

Column 5

General Column: m

We can see from the patterns above that the general column is given by the recursive definition shown and tested immediately below.

The growth with recursion is defined and tested below.

The patterns above enabled me to guess and test the following:

The growth is calculated as the sum of the columns for the case of **1000** compoundings using the product function which was derived above.

The calculation immediately above took less than ten seconds on my Dell Vostro mini-laptop - which has two processors at 1.6GHz and 1GByte of RAM.

The number shown immediately above was obtained in the expression **tenTo100000** in the first part of this page above.

Appendix - Large Binomial Tables 1

The cells below lack the blue input and output number labels in these appendices on large binomial tables because the execution times were long. Therefore, once done, these cells were made not evaluatable.

Shown here: (1) The time required to read from the hard drive the binomial table in the case of **1000** compoundings. The file requires more than **74,000 KBytes** of storage memory. (2) The time required to calculate the growth from the binomial table. (3) Verification of the result. These results make it very clear that it is not feasible to use the binomial table for calculations involving very large numbers of compoundings.

Appendix - Large Binomial Tables 2

Here the calculation of the binomial table for the case of **1000** compoundings is divided into sections to show the times required. The next two cells were used as a guide to write the subsequent **Module**.

The triple equals sign tests that the objects on its two sides are identical. If they are, then **True** is returned; otherwise **False** is returned.

Initializations

Before beginning, annoying spelling warnings are turned off, and the following symbols are defined so that the calls to Modules will be more readable. These calls can seem quite cryptic when the arguments are just numbers. Also: The **Interrupt** above prevents the initialization cells from being evaluated twice. Note that, whereas computer programmers talk about running or executing programs, in my version of *Mathematica* the term evaluation is used.

Initialize: Grow 100 at 1% per year

Please Note: If you got here after scrolling after clicking on the "Initializations" link, then now is the time to click on the back button. But if you are reading from the beginning, please continue by scrolling down, and ignore text in red if you have not just clicked on a link.

The next two modules are **ONLY** for the case where the initial amount is 100. However, the growth rate **p** has been included because it will be desired to look at growth rates other than 1%.

cell tag: "sum1RowAfterCol2"

Note in module **sum1RowAfterCol2** that the **Do** structure stops executing if the iteration list, **{i,3,Length[row]}** is not of the form {*i*, *imin*, *imax*}, presumably with *imin* less than *imax* because the default index step is positive one. Consequently, if there are less then three elements in the row - as is the case in the first two rows, then the value of **sum** is not changed and zero is returned.

From earlier work, here is what seems to be the general expression for the growth table. To show the binomial numbers, it was necessary to replace certain instances of the number **100** with **y** and **c**. The initial amount is **x0**.

Initialize: Plots

cell tag: 3functionDefinitions

If you got here by clicking on the "3functionDefinitions" link, then now is the time to click on the back button.

Initialize: First Doubling

cell tag: firstDoublingInitialized

Scroll up a few clicks ONLY to see the definition of the symbol **iList**. I say "ONLY" because you should not want to read the definition of the symbol **firstDoubleTextString** because that should be read in the main body of the page. All the initializations have been included for completeness, but the "text string" initializations should not be read in the initialization section.

Please Note: If you got here after clicking on the "firstDoublingInitialized" link, then now is the time to click on the back button.

Initialize: Zeros, Local Minima, & Inflection Points

The zeros below were found using *Mathematica*'s **FindRoot** function, where the initial values were estimated from the plots. Once found, the values are tested to verify that they are good approximations to the required zeros.

Initialize: Results 1 - Inflection Points

Initialize: Results 2 - Two Column Truncation

Initialize: Results 3 - Equivalent Untruncated Rates

Initialize: Appendix - Other Columns

Converted by

Barry Scott Davies, Captain USAF, Regular Air Force, Separated

M.S. Engineering Physics, USAF Institute of Technology, December, 1982