$$ \newcommand{\tp}{\thinspace .} $$

Sequences and difference equations

Hans Petter Langtangen [1, 2]

[1] Center for Biomedical Computing, Simula Research Laboratory
[2] Department of Informatics, University of Oslo

Jun 14, 2016


Table of contents

Mathematical models based on difference equations
      Interest rates
      The factorial as a difference equation
      Fibonacci numbers
      Growth of a population
      Logistic growth
      Payback of a loan
      The integral as a difference equation
      Taylor series as a difference equation
      Making a living from a fortune
      Newton's method
      The inverse of a function
Programming with sound
      Writing sound to file
      Reading sound from file
      Playing many notes
      Music of a sequence
Exercises
      Exercise 1: Determine the limit of a sequence
      Exercise 2: Compute \( \pi \) via sequences
      Exercise 3: Reduce memory usage of difference equations
      Exercise 4: Compute the development of a loan
      Exercise 5: Solve a system of difference equations
      Exercise 6: Modify a model for fortune development
      Exercise 7: Change index in a difference equation
      Exercise 8: Construct time points from dates
      Exercise 9: Visualize the convergence of Newton's method
      Exercise 10: Implement the secant method
      Exercise 11: Test different methods for root finding
      Exercise 12: Make difference equations for the Midpoint rule
      Exercise 13: Compute the arc length of a curve
      Exercise 14: Find difference equations for computing \( \sin x \)
      Exercise 15: Find difference equations for computing \( \cos x \)
      Exercise 16: Make a guitar-like sound
      Exercise 17: Damp the bass in a sound file
      Exercise 18: Damp the treble in a sound file
      Exercise 19: Demonstrate oscillatory solutions of the logistic equation
      Exercise 20: Automate computer experiments
      Exercise 21: Generate an HTML report
      Exercise 22: Use a class to archive and report experiments
      Exercise 23: Explore logistic growth interactively
      Exercise 24: Simulate the price of wheat
References

From mathematics you probably know the concept of a sequence, which is nothing but a collection of numbers with a specific order. A general sequence is written as $$ \begin{equation*} x_0,\ x_1,\ x_2,\ \ldots,\ x_n,\ldots, \end{equation*} $$ One example is the sequence of all odd numbers: $$ \begin{equation*} 1, 3, 5, 7, \ldots, 2n+1,\ldots \end{equation*} $$ For this sequence we have an explicit formula for the \( n \)-th term: \( 2n+1 \), and \( n \) takes on the values 0, 1, 2, \( \ldots \). We can write this sequence more compactly as \( (x_n)_{n=0}^\infty \) with \( x_n=2n+1 \). Other examples of infinite sequences from mathematics are $$ \begin{equation} 1,\ 4,\ 9,\ 16,\ 25,\ \ldots\quad (x_n)_{n=0}^\infty,\ x_n=(n+1)^2, \tag{1} \end{equation} $$ $$ \begin{equation} 1,\ \frac{1}{2},\ \frac{1}{3},\ \frac{1}{4},\ \ldots\quad (x_n)_{n=0}^\infty,\ x_n={1\over n+1}\tp \tag{2} \end{equation} $$

The former sequences are infinite, because they are generated from all integers \( \geq 0 \) and there are infinitely many such integers. Nevertheless, most sequences from real life applications are finite. If you put an amount \( x_0 \) of money in a bank, you will get an interest rate and therefore have an amount \( x_1 \) after one year, \( x_2 \) after two years, and \( x_N \) after \( N \) years. This process results in a finite sequence of amounts $$ \begin{equation*} x_0, x_1, x_2,\ldots, x_N,\quad (x_n)_{n=0}^N\tp\end{equation*} $$ Usually we are interested in quite small \( N \) values (typically \( N\leq 20-30 \)). Anyway, the life of the bank is finite, so the sequence definitely has an end.

For some sequences it is not so easy to set up a general formula for the \( n \)-th term. Instead, it is easier to express a relation between two or more consecutive elements. One example where we can do both things is the sequence of odd numbers. This sequence can alternatively be generated by the formula $$ \begin{equation} x_{n+1} = x_{n} + 2\tp \tag{3} \end{equation} $$ To start the sequence, we need an initial condition where the value of the first element is specified: $$ \begin{equation*} x_0 = 1\tp\end{equation*} $$ Relations like (3) between consecutive elements in a sequence is called recurrence relations or difference equations. Solving a difference equation can be quite challenging in mathematics, but it is almost trivial to solve it on a computer. That is why difference equations are so well suited for computer programming, and the present document is devoted to this topic. Necessary background knowledge is programming with loops, arrays, and command-line arguments and visualization of a function of one variable.

The program examples regarding difference equations are found in the folder src/diffeq.

This chapter is taken from the book A Primer on Scientific Programming with Python by H. P. Langtangen, 5th edition, Springer, 2016.