Lyapunov Exponents - Demonstrations

These demonstrations use the 2d Map applet to illustrate the calculation of Lyapunov exponents using the Gramm-Schmidt procedure. You can find more information on how to use the applets on the following pages (return here by hitting "Back"):

Note that in the demonstration applets the cumulative estimate of the Lyapunov exponents is shown each time the iterations are stopped. (These are sometimes called "finite time Lyapunov exponents.) Continuing the iterations will accumulate the estimate of the exponents over a longer time, giving more accurate values.


  1. Demonstration 1 - Henon Map
  2. Demonstration 2 - Bakers' Map - comparison with known results
  3. Demonstration 3 - 2D Circle Map


The procedure to calculate the exponents is simply to iterate two vectors t1 and t2 using the linear equations that describe the evolution of small perturbations to the map variables (the tangent space). Then after each time step the magnification of vector t1 is calculated (and then t1 is renormalized to unit length) and the vector t2 is projected normal to t1, and the magnification of this normal component is calculated (and then t2 is renormalized to unit length). The code to do this is simply

* Performs Gramm-Schmidt orthogonalization and calculates increase in norm of
* the vectors
* @param t1 Tangent vector of larger eigenvalue
* @param t2 Tangent vector of smaller eigenvalue
* @param c cumulated log of growth of vector norms
       private void renormalize(double[] t1, double[] t2, double[] c) {
             double norm1, norm2, dot;
             norm1=Math.sqrt(t1[0]*t1[0]+t1[1]*t1[1]);  // length of t1
             t1[0]=t1[0]/norm1;                         // renormalize to unit length
             dot=t2[0]*t1[0]+t2[1]*t1[1];               // component of t2 along t1
             t2[0]=t2[0]-dot*t1[0];                     // project t2 normal to t1
             norm2=Math.sqrt(t2[0]*t2[0]+t2[1]*t2[1]);  // length of t2
             t2[0]=t2[0]/norm2;                         // renormalize to unit length
             c[0]=c[0]+Math.log(norm1);                 // increase cumulative magnification

[First Demonstration] [Outline]
Last modified Sunday, January 9, 2000
Michael Cross

This page has been visited times.