CAPD DynSys Library  5.2.0
Reorganization

Introduction

This concept originally came for doubleton representations:

\[ x+C \cdot r0+B \cdot r \]

In the beginning r0 holds the initial set size and r is set to zero. But as we propagate the set the r0 is unchanged but all errors are put into r and finally it can become a dominant part (especially for small initial sets). It occurs that sometimes it is better to reorganize the set from time to time. Our first strategy was to put everything into the r0 and set the r to zero again. Now for doubleton we have several different reorganization schemes. The choice should depend on a doubleton set type and on a dynamical system used.

How to define reorganization

Reorganization class should implement 3 methods:

  • isReorganizationNeeded(set) - implements some strategy and returns true if the set should be reorganized
  • reorganize(set) - do the reorganization of the set
  • reorganizeIfNeeded(set) - it perform reorganization if it is needed. We normally use combination of above functions but sometimes it is more convenient/faster to re-implement them together.

How to use reorganizations?

  1. Choose set you want to be reorganized e.g. CORect2Set
  2. Choose suitable reorganization e.g. C0Rect2SetReorganization or FullReorganization
  3. Use ReorganizedSet to put them together
    typedef C0Rect2Set<IMatrix> MySet;
    typedef ReorganizedSet<MySet, FullReorganization<MySet> > MyReorganizedSet;
  4. Now you can use MyReorganizedSet exactly in the way you would use C0Rect2Set.
    IVector moveNSteps(C0DynSys & dynsys, const IVector & x0, int N) {
    MyReorganizedSet set(x0);
    for( int i = 0; i<N; ++i){
    set.move(dynsys);
    }
    return (IVector) set;
    }

Implemented reorganizations

capd::vectalg::Vector
Definition: ColumnVector.h:177