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