[go: up one dir, main page]

Menu

Tree [r1101] / coco /
 History

HTTPS access


File Date Author Commit
 doc 2011-05-03 fschild [r873] cleaned up doc/ShortRef
 examples 2011-05-03 fschild [r874] set ignore list and keywords
 latex 2010-09-09 fschild [r606] updated ignore list
 tests 2011-10-15 hdankowicz [r1101]
 toolbox 2011-10-11 fschild [r1097] added optional argument to collocation toolbox ...
 CHANGES.log 2007-12-13 frank [r32] added log file for changes between versions
 LICENSE 2007-10-31 frank [r2] set property svn:eol-style to native
 README 2010-06-09 fschild [r442] updated README somewhat
 README.txt 2010-06-09 fschild [r442] updated README somewhat
 ignore.txt 2010-09-09 fschild [r605] updated ignore list
 pack 2007-10-31 frank [r1] initial checkin
 svn_build_release 2011-06-01 fschild [r924] modified contents of releases
 svn_copy_toolbox 2011-07-02 fschild [r989] started building toolbox for (Hamiltonian) RPOs...
 svn_move_toolbox 2010-07-14 fschild [r558] - cleaned up and moved mpbvp to collocation
 svn_set_ignore 2008-02-07 frank [r38] added some utility scripts
 svn_set_keyword 2008-02-07 frank [r38] added some utility scripts
 svncommands.txt 2009-11-26 frank [r366] updated URL

Read Me

Using COCO:

- uncompress the package
- start Matlab
- in Matlab change to coco/toolboxes
- execute startup.m
- change to coco/examples and run the demos

To simplify using coco you might want to execute startup.m whenever Matlab starts. Please see the Matlab documentation for how to do this.

The text below is outdated. There will soon be a paper on the mathematical concepts of the core and we will update the documentation in the M-files of coco.

#####################################################################
This file contains some very basic documentation of ideas fundamental to this package. The ultimate source of reference is still the source code though.



1. The philosophy of the data structure opts
--------------------------------------------

The basic objectives behind the opts structure are to make it easy to replace parts of an algorithm, to avoid the use of global variables or long argument lists and to store the full state of the continuation algorithm in an organised way. For example, it should be possible to replace Newton's method with another algorithm, or the code for 1D continuation with a code for 2D continuation. Also, the user should be able to set certain constants influencing algorithms in a fairly simple way.

The dependencies within individual parts of a continuation code have the form of a graph. This graph may be quite deep and may contain loops (it is not a tree). We represent such a graph as a dictionary, that is, a table with two columns, a class name and a set of values. This table is encoded as a structure and the principal form of access is

  val = opts.class_name.property_name

Now, a class like 'cont' may contain a property named 'corrector', which specifies the corrector to use by the continuation method. It would access functions and properties defined by this corrector with

  corrector = opts.cont.corrector
  opts = opts.(corrector).some_function(opts, ...)

This is similar to pointers and one can exchange the corrector by assigning a non-default value to the property 'corrector' of the class 'cont'. This way it is possible to represent arbitrary graphs with a flat data structure.

You should aim at making it possible to replace algorithms in a transparent way as much as possible. You should pass and return the opts structure in/from any algorithm. Use function definitions like

  function [opts, varargout] = some_function(opts, varargin)

This somewhat strange syntax of having an input and output argument with the same name allows Matlab to optimise access to the structure opts (that is, to avoid any unnecessary copying).



2. The concept of sub-toolboxing
--------------------------------

The idea of sub-toolboxing is to make it possible that any toolbox for some continuation problem can be used as a building block for other toolboxes. Take, as a simple example, the continuation of homoclinic orbits. The classic way to attack this problem is to construct a BVP that contains the equations for the fixed point and its invariant manifolds in the boundary conditions. A more natural way seems to be to combine two toolboxes, one for fixed point continuation with another one for solutions of boundary value problems. These two toolboxes would become sub-toolboxes of a homoclinic orbit toolbox, which in turn is a sub-toolbox for the continuation code.

Toolboxes like MPBVP should be designed keeping this in mind. They should provide a full set of interface functions for constructing and manipulating equations and for accessing all parts of the solution in a well-defined way.

The ideal toolbox does a specific well-defined job and can be replaced by any other toolbox offereing the same interface.

At the moment our toolboxes do not strictly follow this idea as the entry functions with names defined as

  func_name = sprintf('%s_%s2%s', TOOLBOX, FROM_ST, TO_ST)

call Newton's method COCO explicitly. Instead, they should only construct an algorithm in functional form and an initial solution and then return to COCO. This will be one of the more important changes to this package; see the next section for more details.



3. Changes planned in the future
--------------------------------

There are several changes we want to make, which are due to design limitations that we discovered during testing.

We plan to reorganise the finite state machine for the continuation code. The main goal is to split it properly according to functionality. The corrector is already a separate toolbox. Similarly, we will have a rather abstract continuation code and a toolbox representing a manifold. The latter toolbox will become responsible for constructing an apropriate data structure, the construction of extended systems, the prediction and mesh-adaptation (of the mesh of the family of solutions, not the collocation points). The continuation code will be rearranged to work with srbitrary-dimensional families of solutions.

Another major addition is to enable additional constraints and test functions. This is quite complicated and may strongly influence the communication with other toolboxes. As yet it is not clear how we are going to implement this important feature. We aim at making it possible to add constraints and allow the continuation of higher co-dimension curves/families. We also aim at making this independent of the dimension of the family of solutions.

There are a number of other changes that may influence other toolboxes. Please see the file toolbox/todo.txt for a complete list of open problems.