00001 /* ************************************************************* 00002 00003 Copyright 2010 Terry Lyons, Stephen Buckley, Djalil Chafai, 00004 Greg Gyurkó and Arend Janssen. 00005 00006 Distributed under the terms of the GNU General Public License, 00007 Version 3. (See accompanying file License.txt) 00008 00009 ************************************************************* */ 00010 00011 00012 00013 #pragma once 00014 00015 #ifndef __SOLUTIONPATH__ 00016 #define __SOLUTIONPATH__ 00017 00018 00019 #include "Path.h" 00020 #include "GroupElement.h" 00021 #include "LieMatrix.h" 00022 #include "dyadic_interval.h" 00023 #include <vector> 00024 00025 00027 00030 template <typename my_alg_type_IN, typename my_alg_type_OUT> 00031 class SolutionPath 00032 { 00033 private: 00035 Path<my_alg_type_IN> & theControl; 00036 00038 lietovectorfield< my_alg_type_IN, LieMatrix<my_alg_type_OUT> > l2vf; 00039 00040 00041 public: 00043 SolutionPath(Path<my_alg_type_IN> & theControlIn, std::vector< LieMatrix<my_alg_type_OUT> > theEquationIn) 00044 : theControl(theControlIn), l2vf(theEquationIn) 00045 { 00046 }; 00047 00049 ~SolutionPath(void) 00050 { 00051 }; 00052 00054 00057 GroupElement<my_alg_type_OUT> DescribePath(dyadic_interval increment) 00058 { 00059 LieMatrix<my_alg_type_OUT> temp; 00060 temp = l2vf.lie2vectorfield(theControl.DescribePath(increment, increment.n)); 00061 return temp.exp(); 00062 }; 00063 00064 GroupElement<my_alg_type_OUT> DescribePath(dyadic_interval increment, const int accuracy) 00065 { 00066 LieMatrix<my_alg_type_OUT> temp; 00067 temp = l2vf.lie2vectorfield(theControl.DescribePath(increment, accuracy)); 00068 return temp.exp(); 00069 }; 00070 00071 };// END CLASS DEFINITION SolutionPath 00072 00073 #endif // __SOLUTIONPATH__