Review: Recipes for Continuation, H. Dankowicz and F. Schilder

By James Meiss (book review editor)
Recipes for Continuation by Harry Dankowicz and Frank Schilder is, in one sense, a user's manual for the software package Computational Continuation Core or COCO. But it is also much more and much less than this.

COCO is an open source project of Dankowicz and Schilder that is analogous to AUTO or MatCont: it allows one to compute bifurcation diagrams, or more generally, to solve – using continuation – for submanifolds defined by a set of functions, a "zero problem" of the form \(\Phi : \mathbb{R}^n \to \mathbb{R}^m \) that may depend upon some set of parameters and may have added constraints. COCO is built as a MATLAB plugin, like MatCont. It fully utilizes object oriented ideas and MATLABs vectorization. It can be freely downloaded from the Sourceforge site cocotools. An extensive set of example projects are included with the project that coincide with the examples in Recipes for Continuation.

To introduce you to COCO, consider the rather trivial example of finding points on a circle defined by \( \Phi(u) = u_1^2 + (u_2-1)^2 -1 . \) This is encoded in a MATLAB function

function [data,y] = circ(prob,data,u)
Here "prob" is a COCO structure created by the command
prob = coco_prob();
The structure "data" can contain (modifiable) auxiliary data needed to evaluate the function at its argument, the vector \(u\). The function "circ" is added to the problem by
prob = coco_add_func(prob, 'fun1', @circ, [], 'zero', 'u0', [0.9; 1.1]);
This inserts the function handle @circ into the problem and gives it the designation "zero" to indicate that the goal is to zero this function (as opposed to acting as a constraint or monitor function). The final arguments above give an initial guess for the solution. The "add_func" paradigm in COCO allows for the flexibility to build more complex problems from simpler ones and modify problems once they are constructed. Here we just add one more function to the problem:
prob = coco_add_pars(prob, 'pars', 1:2, {'x', 'y'});
This defines and adds the "monitor" function \( (x,y) = \Psi(u) = u \) and will cause COCO to output columns labeled by "x" and "y". Finally, the continuation is executed with
cp = coco(prob, 'run1', [], 1,{'x','y'},[-2 2]);
The fourth argument indicates that this is a one-dimensional continuation, and the final argument gives the maximal range over which \(x \) is to be continued. Much like AUTO, the run creates a number of data files in a subdirectory "data/run1". The solution can be read into MATLAB with the command "coco_bd_read", or plotted directly, column by column, as:
x = plot(coco_bd_col(cp, 'x'), coco_bd_col(cp, 'y'), '-');

This example, of course, is not a bifurcation problem. COCO is built for the latter and includes a number of toolboxes, including a collocation toolbox for differential equations and a number of manifold generating or atlas algorithms.

But that is about COCO: what about the book? The book has an interesting structure – it is simultaneously more and less than a user manual. It certainly contains many examples and the input/output of many runs are shown. But nowhere is there a list of COCO commands with details of every argument; for this the MATLAB help facility can be used (alas, it seems that many functions are not yet documented, and those that are, are rather tersely so). The book is more than a user manual because it discusses many of the design decisions used to build the COCO framework. For example, how does one design an extensible software package that is flexible enough for the addition of new algorithms (e.g., for atlas construction or collocation), and at the same time maintain a coherent, mathematically sound structure? This is a major topic of the book. At the same time, there is much discussion of the theoretical nature of continuation problems. However, the authors note that this book should not be thought of as a text on bifurcation theory, and they recommend some of the standard texts, e.g., Kuznetsov's fine text Elements of Applied Bifurcation Theory, etc., as appropriate for this.

One difficulty that this reviewer had with the text is that the concepts discussed are not often well motivated. The authors adopt a more mathematical presentation, stating, e.g., "Let \( E_1\) be an extended continuation problem" in an abstract way, when I would have preferred to see more concrete examples before the abstraction. Then there are those thorny statements "It follows that", that we always make in mathematics, but that sometimes leave the reader with a serious desire for extensive head-scratching.

Thus, this is not a text for beginners in the field: readers need to be familiar both with bifurcation theory and with continuation methodology. They also need to be familiar with MATLAB constructs. Given these elements of preparation, a reader who has an interest in designing bifurcation algorithms and/or simply using a well-designed framework like COCO will be well-served by this book. I certainly am intrigued enough to continue to explore COCO as a framework for continuation problems in my research.

James Meiss

Categories: Magazine, Book Reviews

Please login or register to post comments.