00001 #ifndef MODEL_H
00002 #define MODEL_H
00003 
00004 #include <stat/libFN.h>
00005 
00006 using namespace bdm;
00007 
00009 class IMk1 : public diffbifn {
00010 protected:
00011         double alp1, alp2; 
00012 
00013 public:
00015         IMk1() :diffbifn () {dimy=4; dimx=3; dimu=1;}; 
00017         void set_parameters ( double alp10,  double alp20) {alp1=alp10; alp2=alp20;}
00018 
00019         vec eval ( const vec &x0, const vec &u0 ) {
00020                 
00021                 vec xk=zeros ( dimy );
00022 
00023                 xk ( 0 ) = 0.2* x0(1) - 0.1* x0(2)+ u0(0);  
00024                 xk ( 1 ) = x0(0); 
00025                 xk ( 2 ) = x0(1);
00026                 xk ( 3 ) = x0(2);
00027 
00028                 return xk;
00029         }
00030 
00031         void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
00032                 
00033 
00034                 if (full) { 
00035                         A = eye(dimy);
00036                         A(0,1) = 0.2;
00037                         A(0,2) = -0.1;
00038                 } else {
00039                 }; 
00040         }
00041 
00042         void dfdu_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {it_error ( "not needed" );};
00043 
00044 };
00045 
00047 class OMk1 : public diffbifn {
00048 public:
00050         OMk1() :diffbifn ( ) {dimy=2;dimx=3;dimu=2;}; 
00051         
00052         vec eval(const vec &x0, const vec &u0 ){
00053                 vec dt(dimy);
00054                 
00055                 dt(0) = x0(0);
00056                 dt(1) = x0(1); 
00057                 return dt;
00058         }
00059         
00060         void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {
00061                 
00062 
00063                 if (full) { 
00064                         A = zeros(dimy,dimx);
00065                         A(0,0)=1.0;
00066                         A(1,1)=1.0;
00067                 } else {}; 
00068         }
00069 };
00070 
00071 #endif //MODEL_H