00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MSL_MODEL_H
00020 #define MSL_MODEL_H
00021
00022 #include <list>
00023 #include <string>
00024 using namespace std;
00025
00026
00027 #include "vector.h"
00028 #include "matrix.h"
00029
00031
00040 class Model {
00041 protected:
00043 double ModelDeltaT;
00044
00046 list<MSLVector> Inputs;
00047
00049 MSLVector RungeKuttaIntegrate(const MSLVector &x, const MSLVector &u, const double &h);
00050
00052 MSLVector EulerIntegrate(const MSLVector &x, const MSLVector &u, const double &h);
00053 public:
00054
00056 string FilePath;
00057
00059 MSLVector LowerState;
00060
00062 MSLVector UpperState;
00063
00065 MSLVector LowerInput;
00066
00068 MSLVector UpperInput;
00069
00071 int StateDim;
00072
00074 int InputDim;
00075
00077 Model(string path);
00078
00080 virtual ~Model() {};
00081
00083 virtual list<MSLVector> GetInputs(const MSLVector &x);
00084
00086 virtual MSLVector StateTransitionEquation(const MSLVector &x, const MSLVector &u) = 0;
00087
00089 virtual bool Satisfied(const MSLVector &x);
00090
00092 virtual MSLVector Integrate(const MSLVector &x, const MSLVector &u,
00093 const double &h) = 0;
00094
00096
00100 virtual MSLVector LinearInterpolate(const MSLVector &x1, const MSLVector &x2,
00101 const double &a);
00102
00106 virtual MSLVector StateDifference(const MSLVector &x1, const MSLVector &x2);
00107
00108
00110
00111
00113 virtual double Metric(const MSLVector &x1, const MSLVector &x2);
00114
00115
00116
00117
00118
00119
00120
00122 virtual void Partialf_x(const MSLVector &x, const MSLVector &u, MSLMatrix & m) {};
00123
00125 virtual void Partialf_u(const MSLVector &x, const MSLVector &u, MSLMatrix & m) {};
00126
00128 virtual void L(const MSLVector &x, const MSLVector &u, double &l) {};
00129
00131 virtual void PartialL_x(const MSLVector &x, const MSLVector &u, MSLMatrix & m) {};
00132
00134 virtual void PartialL_u(const MSLVector &x, const MSLVector &u, MSLMatrix & m) {};
00135
00137 virtual void Phi(const MSLVector &x, const MSLVector &u,
00138 const MSLVector &goalstate, double &phi) {};
00139
00141 virtual void PartialPhi_x(const MSLVector &x, const MSLVector &u,
00142 const MSLVector &goalstate,
00143 MSLMatrix & m) {};
00144
00146 virtual void PartialPhi_t(const MSLVector &x, const MSLVector &u,
00147 const MSLVector &goalstate,
00148 MSLMatrix & m) {};
00149
00151 virtual void Psi(const MSLVector &x, const MSLVector &goalstate, MSLVector& psi) {};
00152
00154 virtual void PartialPsi_x(const MSLVector &x, const MSLVector &u, MSLMatrix & m) {};
00155
00157 virtual void PartialPsi_t(const MSLVector &x, const MSLVector &u, MSLMatrix & m) {};
00158
00159 };
00160
00161 #endif