The CAPD library provides mechanisms for easy computation of Poincare maps their derivatives. In general the Poincare map is defined by specifying
In the CAPD a Poincare map is seen as a function
rather than a mapping from section to section. Initial point does not need to be on Poincare section . We can compute intersection point of any trajectory with Poincare section.
We will give an overview on Poincare maps for both cases of rigorous and nonrigorous computations as they differ in details.
Poincare section is an object of class that implements interface defined in class AbstractSection. For user convenience we defined three classes that implement interface AbstractSection. Clearly the user can implement own class if necessary.
- CoordinateSection - the section is given as for some index and .
- AffineSection - the section is an affine hyperplane defined by normal vector and translation . We strongly recommend usage of affine sections that are locally orthogonal to the vector field.
- NonlinearSection - the section is defined as arbitrary (possible nonlinear) map . Constructors of this class have exactly the same arguments as of the class Function. In fact class NonlinearSection is derived from class Function.
For user convenience we defined the following types for computation in double D, long double LD, multiple precision Mp and in interval arithmetics I, MpI
- DCoordinateSection, LDCoordinateSection, MpCoordinateSection, ICoordinateSection, MpICoordinateSection
- DAffineSection, LDAffineSection, MpAffineSection, IAffineSection, MpIAffineSection
- DNonlinearSection, LDNonlinearSection, MpNonlinearSection, INonlinearSection, MpINonlinearSection
In the examples below we will show how to use each of these types of Poincare sections. Thus, we will use type NonlinearSection even if the section will be linear - just to demonstrate how to define it.
Defining Poincare maps
Given an ODE solver (see section ODEs - nonrigorous methods)
This class is used to represent a map .
Definition: Map.h:125
int order
Definition: tayltst.cpp:31
capd::dynsys::BasicOdeSolver< capd::DMap > DOdeSolver
Definition: typedefs.h:26
and Poincare section
capd::poincare::CoordinateSection< capd::DMatrix > DCoordinateSection
Definition: typedefs.h:28
we define an instance of Poincare map by constructor call
capd::poincare::BasicPoincareMap< capd::DOdeSolver > DPoincareMap
Definition: typedefs.h:36
The last argument specifies crossing direction of Poincare section. This is an enumeration type with three possible values
- Note
- The argument
crossingDirection
of the constructor can be skipped. Its default value is capd::poincare::Both
.
In similar way one can define an instance of IPoincareMap for rigorous computation of Poincare maps.
IMap vectorField(
"var:x,y;fun:-y,x;");
capd::poincare::NonlinearSection< capd::IMatrix > INonlinearSection
Definition: typedefs.h:34
capd::dynsys::OdeSolver< capd::IMap > IOdeSolver
Definition: typedefs.h:19
capd::poincare::PoincareMap< capd::IOdeSolver > IPoincareMap
Definition: typedefs.h:44
- Attention
- The objects
vectorField, solver, section
must exists during usage of object pm
as pm
holds references to them. In particular this code is incorrect
DMap vectorField(
"var:x,y;fun:-y,x;");
}
Class Function represents a function .
Definition: Function.h:41
Instead one can define a little class for storing all objects (recommended) struct MyPoincareMap{
: vectorField(...),
solver(vectorField,
order),
section(...),
pm(solver,section)
{}
};
capd::poincare::AffineSection< capd::DMatrix > DAffineSection
Definition: typedefs.h:24