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