# This worksheet contains the Maple commands from Chapter 6 of # Introduction to Scientific Programming by Joseph L. Zachary. -------------------------------------------------------------------------------- # # (6.1) Let's calculate the effect of 6% simple interest over a period of # three years. In the beginning we have a balance of $1000. # > year0 := 1000.; -------------------------------------------------------------------------------- # # (6.2) After a year passes we have 6% more than the previous year. # > year1 := year0 + year0 * .06; -------------------------------------------------------------------------------- # # (6.3) After another year passes we have 6% more than the previous year. # > year2 := year1 + year1 * .06; -------------------------------------------------------------------------------- # # (6.4) After a third year passes we have 6% more than the previous year. # > year3 := year2 + year2 * .06; -------------------------------------------------------------------------------- # # (6.5) Let's repeat (6.1) through (6.4) using symbols instead of numbers. # In the beginning we have a balance of $P. # > year0 := P; -------------------------------------------------------------------------------- # # (6.6) After a year passes we have a factor of R more than the previous # year. # > year1 := year0 + year0 * R; -------------------------------------------------------------------------------- # # (6.7) After another year passes we have a factor of R more than the # previous year. # > year2 := year1 + year1 * R; -------------------------------------------------------------------------------- # # (6.8) After a third year passes we have a factor of R more than the # previous year. # > year3 := year2 + year2 * R; -------------------------------------------------------------------------------- # # (6.9) Let's do some algebraic manipulations on the exprssion from (6.8) # to try and discover a pattern. We can "expand" it, which distributes # products over sums. # > expand(year3); -------------------------------------------------------------------------------- # # (6.10) We can also "factor" it. This looks promising. # > factor(year3); -------------------------------------------------------------------------------- # # (6.11) Let's follow this up by factoring "year2". This appears to confirm # the pattern. # > factor(year2); -------------------------------------------------------------------------------- # # (6.12) Let's factor the balance that would exist after four years. # > factor(year3 + year3 * R); -------------------------------------------------------------------------------- # # (6.14) Based on the pattern that we uncovered in (6.10) through (6.12), # let's create a programmer-defined function "simple". It takes an initial # balance "P", an interest rate "R", and a number of years "n", and returns # the balance after "n" years. # > simple := (P,R,n) -> P * (R+1)^n; -------------------------------------------------------------------------------- # # (6.15) We can use "simple" to calculate the balance that will result by # investing $1000 at 6% interest for 500 years ... # > simple(1000, .06, 500); -------------------------------------------------------------------------------- # # (6.16) ... and the balance that will result by investing $B at 10% interest # for 8 years. # > simple(B, .10, 8); -------------------------------------------------------------------------------- # # We record the population of the United States on January 1, 1994, and # January 1, 1995. # > jan94 := 259167e3;\ jan95 := 261638e3; -------------------------------------------------------------------------------- # # (6.17) If the population of the United States were growing according to # a simple interest model, "simpleGrowth" would be the annual interest # rate at which it grew in 1994. # > simpleGrowth := (jan95 - jan94) / jan94; -------------------------------------------------------------------------------- # # (6.18) By applying the simple interest model to the population growth of # the United States, we can project the population on January 1, 2000. # > simple(jan94, simpleGrowth, 6); -------------------------------------------------------------------------------- # # (6.19) We can use the simple interest model to calculate compound # interest. Here we calculate the result of investing $1000 at 6% annual # interest, compounded daily, for a period of one year. # > simple(1000., .06/365, 365); -------------------------------------------------------------------------------- # # (6.20) Here we repeat (6.19) symbolically. We calculate the result of # investing $P at R% annual interest, compounded daily, for a period of # one year. # > simple(P, R/365, 365); -------------------------------------------------------------------------------- # # (6.21) We continue to generalize. Here, we calculate the result of # investing $P at R% annual interest, compounded daily, for a period of # "n" years. # > simple(P, R/365, 365*n); -------------------------------------------------------------------------------- # # (6.22) Finally, we calculate the result of investing $P at R% annual # interest, compounded "m" times per year, for a period of "n" years. This # gives us a general expression for compound interest. # > simple(P, R/m, m*n); -------------------------------------------------------------------------------- # # (6.23) We convert the expression from (6.22) into a "compound" # function. It takes as parameters an initial balance "P", an interest rate # "R", a period of years "n", and the number of compounding intervals per # year "m". It returns the result of investing $P at R% annual interest, # compounded "m" times per year, for "n" years. # > compound := (P,R,n,m) -> P * (R/m + 1)^(m*n); -------------------------------------------------------------------------------- # # (6.24) We use "compound" to calculate the result of investing $1000 at # 6% annual interest, compounded daily, for 500 years. # > compound(1000, .06, 500, 365); -------------------------------------------------------------------------------- # # (6.26) We use "solve" to find find the simple interest rate "R" that # corresponds to a 6% investment compounded daily. # > solve(simple(P, R, 1) = compound(P, .06, 1, 365), R); -------------------------------------------------------------------------------- # # (6.27) We try to use "solve" to find an interest rate "R" that we can use # to model the growth of the population of the United States in 1994, # under the assumption that the growth occurs daily. Unfortunately, # "solve" is unable to solve the 365th-degree polynomial equation. # > solve(simple(P, simpleGrowth, 1) = compound(P, R, 1, 365), R); -------------------------------------------------------------------------------- # # (6.30) We find the limit of a compound interest investment as the # number of compounding intervals tends to infinity. This is the # continuous interest formula. # > limit(compound(P, R, n, m), m=infinity); -------------------------------------------------------------------------------- # # (6.31) We use the expression from (6.30) to create a function called # "continuous". It takes as parameters an initial balance "P", an interest # rate "R", and a number of years "n", and returns the balance that will # result from investing $P at R% continuous interest for "n" years. # > continuous := (P,R,n) -> P*exp(n*R); -------------------------------------------------------------------------------- # # (6.32) We use "solve" to find the continuous interest rate "R" that will # allow us to model the growth of the population of the United States # during 1994 as a problem in continuous interest. # > continuousGrowth := solve(simple(P, simpleGrowth, 1) = continuous(P, R, 1), R); -------------------------------------------------------------------------------- # # (6.33) We use the result of (6.32) to create a function "dailyPop" that # takes "days" as its parameter. It returns the population of the United # States "days" days after January 1, 1994, assuming that the population # grows according to the continuous interest model. Notice that this # function is defined in terms of another programmer-defined function, # "continuous". # > dailyPop := (days) -> continuous(jan94, continuousGrowth, days/365.); -------------------------------------------------------------------------------- # # (6.34) We use "dailyPop" to project the population of the United States # at midnight on February 1, 1994. # > dailyPop(31); -------------------------------------------------------------------------------- # # (6.35) We use "dailyPop" to project the population of the United States # at 6:00 am on February 1, 1994. # > dailyPop(31.25); -------------------------------------------------------------------------------- # # (6.36) We use "dailyPop" to project the population of the United States # at midnight on January 3, 1994. # > dailyPop(2); -------------------------------------------------------------------------------- # # (6.37) This is how we would have to do the calculation from (6.36) if # we hadn't defined the "dailyPop" function. # > 259167000 * exp(2/365 * .009489227532); -------------------------------------------------------------------------------- # # (6.38) Once a variable has been given a value via assignment, it cannot # be used as a symbolic constant. # > solve(simpleGrowth^2 = 5, simpleGrowth); -------------------------------------------------------------------------------- # # (6.39) We can "unassign" a variable by assigning it to a quoted version # of itself. # > simpleGrowth := 'simpleGrowth'; -------------------------------------------------------------------------------- # # (6.40) Once a variable has been "unassigned", it can be used as a # symbolic constant once again. # > solve(simpleGrowth^2 = 5, simpleGrowth); -------------------------------------------------------------------------------- # # (6.42) An example of the use of the "sum" function. # > sum(n^2, n=1..100); -------------------------------------------------------------------------------- # # (6.43) An example of using the "sum" function to compute a sum over # an infinite number of terms. # > sum(1/2^n, n=1..infinity); -------------------------------------------------------------------------------- >